1.存储方式:虚拟内存+持久化,mongodb使用的是内存映射存储引擎,即Memory Mapped Storage Engine,简称MMAP,MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
2.扩展性,存储的数据格式是json格式,灵活的Schema
3.内置GridFS,海量存储。
4.副本集+分片sharding-------扩展性,高可用
failover机制,失败选举。
分片(sharding)其实就是数据拆分,把数据分散在多个节点上,也就是水平拆分。MongoDB 支持自动分片,
不适用的场景
1)MongoDB不支持事务操作,需要用到事务的应用建议不用MongoDB。
2)MongoDB目前不支持join操作,需要复杂查询的应用也不建议使用MongoDB。
占用内存大
注意:脑裂过程中设置优先级没用。
1、删除节点至剩下1个或者3个节点,保持3个节点存活(此时mongo能正常选举出PRIMARY 。 ):
config=rs.conf()
config.members=[config.members[0],config.members[2],config.members[3]]
rs.reconfig(config,{force:true})
(注意:"_id" : 4 并不是对应下标。members 对应的是数组的下标。从0开始。)
2、如果是删除至于剩下2个数据节点。切2个数据节点都是启动状态,此时PRIMARY已然会在2个节点之间飘浮。但2个节点还算可控,可以通过 rs.addArb("192.168.1.92:29121") 方式在主节点加入仲裁节点。
3、强制加入仲裁节点:
config=rs.conf()
config.members=[config.members[0],config.members[1]....(把所有需要加入的节点列出),
{_id:5,host:"127.0.0.1:27023",priority:5,arbiterOnly:"true"}]
rs.reconfig(config,{force:true})