MongoDB 初探
什么是MongoDB? 为什么要使用类似mongodb的nosql数据库?
MongoDB是一个基于分布式文件存储的数据库开源项目。由C++语言编写,旨在为WEB应用提供可护展的高性能数据存储解决方案。它的特点是可扩展,高性能,易使用,模式自由,存储数据非常方便等。 它与我们平常所使用的那种关系型数据库有很大的不同,MongoDB是基于文档(Documents)存储的,Document相当于关系型数据中的每一行的条目,而MongoDB的每个集合(Collection)相当于关系型数据库中的表。MongoDB中Collection之间没有关系型数据库那种很强的关联,所以MongoDB存储相对独立,并且它是一种数据冗余的存储方式,用以加快数据的查询。
Mongo数据主要特性有:
1 面向文档存储:(类JSON数据模式简单而强大)。
2 高效的传统存储方式:支持二进制数据及大型对象(如照片和视频)。
3 复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。
4 Auto-Sharding自动分片支持云级扩展性(处于早期alpha阶段):自动分片功能支持水平的数据库集群,可动态添加额外的机器。
5 动态查询:它支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
6 全索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。
7 支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。
适用场景:
1 适合实时的插入,更新与查询,并具备应用程序实时数据存储所需的复制及高度伸缩性。
2 适合作为信息基础设施的持久化缓存层。
3 适合由数十或数百台服务器组成的数据库。因为Mongo已经包含对MapReduce引擎的内置支持。
4 Mongo的BSON数据格式非常适合文档化格式的存储及查询。
不适用场景:
1 高度事务性的系统。
2 传统的商业智能应用。
3 极为复杂的SQL查询。
MongoDB 与 CAP理论
MongoDB的核心理论就是Document,它是由一个键值对集合构成的,就像是一个HashMap,或是字典。它的存储格式类似一个json,
{“username”: “Peter”, “age”: 10 }
MongoDB中的Collection表示一组documents。并且Collection是schema-free的,也就是说没有严格的格式限制,可以随意插入各种不同格式和类型的document。
例如一个Collection中可以包含
{“username”: “Peter”}
{“username”: “Peter”, “age”: 10 }
{“password”: 11111}
{“scorelist”: [{“math”:90 } , {“english”:100 }]} 复杂的包含数组类型的数据
MongoDB中的DataBase用于聚集Collection ,一个MongoDB实例可以host多个Database,而每个database可以认为是完全独立的,类似于SqlServer数据库可以通过host多个数据库一样。
关于MongoDB的其他内容,都可以在一本叫做《MongoDB权威指南》的书中找到。而且Mongo的官网,就提供了MongoDB的快速入门 等资料,通俗易懂,很容易学习。
关于Nosql的个人理解:
Nosql并不是No sql ,而应该更合理地解释为not only sql 或是非关系型数据库。传统的关系型数据库,强化了关系的概念。随着目前互联网应用规模的迅速膨胀,传统的存储模型出现了很多性能瓶颈,很多跨表、跨库、跨物理机器的查询导致数据查询的效率降低。 而nosql数据库,则淡化了关系的概念,通过可能造成数据冗余的代价使得数据存储相对独立,无需交叉查询 ,这也使得Nosql数据库具有了很好的扩展性,因为数据存储相对独立,扩展着实十分方便。并且Nosql数据库普遍具有非常高的读写能力,尤其是大数据量下,这都得益于无关系性和数据库存储结构简单的特性。但是不存在nosql和传统关系型数据库谁好谁差的概念,它们各自存在优缺点,不同场景进行不同的应用,让关系数据库关注在关系上,nosql关注在存储上。