MongoDB简介
介绍:MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
特点:高性能、易部署、易使用,存储数据非常方便。
主要功能特性有:
Ø 面向集合存储,易存储对象类型的数据
Ø 模式自由
Ø 支持动态查询
Ø 支持完全索引,包含内部对象
Ø 支持查询
Ø 支持复制和故障恢复
Ø 使用高效的二进制数据存储,包括大型对象(如视频等)
Ø 自动处理碎片,以支持云计算层次的扩展性
Ø 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言
Ø 文件存储格式为BSON(一种JSON的扩展)
Ø 可通过网络访问
Mongodb无模式优点
- 存储形式,相较于传统的关系型数据库,它可以使用一个表存储原来需要使用多表关联才能存储的数据库。
- 存储动态性,相较于传统的数据库当要增加一个属性值的时候要对表大动,mongodb的面向文档的形式可以使其属性值轻意的增加和删除。而原来 的关系型数据库要实现这个需要有很多的属性表来支持。
Mongodb存储特点
- 一种是高效的fire-and-forget模式就是只管向数据库服务器提交数据不等数据库服务器的回应。这个是数据库默认模式。
- 另外一种是安全模式,就是写入的同时还要与服务器同步,当数据的安全性要求高的时候适合用安全模式。
- 日志功能是帮助在系统Down机的时候恢复数据完整性做的,默认情况下Mongodb是开启日志功能的。每一个数据库操作都会先记录日志,所以当down机重启动服务器的时候数据库服务器能够通过日志文件恢复之前未完成的操作。
- 当然,开启日志必然影响性能,所以用户需要根据自己的实际应用来选择一个合适的工作模式。
- 如果你打算使用无日志模式,最好使用拷贝集群模式,这样可以降低数据丢失的风险。
Mongodb的索引
- Mongodb支持关系型数据库的所有索引模式(升序,降序,唯一,复合,地理空间索引),同时也支持二级索引(通过B-tree实现)。每一个collection支持64个索引
- 支持ad hoc queries用户自己可以定义自己的查询。
Mongodb的集群
- Mongodb的集群模式是主从模式的集群,其中主服务器只有一个,支持读写,而从服务器可以有多个只支持读取操作。 集群的主要目的是通过数据的冗余实现failover模式,从而提高数据库服务器的可用性。当主服务器断掉后其中的一个从服务器会自动升级为主服务器,其 它drive client只要通过failover就可以自动切换到新的主服务器,正常工作。而当原来的主服务器再恢复工作的时候,它将自动转为从服务器。
Mongodb的可扩展性
- Mongodb采用了最新的低成本的横向扩展模式,相对于传统的单结点纵向扩展,可以节约成功,而且有更好的可靠性,更好的数据处理性能。
使用原理
所谓“面向集合”(Collenction-Oriented),意思是数据被分组存储在数据集中,被称为一个集合(Collenction)。每 个集合在数据库中都有一个唯一的标识名,并且可以包含无限数目的文档。集合的概念类似关系型数据库(RDBMS)里的表(table),不同的是它不需要 定义任何模式(schema)。
模式自由(schema-free),意味着对于存储在mongodb数据库中的文件,我们不需要知道它的任何结构定义。如果需要的话,你完全可以把不同结构的文件存储在同一个数据库里。
存储在集合中的文档,被存储为键-值对的形式。键用于唯一标识一个文档,为字符串类型,而值则可以是各种复杂的文件类型。我们称这种存储形式为BSON(Binary JSON)。
数据库
数据库是一个集合的物理容器。每个数据库获取其自己设定在文件系统上的文档。一个单一的MongoDB服务器通常有多个数据库。
集合
集合是一组MongoDB的文件。它与一个RDBMS表是等效的。一个集合存在于数据库中。集合不强制执行模式。集合中的文档可以有不同的字段。通常情况下,在一个集合中的所有文件都是类似或相关的。
文档
文档是一组键值对。文档具有动态模式。动态模式是指,在同一个集合的文件不必具有相同一组集合的文档字段或结构,并且相同的字段可以保持不同类型的数据。
下面给出的表显示RDBMS术语使用 MongoDB 的关系
| RDBMS | MongoDB |
|---|---|
| Database | Database |
| Table | Collection |
| Tuple/Row | Document |
| column | Field |
| Table Join | Embedded Documents |
| Primary Key | Primary Key (Default key _id provided by mongodb itself) |
| 数据库服务器和客户端 | |
| Mysqld/Oracle | mongod |
| mysql/sqlplus | mongo |
MongoDB设计模式的一些考虑
-
可根据用户要求设计架构。
-
合并对象为一个文件,如果要将它们放在一起。否则分开它们(但确保不需要连接)。
-
重复数据(有限),因为磁盘空间便宜(相比计算时间)。
-
不需要连接写入,而是读。
-
优化架构是最常见的用例。
-
在模式上做复杂的聚集。
例子
假设一个客户端需要一个数据库设计,设计一个博客网站,来看看 RDBMS 和 MongoDB 架构设计之间的差异。网站有以下要求。
-
每一个文章内容都有独特的标题,描述和网址。
-
每一个文章内容可以有一个或多个标签。
-
每一个文章内容都有其出版商总数喜欢的名称。
-
每一个文章内容有评论以及名字,消息,时间和喜欢的用户。
-
对于每个文章,可以是零个或多个评论。
上述要求在RDBMS模式设计,将有至少三个表。
在MongoDB 模式设计就文章一个集合,并具有以下结构:
{ _id: POST_ID title: TITLE_OF_POST, description: POST_DESCRIPTION, by: POST_BY, url: URL_OF_POST, tags: [TAG1, TAG2, TAG3], likes: TOTAL_LIKES, comments: [ { user:'COMMENT_BY', message: TEXT, dateCreated: DATE_TIME, like: LIKES }, { user:'COMMENT_BY', message: TEXT, dateCreated: DATE_TIME, like: LIKES } ] }
因此,尽管RDBMS要显示数据,需要加入三个表,而在MongoDB数据只是从一个集合。
浙公网安备 33010602011771号