NoSql(Not Only Sql)是一种不同与关系数据库的数据库管理系统设计方式,是对非关系型数据库的统称
特点:灵活的可扩展性、灵活的数据模型、与云计算紧密融合

NoSQl兴起原因

关系数据库无法满足Web2.0的需求

  • 无法满足海量数据的管理需求
  • 无法满足数据高并发需求
  • 无法满足高可扩展性和高可用性需求

    关系数据库的关键特性在Web2.0成为鸡肋

  • Web2.0网站系统通常不要求严格的网站事务

  • Web2.0并不要求严格的读写一致性
  • Web2.0通常不包含大量复杂的SQL查询

    NoSql与关系数据库的比较

    数据库原理:关系数据库有完善的关系代数为理论,NoSql缺乏数学理论基础
    数据规模:关系数据库无法较好的支持海量数据存储,NoSql可以支持超大规模数据存储
    数据库模式:关系数据库需要严格遵守数据库模式。NoSql不存在数据库模式,可以灵活定义并存储各种不同类型数据
    查询效率:关系数据库借助索引机制可以实现高效的查询。NoSql复杂查询性能不高。
    一致性:关系数据库严格遵守事务ACID,具有强一致性。NoSql遵守BASE,只能保证最终一致性。
    数据完整性:关系数据库很容易实现,NoSql数据库无法实现。
    可扩展性:关系数据库很难实现横向扩展,纵向扩展空间也有限。NoSql具有强大的横向扩展能力。
    可用性:关系数据库有限保证数据一致性,只能提供相对较弱的可用性。大多数NoSql都能提高较高的可用性。

NoSql四大类型

键值数据库

redis、Memcached
大量写操作,键值数据库性能较好。条件查询效率较低

列族数据库

BigTable、HBase

文档数据库

MongoDB:由C++编写,其数据类型类似于JSON对象
CouchDB

图数据库

Neo4j、GraphDB

NoSql三大基石

CAP

一个分布式系统不可能同时满足一致性、可用性和分区容忍性这三个需求,最多同时满足两个,CA、CP、AP

  • C(consistency)
  • A(Available)
  • P(Partition):分区容忍性

    BASE

  • B(Basically Available):基本可用性

  • S(Soft-state):软状态
  • E(Eventual Consistency):最终一致性

    最终一致性