1.什么是MongoDB?
MongoDB是一个文档数据库;提供好的性能;是一个非关系型数据库;采用BSON存储文档数据;BSON是一种类json的二进制的存储格式;简称Binary JSON ;相对于多了date类型和二进制数组;
2.什么是Nosql?什么时候要用Nosql?
Nosql 又称 not only sql ;泛指非关系型数据库;区别于关系型数据库;他们不保证关系型数据库的ACID特性;用访问网站例子来说;当很少人使用时;传统的关系型数据库完全没问题;但是当用户数量大幅增加时;关系型数据库会达到瓶颈状态;这时Nosql可以轻松处理;Nosql的读写速度要比关系型数据库快很多倍;
3.MongoDB有哪些索引?
单键索引 、复合索引 、多键索引 、全文索引 、hash索引 、地理空间索引;
4.MongoDB的存储结构?
MongoDB文档数据库结构分为四个层次;从小到大依次是;键值对;文档(document),集合(collection),数据库(database);
5.MongoDB的优点是什么?缺点是什么?
优点;
1. 业务经常变动;需要不时的添加字段;那么mongodb比较适合;关系型数据库添加字段的复杂度也还好
2. 嵌套文档;业务数据比较复杂;适合嵌套文档式存储;那么mongodb非常合适;这个关系型数据库比较难搞;虽然mysql和pg也有文档存储;但MySQL的不成熟
3. upsert支持;查询速度也不慢
4. 高可用的副本集支持
5. 查询语法非常丰富;嵌套文档查询功能非常强大;不是重度用户可能不能理解
缺点;
1.不支持reload
2.不支持事务
3.MongoDB没有像mysql一样成熟的维护工具
6.MongoDB和mysql的区别是什么?
1.MongoDB属于非关系型数据库;Mysql属于关系型数据库
2.存储方式;MongoDB使用虚拟内存;持久化的方式;Mysql根据不同的引擎存储方式不同
虚拟内存;存储;使用内存映射文件在内存中创建一个数据文件;把文件映射到一个虚拟内存的区域;虚拟内存是一块抽象的内存地址;操作系统把所需的数据映射到这个地址空间;红栈;;再把当前处理的数据映射到物理内存;灰栈;;当某个进程访问某个数据时;如果内存不在虚拟内存中;OS从硬盘中把数据加载到虚拟内存和物理内存中
7.MongoDB的cluster的副本集
MongoDB的副本集书又自动故障恢复的主从集群;有一个Primary节点和一个或者多个Secondary节点组成;Primary节点写入数据;Secondary节点读取主机点的oplog复制信息;开始复制数据并且将oplog信息写入自己的oplog;如果某个操作失败;则备份节点停止从当前数据源复制数据;如果某个备份节点由于某些原因挂点了;当重新启动后;就会自动从oplog的最后一个操作开始同步;同步完成后;将信息写入自己的oplog;由于是复制操作是先复制数据;复制完成后再写入oplog;有可能相同的操作会同步两份;不过MongoDB在设计之初就考虑到这个问题;将oplog的同一个操作执行一次或者多次;与执行一次的效果是一样的。
当Primary节点完成数据操作后;Secondary会做出一系列的动作保证数据的同步;
1.检查自己local库的oplog.rs集合找出最近的时间戳
2.检查Primary节点local库的oplog.rs集合;找出大于此时间戳的记录
3.将找到的记录插入到自己的oplog.rs集合中;并执行这些操作