• 横向可扩展能力不足:传统关系型数据库由于自身设计机理的原因,通常很难实现性价比较高的“横向扩展”,即基于普通廉价的服务器扩充现有分布式计算系统,使系统的处理能力和存储能力得到提升。而“横向扩展”是大数据时代计算和存储的重要需求。
• 很难满足数据高并发访问需求:大数据时代诸如购物记录、搜索记录、朋友圈消息等信息都需要实时更新,这就会导致高并发的数据访问,可能产生每秒高达上万次的读写请求。在这种情况下,传统关系型数据库引以为傲的事务处理机制和包括语法分析和性能优化在内的查询优化机制却阻碍了其在并发性能方面的表现。
在以上大数据时代的数据管理需求的推动下,各种新型的NoSQL数据库不断涌现,一方面弥补了关系型数据库存在的各种缺陷,另一方面也撼动了关系型数据库的传统垄断地位。
NoSQL(Not only SQL)不是指某个具体的数据库,是对非关系型数据库的统称。
NoSQL数据库采用类似键/值、列族、文档和图(Graph)等非关系数据模型,通常没有固定的表结构,没有复杂的查询优化机制,也没有严格的事务ACID特性的约束,因此和关系型数据库相比,NoSQL数据库具有更优秀的查询效率,更灵活的横向可扩展性和更高并发处理性,并能够存储和处理非结构化数据。
根据所采用的数据模型的不同,NoSQL数据库具体又可以分为以下四类:
• 键值(Key-Value)存储数据库。这一类数据库主要使用哈希表作为数据索引,哈希表中有一个特定的键和一个指针指向特定的数据。这种数据库的优势是简单、易部署、查询速度快;缺点是数据无结构,通常只被当作字符串或者二进制数据。Tokyo Cabinet/Tyrant、Redi、Voldemort、Oracle BDB等都属于这一类数据库。
• 列存储数据库。这类数据库通常用来应对分布式存储海量数据的存储需求。在列存储数据库中,数据以列簇式存储,将同一列数据存在一起。这种数据库的优点是查找速度快,可扩展性强,更容易进行分布式扩展;缺点是功能相对局限。Cassandra、HBase、Riak等属于这一类数据库。
• 文档型数据库。这类数据库与键值存储数据库类似,数据按键值(Key-Value)存对的形式进行存储,但与键值存储数据库不同的是,Value为结构化数据。这类数据库适用于Web应用。文档型数据库的优点是对数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构;缺点是查询性能不高,缺乏统一的查询语法。uCouchDB、MongoDB等属于这一类数据库。
• 图(Graph)数据库。这类数据库专注于构建关系图谱,存储图结构数据,适用于社交网络、推荐系统等。图数据库的优点是能够直接利用图结构相关算法,如最短路径寻址、N度关系查找等;缺点是很多时候需要对整个图做计算才能得出需要的信息。Neo4J、InfoGrid、Infinite Graph等属于这一类数据库。
NoSQL数据库不受关系模型约束,具有较好的扩展性,很好地弥补了传统关系型数据库的缺陷。但NoSQL数据库并没有一个统一的架构,每一类NoSQL数据库都有各自适用的场景。同时,NoSQL数据库不能严格保证事务的ACID特性,导致数据的一致性和正确性没法保证。而且NoSQL数据库缺乏完备系统的查询优化机制,在复杂查询方面的效率不如关系型数据库。为此,业界又提出了NewSQL数据库。
NewSQL 数据库是对各种新的可扩展、高性能数据库的简称,这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持事务ACID和SQL等特性。
不同NewSQL数据库的内部架构差异较大,但是有两个共同的特点:都支持关系数据模型;都是用SQL作为其主要的访问接口。
目前市面上已有的NewSQL数据库有Spanner、PostgreSQL、SAP HANA、VoltDB、MemSQL等。
Ø Spanner是谷歌公司研发的、可扩展的、多版本、全球分布式、同步复制数据库,是谷歌公司第一个可以全球扩展并支持数据外部一致性的数据库。
Ø PostgreSQL是很受欢迎的开源数据库,稳定性强,有大量的几何、字典、数组等数据类型,在地理信息系统领域处于优势地位。
Ø SAP HANA基于内存计算技术,是面向企业分析性应用的产品,主要包括内存计算引擎和HANA建模工具两部分。