1 | 本文参考自:https://github.com/0voice/interview_internal_reference/tree/master/11.MongoDB%E7%AF%87 |
一、MongoDB的基本概念?
1.1 什么是MongoDB?
MongoDB是一个文档数据库,提供好的性能,领先的非关系型数据库
1.2 MongoDB是由哪种语言写的?
MongoDB用 C++ 编写
1.3 MongoDB有哪些优势?
面向文档的存储:以JSON格式的文档保存数据
- 任何属性都可以建立索引
- 复制以及高可扩展性
- 自动分片
- 丰富的查询功能
- 快速的即时更新
1.4 什么是 mongod?
mongod是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执行后台管理操作。当我们运行mongod命令意味着正在启动MongoDB进程,并且在后台运行。
1.5 为什么用MongoDB?
- 架构简单
- 没有复杂的连接
- 深度查询能力,MongoDB支持动态查询。
- 容易调试
- 容易扩展
- 不需要转化/映射应用对象到数据库对象
- 使用内部内存作为存储工作区,以便更快的存取数据。
1.6 MongoDB支持的数据类型?
String;Integer;Boolean;Double;Min/Max keys;Array;Timestamp;Object;Null;Symbol;Date;Object ID;Binary Data;Code;Regular expression

二、MongoDB复制(副本集)
1 | MongoDB复制是将数据同步在多个服务器的过程。 |
2.1 MongoDB复制有什么好处?
- 保障数据的安全性
- 数据高可用性 (24*7)
- 灾难恢复
- 无需停机维护(如备份,重建索引,压缩)
- 分布式读取数据
2.2 MongoDB复制原理?
mongodb的复制至少需要两个节点。其中一个主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据;
mongodb各个节点常见的搭配方式为:一主一从、一主多从;
主节点记录在其上所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证节点的数据与节点一致;
客户端从主节点读取数据,在客户端写入数据到主节点时,主节点与从节点进行数据交互保障数据的一致性
2.3 副本集的特征?
- N 个节点的集群
- 任何节点可作为主节点
- 所有写入操作都在主节点上
- 自动故障转移
- 自动恢复
三、MongoDB分片
1 | 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。 |
3.1 为什么使用分片?
- 复制所有的写入操作到主节点
- 延迟的敏感数据会在主节点查询
- 单个副本集限制在12个节点
- 当请求量巨大时会出现内存不足。
- 本地磁盘不足
- 垂直扩展价格昂贵
四、MongoDB备份(mongodump)与恢复(mongorestore)
4.1 数据的备份
mongodump -h dbhost -d dbname -o dbdirectory
-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:
需要备份的数据库实例,例如:test
-o:
备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
4.2 数据恢复
mongorestore -h
<:port> -d dbname
–host <:port>, -h <:port>:
MongoDB所在服务器地址,默认为: localhost:27017
–db , -d :
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
–drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
: mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。
你不能同时指定
和 –dir 选项,–dir也可以设置备份目录。 –dir:
指定备份的目录
你不能同时指定
和 –dir 选项。
五、MongoDB Java
1 | import com.mongodb.MongoClient; |