今天市场上究竟有多少数据库?要准确回答这个问题很难。
如果打开DB-Engines网站可以看到,DB-Engines数据库趋势榜单中共有388个,实际的数据库种类应该远比这个数要多,比如我国就有很多数据库没有出现在这个榜单上。
在这些数据库中有相当大一部分是NoSQL数据库,而且都是近10年左右新流行起来的。比较知名的MongoDB是2008年,Cassandra是2008年,HBase是2008年,ElasticSearch是2010年,Redis是2009年,Aerospike是2009年等。
NoSQL是一种什么数据库,为什么这些年NoSQL大量涌现?市场上有哪些NoSQL数据库?
关系型数据库与ACID特性
在NoSQL流行之前的世界是属于关系型数据库的(此前还有网状数据库,但不像关系型数据库广泛应用)。
20世纪70年代有关系型数据库之父之称的IBM研究员Edgar Frank Codd发表了《大型共享数据库数据的关系模型》,提出了关系模型,为关系型数据库奠定了理论基石。1978年Oracle数据库的发布,为关系型数据库的流行拉开了序幕,随后DB2、SQL Server、Sybase、Informix等纷纷涌现,属于关系型数据库的时代来了。
关系型数据库有扎实的理论基础、有严格的数据模式,支持事务,遵循严格的ACID特性,广泛应用在各种商业环境中,包括金融、电信等一些对数据一致性要求非常严苛的场景中。所谓ACID是指:
A:(Atomicity,原子性)
事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
C:(Consistency,一致性)
数据库要始终处于一致的状态,事务的运行不会改变数据库原本的一致性约束。通俗的理解就是参与各方达成共识,不会扯皮。
I:(Isolation,独立性)
指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
D:(Durability,持久性)
指一旦事务提交后,它所做的修改将会永久保存在数据库上,即使出现宕机也不会丢失。
ACID对数据库的要求是非常严格的,为了满足ACID有时不得不牺牲数据的可用型和系统性能,而现实生活中有些场合对数据的要求并不严格,特别是当数据量大到一定规模后,不得不采用分布式数据库时。
如果要遵循ACID越来越困难,成本越来越高,另外,还有些数据类型采用传统数据库效率非常低(比如图数据库),这就有了NoSQL数据库。
NoSQL这个词最早出现在2009年,是Not Only SQL的缩写,表示不同于关系型数据库,主要指非关系型、分布式、不提供ACID的一类数据库。
本质上,NoSQL是牺牲了数据的一致性而换取了可用性和性能。近几年,各个NoSQL在尽力补上事务支持上的不足。比如,MongoDB、Aerospike都提供对事务的一定程度上支持,Aerospike还提供数据的强一致性能力。
高可用、高性能与强一致性的权衡
NoSQL出现的最根本原因是数据量的增长和数据类型的增加超出了传统数据库的能力。尤其是数据量,随着互联网的飞速发展与普及,传统的关系型数据库已经无法满足快速查询与插入数据的需求。NoSQL的出现解决了这一危机。它大多数采用分布式架构,减少了对事务的支持,减少了对复杂查询的支持,获取性能上的提升。
实际上,NoSQL最为突出的特性之一就是其分布式架构。谈到分布式架构就不得不谈到CAP定理,它指对于一个分布式计算系统来说,不可能同时满足以下三条,最多只能同时满足其中的两条:
C:(Consistency,一致性)
所有节点在同一时间数据相同;
A:(Availability,可用性)
每个请求不管成功或者失败都有响应;
P:(Partition tolerance,分区容忍)
系统中任意信息的丢失或失败不会影响系统的继续运行。
在CAP中,由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须要实现的,所以只能在一致性和可用性之间进行权衡。
NoSQL数据库其实是很难严格符合CAP的,而更多的是采用BASE设计理念。BASE是eBay架构师Dan Pritchett提出,核心思想是如果无法做到强一致性,可以采用适合的方式达到最终一致性。
BA:(Basically Available,基本可用)
在出现故障的时候,允许损失部分可用性,即保证核心可用。
S:(Soft State,软状态)
允许系统存在中间状态,也就是系统不同节点的副本存在数据更新延时。
E:(Eventual Consistency,最终一致性)
系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。
BASE是很多分布式系统的设计理念,其通过牺牲强一致性获得高可用性。与ACID正好相反,ACID是传统数据库常用的设计理念,追求强一致性模型。这两种设计理念没有好坏之分,毕竟适合的才是最好的。
对于强一致性,Aerospike是为数不多的通过Jepsen测试的NoSQL数据库。Aerospike的强一致性保证是每个记录的,并且不涉及多记录事务语义。每条记录的写入或更新将是原子的和隔离的,并且使用混合时钟保证排序。强一致性是在每个命名空间的基础上配置的。
基于Aerospike的Jepsen测试表明,即使具有很强的一致性,也可以实现高性能。初步测试结果证明了具有一致性的高性能——与AP模式下的Aerospike相比没有性能损失,并且具有完全线性化的高性能。
几种主流的NoSQL数据库
NoSQL是随着互联网应用的爆发、为应对海量数据和复杂数据类型而出现和流行的,比如机器日志、网页浏览和点击数据、物联网时序数据等,数据规模很容易达到TB乃至PB级。传统数据库的性能不管是从成本上还是性能上都很难承受这些。
和传统数据库主要面向结构化数据、满足ACID特性、支持SQL语言不同,NoSQL数据库主要面向非结构化和半结构化数据,不支持或者只能部分支持SQL语言,满足最终一致性。另一方面,传统数据库具有严格的数据范式,如果修改成本非常高,而NoSQL一般没有严格的数据范式,可以根据需要灵活改变。
目前主流的NoSQL数据库主要有以下四类:
键值(Key-Value)存储数据库:这类数据库主要采用一个键和对应的值来存储数据。Key/value模型对于IT系统来说的优势在于简单、易部署。Redis、Aerospike、Memcached都属于这一类型。这类数据库经过优化通常查询性能很高,被广泛用在缓存系统。
值得一提的是,与其他键值数据库相比,Aerospike数据库不只是用做缓存,还可以是一个原生持久化的数据库,被广泛用在对时延敏感、要求高性能、具有海量数据的应用场合。其中Aerospike是一个面向行的数据库,其中每条记录(相当于关系数据库中的一行)都由一个键唯一标识。记录的键及其其他元数据位于主索引中。记录的数据存在于它所占用的命名空间的预定义存储设备中。
宽列数据库:这类数据库通常是用来应对分布式存储的海量数据。键仍然存在,但是它们的特点是指向了多个列,这些列分属于不同的列族。如Cassandra、HBase等。
文档型数据库:文档型数据库的数据模型是半结构化的文档,它以特定的格式存储,比如JSON。如MongoDB、CouchDB等。作为键值存储模型的一种变体,Aerospike也支持文档型数据存储,其中单个记录是单个数据文档,以 XML、YAML、JSON、BSON编码。
Aerospike客户通常以Map数据类型存储数据文档。Aerospike Map是JSON的超级集合,可以包含不同的数据类型,包括嵌套的Map和List结构。Maps使用MessagePack压缩来实现高效存储。传统的文档存储模型每条记录存储一个数据文档,而Aerospike记录可以包含多个bin,因此每条记录可以包含多个标量和集合数据类型。
图数据库:图数据库采用灵活的图形模型来表达各个实体之间的关系,比如组织、人员关系等,查询非常高效。图数据库代表有Neo4J、InfoGrid等。
一般而言,NoSQL数据库适合数据模型比较简单、需要灵活性更强的IT系统(数据模型需要不断变更)、对数据库性能要求较高、对数据一致性要求不高。
值得注意的是,近几年,NoSQL正在加入更多关系数据库的能力,如前面提到的事务支持、数据库的强一致性等,从而在应用范围上有一定的扩展。同样,传统关系型数据库也借鉴了很多NoSQL数据库的特性,比如引入了键值存储模式,支持非结构化数据的保存等。NoSQL数据库与传统数据库的区别在一定程度上变得模糊。
关于Aerospike
Aerospike实时数据平台:使组织能够面对数十亿笔交易规模时实时采取行动,同时将服务器占用空间减少多达80%。
Aerospike多云平台:以可预测的亚毫秒级性能为实时应用程序提供支持,数据规模高达PB 级,正常运行时间为 5个9,并提供全球分布的、强一致的数据存储能力。
基于Aerospike实时数据平台构建的应用程序:可用于打击欺诈、面向在线电子商务进行商品推荐、支持全球数字支付等,并为数千万客户提供超个性化的用户体验。
服务客户包括:Airtel、Experian、Nielsen、PayPal、Snap、Wayfair 、 Yahoo 等。
公司总部位于加利福尼亚州山景城,在伦敦、班加罗尔和特拉维夫设有办事处,目前已在中国开展业务。
微信搜索Aerospike服务号,既可以下载社区版本,也可以随时提问。欢迎添加小编微信:Aerospike_China,帮你解决更多问题。