MongoDB的几个特性

一、主从
1、主从配置
mongodb提供主从配置,主从配置需要两个数据库节点,可以在不同的两台机器,也可以在同一台机器(可使用--dbpath参数指定数据库目录)。主
数据库会记录在其上的所有操作oplog,从数据库定期轮询主数据库获取这些操作,然后对自己的数据副本执行这些操作,从而保证主从数据的一致性。
2、互为主从
数据库自动协调某个时间点上的主从关系。一开始,数据库会判断哪个为主,哪个为从,一旦主服务器负载过高,另一台就会自动成为从服务器。

二、Replica Set
Replica set的目标是取代主从方式成为mongodb新的集群组织方式,目前已经适合生产环境使用。原理上,跟主从差不多,都是通过复制oplog日志,重做日志把操作复制到新的实列上。在主从中,需要两两进行心跳保证实例之间了解相互的生存状态,如果集群一大,使得集群增加额外的通讯负担。而Replica Set克服了这个缺点。
Replica Set的模式是故障转移模式。故障转移需要三种角色。主节点,从节点 ,选举节点。当主节点挂掉时,选举节点进行选举,选出主节点。

三、分片
当数据快达到了一台机器的限制存储量,或者一台机器的io负载过高时,需要进行分片。本质是说将一个集合的数据存储在不同的节点。

Shard:用于存储数据的地方。
Config Server:存储整个集群信息,其中包括chunk数据块信息。
Router:路由服务,让整个集群看起来像单一数据库,前端应用可以透明使用。
在配置集群的时候,需要启动路由服务,mongod实例。除此之外,使用时需要在数据库和集合的粒度上开启分片功能。
分片的关键点是chunk(块)。一个分片包含多个区间,每个区间就是一个块。每个块有大小限制,可在配置文件中配置。
路由服务作用:从元数据中定位数据位置,合并查询结果,负责数据迁移和数据自动平衡,并管理集群节点。
需注意的是,启用分片后,无法直接使用group进行统计,但可以用map reduce功能替代。

四、索引
monggodb支持多种类型的索引,包括单字段索引、复合索引、多key索引、文本索引等。
可以使用explain对语句进行解析。
mongodb支持对DB的请求进行profiling。目前支持3种级别的profiling。
0:不开启profiling
1:将处理时间超过某个阀值的请求都记录到DB下的system.profile集合(类似Mysql的slow query)
2:记录所有的请求

五、GridFS
GridFS是mongodb的内置功能。它主要用来存储和恢复那些超过16M的文件,比如:图片、视频、音频等。
它是非常有用的,不只方便存储超过16M的文件,而且它在读取一个文件的时候,不会将整个文件读入内存。
GridFS将一个文件存放在两个集合中,chunks和files。chunks主要存储文件内容(以二进制方式),而files存储文件的元信息(包括存储的位置,自定义属性等)。

六、MapReduce
聚合查询是用来统计数据的,类似于Mysql的count。但当涉及到大数据或者有分区的时候,聚合查询性能差或者不能用,这时就需要mapReduce了。
mapReduce命令的基本格式为:
mapReduce首先查询集合,然后将结果文档利用emit映射为键值对,然后在根据有多个值的键来简化。
map:一个JavaScript函数,将一个值与键对应起来,并生成键值对;
reduce:一个JavaScript函数,合并相同的键值对;
out:统计后,存放的集合名字;
query:在reduce的时候,按该条件过滤(可选);
sort:排序标准;
limit:指定返回的文档的最大数量(可选);

使用mongodb需要注意点:
1、不支持事物;
2、mongodb占用空间过大;
原因:
1)、空间的预分配:为避免形成过多的磁盘碎片,mongodb每次空间不足的时候都会申请生成一大块的磁盘空间,申请的量从64M、128M、256M这样的指数递增,直到2G为单个文件的最大体积。随着数据量的增加,你可以在其数据目录例看到这些整块生成容量不断递增的文件;
2)、字段名所占用的空间:为了保持每个记录内的结构信息用于查询,mongodb需要把每个字段的key-value都以BSON(json的二进制格式)格式存储。如果value相对key并不大,比如存储数字,则数据的overhead是最大的。
3)、删除数据不释放空间:为避免记录删除后数据的大规模挪动,原记录空间不删除,只标志为已删除,以后可以重复利用。可以定期运行db.repairDatabase()来整理记录,但这个过程会比较缓慢
3、mongodb没有成熟的维护工具。


参考文章:

1、http://www.jianshu.com/p/7a41907a1549

2、http://www.runoob.com/mongodb/mongodb-sharding.html

3、http://wiki.jikexueyuan.com/project/mongodb/mongodb-map-reduce.html


发布了63 篇原创文章 · 获赞 28 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/kelindame/article/details/73511691