目前,常见的文档型数据库主要有MongoDB和Apache CouchDB。除了它们所具有的易于使用、易于横向扩展等NOSQL数据库的常见特点外,MongoDB还提供了丰富的功能。
MongoDB是典型的无模式NoSql数据库,它采用文档来表示描述数据的结构,一组文档称为集合。MongoDB采用BSON来进行数存储与编码传输,BSON支持多种数据类型,例如:字符串、整型、浮点型等。由于这些特点,MongoDB的数据结构更适合分布式环境。
在MongoDB中,分片机制与集群架构是非常重要的特性。首先是分片机制,MongoDB将数据水平切片机制称为分片,依据是分片键。MongoDB支持对文档的自动分片技术,并提供了3种分片策略:升序分片、哈希分片和位置分片。
升序分片是将片键进行升序排序,并在当前分片的数据量达到阙值时进行分片。所有新的数据都将被分到最新的数据分片中。
哈希分片是将片键进行哈希运算,使数据分布更均匀。新写入的数据可能平均到最新的数据分片中。
位置分片则是对片键的前缀或字串进行判断,在分片内部,数据还会被存储为更小的块,称为chunk。默认情况下,每个chunk的大小为64M,超过这个大小的chunk会分裂成两个。此外,balancer会将chunk的数量在各节点上平衡起来。
另外,复制集也是MongoDB的一个重要特性。MongoDB支持的多副本是以主从备份的形式实现的,这种机制被称为复制集。主节点负责数据的写入与更新,同时将操作信息写入日志,称为oplog。从节点则监听这些变化,维护自身的内容的变化。用户既可以从主节点读取数据,也可以从从节点读取数据,以保证数据的最终一致性。主从节点的数量以及选举方法与之前的类似,主节点的选举算法称为Bully算法。该算法不保证投票议题的唯一性和顺序一致性。其思想是:根据时间戳以及优先级属性将已知节点排序,第一个节点为主节点。得到半数以上的投票后便成功选出主节点。
在实际环境中,负责存储实际数据分片的设备通常被称为Mongod。作为用户访问集群的入口,通常被称为Mongos服务器。而负责持久化存储各类元数据与配置信息的服务器则被称为Config服务器。
此外,MongoDB还提供了多种存储引擎供用户选择:1)WiredTiger;2)In-Memory(将数据存储在内存中以加速查询);3)MMAPv1(早期使用的存储引擎)。
CouchDB作为另一个文档型数据库,也具有一些独特的特性。它支持多个主节点间的数据复制,理论上多个主节点都可以支持写入操作。
最后,关于数据库的操作就不再赘述了。至此,我们已经对MongoDB和CouchDB有了基本的了解。谢谢阅读!