NoSQL是为解决性能问题而产生的
一、NoSQL概述
1、特点
灵活的可扩展性;
灵活的数据模型;
和云计算的紧密结合。
2、传统的关系型数据库性能上的缺陷?
(1)无法满足海量数据的管理需求;
(2)无法满足高并发的需求;
(3)无法满足高扩展性和高可用性的需求。
MySQL集群方式的缺陷:
复杂性,整个集群部署管理配置都非常复杂;
延迟性:当主库压力比较大时,就会带来较大的延迟;
扩容问题:整个集群压力过大时,需求增加新机器对整个数据集进行重新分区,非常复杂。
3、NoSQL兴起的原因?
(1)关系型数据库无法满足web2.0的需求;
(2)数据模型的局限性;
(3)web2.0关系型数据库很多特性没有发挥,比如事务机制和高效的查询机制。
4、NoSQL与关系型数据库的比较?
(1)数据库原理方面:关系型数据库具备完备的关系代数理论作为基础;NoSQL缺乏理论基础。
(2)数据规模方面:关系型数据库很难实现横向扩展,纵向扩展非常有限;NoSQL具有非常好的水平扩展能力。
(3) 数据库模式方面:关系型数据库要定义严格的数据库模式,并且严格遵守;NoSQL数据模型非常灵活。
(4)查询效率方面:关系型数据库对于适当数据量级的查询效率高,数据量级大查询效率下降;NoSQL未构建面向复杂查询的索引,查询性能差。
(5)事务一致性方面:关系型数据库遵循ACID事务模型可以保证事务强一致性;NoSQL采用base模型,只能保证最终一致性。
(6)数据完整性方面:关系型数据库具有保证完整性的完备机制;NoSQL不具备完整性约束。
(7)可用性方面:关系型数据库随着规模增大,为了保证严格的一致性,可用性就被削弱;NoSQL具备很好的可用性,能够在短时间内迅速返回所需的结果。
(8)标准化方面:关系型数据库遵循SQL标准,比较完善;NoSQL未形成统一的行业标准。
(9)技术支持方面:关系型数据库很多都是商业数据库;NoSQL很多属于开源产品。
(10)可维护方面:关系型数据库管理员维护;NoSQL维护较为复杂。
(11)两种数据库的应用场景:
关系型数据库:电信银行的关键业务系统;NoSQL:互联网企业以及一些传统企业的非关键业务。
5、NoSQL的类型
(1)键值数据库:Redis、Memcached、SimpleDB
数据模型:键是一个字符串对象;值可以是任意类型的数据,比如整型、字符型、数组、列表、集合等。
典型应用:涉及频繁读写、拥有简单数据模型的应用内存缓存,比如购物车、配置文件、会话、参数等,存储配置和用户数据信息等移动应用。
不适用情形:没有通过值查询的途径;在键值数据库中,不能通过 两个或以上的键来关联数据,产生故障时不可以回滚。
(2)列族数据库:BigTable、HBase、Cassandra
数据模型:列族。
典型应用:分布式数据存储和管理,数据在地理上分布于多个数据中心的应用程序,可以容忍副本中存在短期不一致情况的应用程序,拥有动态字段的应用程序。
优点:查找速度快,可扩展性强,容易进行分布式扩展,复杂性低。
缺点:功能较少,大都不支持强事务一致性。
(3)图数据库:Neo4J
数据模型:图结构。
典型应用:专门用于处理具有高度相互关联关系的数据,比较适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻址等问题。
优点:灵活性高,支持复杂的图形算法,可用于构建复杂的关系图谱。
(4)文档数据库:MongoDB、CouchDB
数据模型:键值。
典型应用:存储、索引并管理面向文档的数据或类似的半结构化数据。
优点:json数据格式。支持更好的并发性。