MongoDB是什么

MongoDB是一个使用C++编写的、开源的、面向文档的NoSQL(Not Only SQL)数据库,也是当前最热门的NoSql数据库之一。


NoSQL简介

NoSQL的意思是“不仅仅是SQL”,是目前流行的“非关系型数据库”的统称。常见的NoSQL数据库如:Redis、CouchDB、MongoDB、HBase、Cassandra等


为什么需要NoSQL?

简单的说,就是为了解决在web2.0时代,出现的三高要求:


1:对数据库高并发读写的需求


2:对海量数据的高效率存储和访问的需求


3:对数据库的高可扩展性和高可用性的需求


而RDB里面的一些特性,在web2.0里面往往变得不那么重要,比如:


1:数据库事务一致性


2:数据库的实时读写


3:复杂的SQL查询,特别是多表关联查询

CAP定理, 又被称作布鲁尔定理(Eric Brewer)

它指出对于一个分布式计算系统来说,不可能同时满足以下三点:


1:强一致性(Consistency):系统在执行过某项操作后仍然处于一致的,在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有强一致性


2:可用性(Availability):每一个操作总是能够在一定的时间内返回结果


3:分区容错性(Partition tolerance):系统在存在网络分区的情况下仍然可以接受请求并处理,这里网络分区是指由于某种原因网络被分成若干个孤立区域,而区域之间互不相通


根据CAP原理将数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:


1:CA:单点集群,满足一致性,可用性,通常在可扩展性上不太强大,比如RDB


2:CP:满足一致性和分区容错性,通常性能不是特别高,如分布式数据库


3:AP:满足可用性和分区容错性,通常可能对一致性要求低一些,如大多数的NoSQL


BASE(Basically Available,Soft-state,Eventual consistency )

1:基本可用(Basically Available):系统能够基本运行、一直提供服务。


2:软状态(Soft-state):系统不要求一直保持强一致状态。


3:最终一致性(Eventual consistency):系统需要在某一时刻后达到一致性要求

NoSQL的优点

扩展简单方便,尤其是水平横向扩展(纵向扩展是指用更强的机器;横向扩展是指把数据分散到多个机器)


读写快速高效,多数都会映射到内存操作


成本低廉,用普通机器,分布式集群即可


数据模型灵活,没有固定的数据模型


NoSQL的缺点

不提供对SQL的支持


现有产品还不够成熟稳定,功能也还有待加强


MongoDB特点

高性能、易于使用、易于扩展、功能丰富


面向集合存储,模式自由


支持动态查询,支持javascript表达式查询


支持索引


支持副本集复制和自动故障恢复


自动处理分片


支持二进制和大型对象数据


文件存储格式为BSON(JSON的一种扩展)