1、NoSQL数据库的特点
①灵活的可拓展性:NoSQL数据库在设计之初就是为了满足“横向扩展”的需求。
②灵活的数据模型:NoSQL数据库采用键/值、列族等非关系模型,允许在一个数据元素里存储不同类型的数据。
③与云计算紧密融合:NoSQL数据库凭借自身良好的横向扩展能力,充分自由利用云计算基础设施,很好融入到云计算环境中,构建基于NoSQL的云数据库服务。
2、NoSQL与关系型数据库的比较
比较标准 | 关系数据库 | NoSQL | 备注 |
数据库原理 | 完全支持 | 部分支持 | 关系型数据库有关系代数理论作为基础;NoSQL没有统一的理论基础。 |
数据规模 | 大 | 超大 | 关系数据库很难实现横向扩展,纵向扩展的空间也比较有限,性能会随着数据规模的增大而降低。NoSQL可以很容易通过添加更多设备来支持更大规模的数据。 |
数据库模式 | 固定 | 灵活 | 关系型数据库需要定义数据库模式,严格遵守数据定义和相关约束条件;NoSQL不存在数据库模式,可以自由灵活的定义并存储不同类型的数据。 |
查询效率 | 快 | 可以实现高效的简单查询,复杂查询的性能不尽人意 | 关系型数据库可以借助索引机制实现快速查询(包括记录查询和范围查询);很多NoSQL没有面向复杂查询的索引,虽然可以用MapReduce来加速查询,但是在复杂查询方面的性能仍然不如关系型数据库。 |
一致性 | 强一致性 | 弱一致性 | 关系型数据库严格遵守事务ACID模型,可以保证事务强一致性;很多NoSQL数据库放松了对事务ACID四性的要求,而是遵守base模型,只能保证最终一致性。 |
数据完整性 | 容易实现 | 很难实现 | 热和一个关系型数据库都可以很容易实现数据完整性,比如铜鼓主键或者非空约束来实现实体完整性,通过主键、外键来实现参照完整性,通过约束或者触发器来实现用户自定义完整性;NoSQL数据库无法实现。 |
扩展性 | 一般 | 好 | 关系型数据库很难实现横向扩展,纵向扩展的空间也比较有限;NoSQL在设计之初就充分考虑了横向扩展的需求,可以很容易通过添加廉价设备实现扩展。 |
可用性 | 好 | 很好 | 关系数据库在任何时候都可以保证数据一致性为优先目标,其次才是优化系统性能,随着数据规模的增大,关系数据库为了保证严格的一致性,只能提供相对较弱的可用性;大多数NoSQL都能提供较高的可用性。 |
标准化 | 是 | 否 | 关系型数据库已经标准化;NoSQL还没有行业标准,不同的NoSQL数据库都有自己的查询语言,很难规范应用程序接口。 |
技术支持 | 高 | 低 | 关系型数据库经过几十年的发展,已经非常成熟,Oracle等大型厂商都可以提供很好的技术支持;NoSQL在技术方面仍处于起步阶段。 |
可维护性 | 复杂 | 复杂 | 关系数据库需要专门的数据库管理员(DBA)维护;NoSQL数据库虽然没有关系型数据库复杂,也难以维护。 |
3、NoSQL的四大类型
1、键值数据库
项目 | 描述 |
相关产品 | Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached |
数据模型 | 键/值对 |
典型应用 | 内容缓存,比如会话、配置文件、参数、购物车 |
优点 | 扩展性好、灵活性好、大量写操作时性能高 |
缺点 | 无法存储结构化信息、条件查询效率较低 |
使用者 | 百度云数据库(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter(Redis和Memcached)、Youtube(Memcached) |
2、列族数据库
项目 | 描述 |
相关产品 | BigTable、HBase、HadoopDB、Cassandra、GreenPlum、PNUTS |
数据模型 | 列族 |
典型应用 | 分布式存储与管理 |
优点 | 查找速度快、可扩展性强、容易进行分布式扩展、复杂性低 |
缺点 | 功能较少、大豆不支持强事务一致性 |
使用者 | Facebook(HBASE)、Instagram(Cassandra)、Twitter(Cassandra和HBase)、Yahoo!(HBase) |
3、文档数据库
项目 | 描述 |
相关产品 | MongoDB、CouchDB、CloudKit、RaptorDB、SISODB、ThruDB、Jackrabbit |
数据模型 | 版本化的文档 |
典型应用 | 存储索引并管理面向文档的数据或者类似的半结构化数据 |
优点 | 性能好、灵活性高、复杂性低、数据结构灵活 |
缺点 | 缺乏统一的查询语句 |
使用者 | 百度云数据库(MongoDB)、SAP(MongoDB)、Codecademy(MongoDB)、Foursquare(MongoDB) |
4、图形数据库
项目 | 描述 |
相关产品 | Neo4J、OrientDB、InfoGrid、GraphDB、Infinite Graph |
数据模型 | 图结构 |
典型应用 | 应用于大量复杂、互连接、低结构化的图结构场合,比如社交网络、推荐系统 |
优点 | 灵活性高、支持复杂的图形计算、可用于构建复杂的关系图谱 |
缺点 | 复杂性高、只能支持一定的数据规模 |
使用者 | Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J) |
4、NoSQL的三大基石
1、CAP
- C(Consistency):一致性。它是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布式环境中,多点的数据是一致的。
- A(Availability):可用性。它是指快速获取数据,可以在确定的时间内返回操作结果。
- P(Tolerance of Network Partition)分区容忍性。它是指当出现网络分区的情况时(即系统中的一部分节点无法和其他节点进行通信),分离的系统也能正常运行。
CAP理论告诉我们:一个分布式系统不可能同时满足一致性、可用性和分区容忍性这3个需求,最多只能同时满足其中两个。
2、BASE
说到BASE 就不得不提ACID。关系型数据库中设计了复杂的事务管理机制来保证事务在执行过程中严格满足ACID。BASE的基本思想完全不同于ACID模型,BASE的英文含义是酸,而ACID的英文含义是碱
BASE的基本含义 是基本可用(Basically Availble)、软状态(Soft-state)和最终一致性(Eventual consistency)。