天天看点

《大数据存储:MongoDB实战指南》一1.6 MongoDB特点

本节书摘来异步社区《大数据存储:mongodb实战指南》一书中的第1章,第1.6节,作者: 郭远威 , 彭文波 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

大数据存储:mongodb实战指南

它的存储模型与关系数据库的比较如表1-1所示。

《大数据存储:MongoDB实战指南》一1.6 MongoDB特点

关系数据库中最基本的单元是行,而mongodb中最基本存储单元是document,典型结构如下所示。

它用与json格式类似的键值对来存储(在mongodb中叫bson对象),其中值的数据类型有常见的字符串、数字、日期,还可以是bson对象、数组以及数组的元素,也可以是bson对象,通过这种嵌套的方式,使mongodb的数据类型变得相当丰富。

mongodb与传统关系数据库还有一个重大区别就是:可扩展的表结构。也就是说collection(表)中的document(一行记录)所拥有的字段(列)是可以变化的,下面文档对象document(一行记录)比上面列出的文档对象document(一行记录)多一个time字段,但它们可以共存在同一个collection(表)中。

mongodb查询语句不是按照sql的标准来开发的,它围绕json这种特殊格式的文档型存储模型开发了一套自己的查询体系,这就是现在非常流行的nosql体系。关系数据库中常用的sql语句在mongodb中都有对应的解决方案。当然也有例外,mongodb不支持join语句。我们知道传统关系数据库中join操作可能会产生笛卡尔积的虚拟表,消耗较多系统资源,而mongodb的文档对象集合collection可以是任何结构,我们可以通过设计较好的数据模型尽量避开这样的操作需求。如果真的需要从多个collection(表)中检索数据,那我们可以通过多次查询得到。

在关系数据库中经常用到的group by等分组聚集函数,在mongodb中也有,而且mongodb提供了更加强大的mapreduce方案(google提出的并行编程),为海量数据的统计、分析提供了便利。

mongodb支持日志功能journaling,对数据库的增、删、改操作会记录在日志文件中。mongodb每100ms将内存中的数据刷到磁盘上,如果意外停机,在数据库重新启动时,mongodb能通过journaling日志功能恢复。

mongodb支持复制集(replset),一个复制集在生产环境中最少需要3台独立的机器(测试的时候为了方便可能都部署在一台机器上),一台作主节点(primary),一台作次节点(secondary),一台作仲裁节点(只负责选出主节点),备份、自动故障转移,这些特性都是复制集支持的。

mongodb支持自动分片sharding,分片的功能实现海量数据的分布式存储,分片通常与复制集配合起来使用,实现读写分离、负载均衡,当然如何选择片键是实现分片功能的关键。如何实现读写分离我们后面会详细分析。

总之,mongodb最吸引人的地方应该就是自由的表结构、mapreduce、分片、复制集,通过这些功能实现海量数据的存储、高效地读写以及数据的分析。