MongoDB简介
MongoDB是什么
MongoDB是一个使用C++编写的、开源的、面向文档的NoSQL(Not Only SQL)数据库,也是当前最热门的NoSql数据库之一。
NoSQL简介
NoSQL的意思是“不仅仅是SQL”,是目前流行的“非关系型数据库”的统称。常见的NoSQL数据库如:Redis、CouchDB、MongoDB、HBase、Cassandra等。
为什么需要NoSQL
简单的说,就是为了解决在web2.0时代,出现的三高要求:
- 对数据库高并发读写的需求。
- 对海量数据的高效率存储和访问的需求。
- 对数据库的高可扩展性和高可用性的需求。
而RDB里面的一些特性,在web2.0里面往往变得不那么重要,比如:
- 数据库事务一致性。
- 数据库的实时读写。
- 复杂的SQL查询,特别是多表关联查询。
CAP定理
CAP定理,又被称作布鲁尔定理(Eric Brewer)它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
强一致性(Consistency):系统在执行过某项操作后仍然处于一致的,在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有强一致性。
可用性(Availability):每一个操作总是能够在一定的时间内返回结果。
分区容错性(Partition tolerance):系统在存在网络分区的情况下仍然可以接受请求并处理,这里网络分区是指由于某种原因网络被分成若干个孤立区域,而区域之间互不相通。
根据CAP原理将数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:
CA:单点集群,满足一致性,可用性,通常在可扩展性上不太强大,比如RDB。
CP:满足一致性和分区容错性,通常性能不是特别高,如分布式数据库。
AP:满足可用性和分区容错性,通常可能对一致性要求低一些,如大多数的NoSQL。
BASE(Basically Available,Soft-state,Eventual consistency)
基本可用(Basically Available):系统能够基本运行、一直提供服务。
软状态(Soft-state):系统不要求一直保持强一致状态。
最终一致性(Eventual consistency):系统需要在某一时刻后达到一致性要求。
NoSQL的优点
- 扩展简单方便,尤其是水平横向扩展。
- 读写快速高效,多数都会映射到内存操作。
- 成本低廉,用普通机器,分布式集群即可。
- 数据模型灵活,没有固定的数据模型。
NoSQL的缺点
- 不提供对SQL的支持。
- 现有产品还不够成熟稳定,功能也还有待加强。
MongoDB特点
- 高性能、易于使用、易于扩展、功能丰富。
- 面向集合存储,模式自由。
- 支持动态查询,支持javascript表达式查询。
- 支持索引。
- 支持副本集复制和自动故障恢复。
- 自动处理分片。
- 支持二进制和大型对象数据。
- 文件存储格式为BSON(JSON的一种扩展)。