近几年来,数据库领域出现了一种新的关系数据库类型,称为NewSQL,例如,Google的Spanner,Amazon的Aurora等等,这些数据库相对于传统数据库来讲,区别在哪里? What’s Really New with NewSQL? 给了很好的总结,本篇文章主要是总结该论文的观点,最后会有一个简单的讨论部分,全文的组织结构如下:
本文收录在我的github中 papers项目 ,papers项目旨在学习和总结分布式系统相关的论文。
数据库的发展通常是随着业务需求的变化,在2000年左右,随着互联网的兴起,有许多同时在线的用户,这对数据库领域带来了非常大的挑战,数据库通常会成为瓶颈,所以,此时业务针对数据库的需求,主要体现在可扩展上面。
这时期数据库的扩展性,往往采用如下两种方案:
垂直扩展中使用更好的硬件意味者成本高,并且更换硬件后,需要把数据从老的机器迁移到新的机器,中间可能需要停服务,因此往往采用水平扩展,例如,Google’s MySQL-based cluster。
采用中间件方式也有缺点,中间件一般要求轻量级,简单数据库操作可以搞定,但是,如果需要做分布式事务或者联表操作,会非常复杂,通常这些逻辑会放到应用层来做。
后续,NOSQL兴起,主要有几个原因:
NOSQL以Google’s BigTable 和 Amazon’s Dynamo为代表,开源版对应为HBase和Cassandra。
NOSQL往往是不保证强一致性的,而对于一些应用来讲(例如金融服务),是需要强一致性和事务的,因此,如果它们基于NOSQL系统来开发的话,应用层需要些大量的逻辑来处理一致性和事务相关的问题。此时,业务需求是拥有可扩展性的基础上,能够支持强一致性。
因此,这里有几条路:
使用更好的单个服务器的话,不满足业务需求的可扩展性。
使用中间件的话,会有如下问题,例如:
上面两条路都不能很好的满足应用的需求,因此,NewSQL出现了。
首先来看NEWSQL的定义:针对OLTP的读写,提供与NOSQL相同的可扩展性和性能,同时能支持满足ACID特性的事务。即保持NOSQL的高可扩展和高性能,并且保持关系模型。
NEWSQL的优点:
注意,此篇论文中的NEWSQL偏向于OLTP型数据库,和一些OLAP类型的数据库不同,OLAP数据库更偏向于复杂的只读查询,查询时间往往很长。
而NEWSQL数据库的特性如下,针对其读写事务:
分三大类:
采用新架构的NewSQL有如下特点:
优势:
缺点:
代表产品:Spanner,CockroachDB
中间件负责的事情如下:
往往在各个数据库节点,需要装代理与中间件沟通,负责如下事情:
优点:
缺点:
备注:有研究表明,以磁盘为主要存储的传统DBMS,很难有效地利用非常多的核,以及更大的内存容量。
代表产品: MariaDB MaxScale, ScaleArc
特点:
代表产品:
传统数据库都是以磁盘为存储中心的架构,读盘操作相对较慢,一般是内存中缓存页。
现在来讲,内存较便宜,容量大,能存储大量的数据。这些纯内存操作带来的好处是,读取和写入数据速度较快。
现有的大内存服务器,对数据库对内存的管理提出了新的要求,不再是像传统数据库那样,只是用来做页缓存,可以采用更高效地内存管理方式。
数据分区一般以某几列做hash或者range分区。
特点:
数据库通过Concurrency Control来提供ACID中的Atomicity和Isolation。
分布式场景下,一般采用类2PC的协议,根据事务是否需要中心节点,分为以下两类:
关于时钟同步,不同数据库也有不同的做法,Spanner和CroachDB在时钟同步上的不同选择:
But what makes Spanner differ- ent is that it uses hardware devices (e.g., GPS, atomic clocks) for high-precision clock synchronization. The DBMS uses these clocks to assign timestamps to transactions to enforce consistent views of its multi-version database over wide-area networks. CockroachDB also purports to provide the same kind of consistency for transactions across data centers as Span- ner but without the use of atomic clocks. They instead rely on a hybrid clock protocol that combines loosely synchronized hardware clocks and logical counters [41].
现有实现Isolation的技术主要包括:
大部分的数据库还是在选择使用MVCC,例如CockroachDB;有些数据库使用2PL+MVCC,修改数据的时候,还是采用2PL,例如,InnoDB,Spanner
一般有两种实现方式:局部索引VS全局索引
局部索引:
全局索引:
两个需要考虑的点:
如何最小化宕机时间?
采用主备切换
如何优化新加机器恢复到同步的时间?
一般手段为做checkpoint
可扩展性是NewSQL的一个非常重要的特点,对于中间件的方式,其上需要存路由信息,其本身的可扩展性比较难以解决,个人认为,其不应该算入NewSQL。
NewSQL的技术挑战除了上述提到的之外,还有如何实现多租户架构及租户之间的隔离,负载均衡等等问题。
从整篇论文中描述的内容可以看出,NewSQL中并没有开拓性的理论技术的创新,更多的是架构的创新,以及把现有的技术如何更好地适用于当今的服务器,适用于当前的分布式架构,使得这些技术有机的结合起来,形成高效率的整体,实现NewSQL高可用,可扩展,强一致性等需求。
PS:
本博客更新会在第一时间推送到微信公众号,欢迎大家关注。