MongoDB是一款非关系型数据库
基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
NoSQL简介
定义:
NoSQL,指的是非关系型的数据库。
作用:
NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
NoSQL主要指:
-
非关系型
-
分布式
-
不提供ACID
存储特点:
-
key-value存储、文档存储、列存储、图形数据库
-
没有声明性查询语言
-
没有预定义的模式
-
最终一致性
-
非结构化和不可预知的数据
-
高性能、高可用、可伸缩性
-
CAP定理
什么是CAP(CAP theorem)定理
布鲁尔定理
内容:
指出一个分布式系统不可能同时满足以下三点:
-
一致性(Consistency):所有节点在同一时间具有相同的数据
-
可用性(Availability):保证每个请求不管成功或者失败都有响应
-
分隔容忍(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作
CAP理论的核心:--->分别指(Consistency n.一致性/Availability n.可用性/Partition n.划分 Tolerance n.容忍)
一个分布式系统不可能同时很好的满足一致性、可用性、分区容错性这三个需求,最多只能同时较好的满足两个。--->因此CAP原理将数据库分成了三大类:
-
CA---->单点集群,满足一致性、可用性。通常在可扩展性上不太强大。
-
CP--->满足一致性、分区容忍性。通常性能不是特别高。--->代表:MongoDB、Redis、HBase
-
AP--->满足可用性、分区容忍性。通常可能对一致性要求低一些。
BASE
什么是BASE?
BASE是NoSQL数据库通常对可用性及一致性的弱要求原则
-
Basically Available --基本可用--->对应原子性
-
Soft-state --软状态/柔性事务。可以理解为"无连接"的--->这一点在Java连接MongoDB实践中有体会--->对应一致性
-
Eventually Consistency -- 最终一致性, 也是 ACID 的最终目的。--->对应隔离性(注意不是对应关系型数据库的一致性)
关系型数据库遵循ACID规则
事务(transaction)的四大特点:
-
A(Atomicity)原子性
-
事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
-
-
C(Consistency)一致性
-
完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。
-
-
I(Isolation)独立性
-
并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
-
-
D(Durability)持久性
-
一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
-
类型 | 部分代表 | 特点 |
---|---|---|
列存储 | Hbase、Cassandra、Hypertable | 按列存储数据。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 |
文档存储 | MongoDB、CouchDB | 存储格式类似json,存储内容是文档型。可以对某些字段建立索引,实现关系型数据库的某些功能 |
Key-Value存储 | Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) |
xml数据库 | Berkeley DB XML | 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |