浅谈关系型数据库的演变

2022-09-07 10:46:55 浏览数 (1)

总结一下对关系型数据库变化粗浅的认识。

前言

第一次知道数据库,是在大学时的数据库课程,那个时候的数据库特指关系型数据库。到后面工作后,才知道除了MySQLOralce这类关系数据库之外,还有NoSQL。 印象中,当时NoSQL由于优秀的性能和扩展性,发展迅速。但技术并非一成不变,二者可以相互借鉴。 待NoSQL潮水褪去,NewSQL出现,就像是是NoSQLSQL在易用性和可扩展性上的平衡。

技术线

关系型数据库的特点

1.SQL。 2. 事务,符合ACID原则。 3. 结构化存储。 这些特点的关键,就是易用性。 比如世界上使用最多的数据库SQLite,常用于手机App的本地存储。它就是一个lib库,小巧而精悍。但也支持上述的特点。因此也是一款关系型数据库。

可用性需求

主备同步的优化

MySQL,PostgreSQL,都是流行的数据库之一,它们广泛用于在线交易,或近线计算中。它们都有主备同步的方案。

默认方案

比如MySQL基于Binlog同步数据,有异步同步和半同步,通常使用外部高可用组件来控制流量。 但由于binog并非强同步,所以主库彻底挂掉的情况下,会存在丢数据的风险。 PostgreSQL可以强同步,但同样存在问题,备库异常会影响主库可用性。

引入分布式共识

可用性和一致性无法两全其美,但可以尽可能的优化。比如使用3个节点,相比2节点强同步,能达到同等一致性,也有更好的可用性。 使用分布式共识算法来同步日志是目前的标准做法,类似SpannerTiDB,OceanBaseNewSQL也都是基于分布式共识算法来保证数据的一致性。

使用Mulit-Paxos算法的产品

传统数据库: AliSQL X-Cluster,TDSQL,MySQL Group Replication NewSQL: Spanner,Oceanbase

使用Raft算法的数据库

Tidb,CockroachDB

两种算法各有千秋。

更大的吞吐能力

当单台服务器的资源不足以支撑数据库的需求时,我们需要进行扩容,提升资源。 1. ScaleUp: 提升单机的性能,比如使用更好的CPU,更大的内存,更大更快的SSD存储。 2. ScaleOut: 使用更多的服务器。

硬件提升终归有限,所以ScaleOut是最后的办法。目前,ScaleOut有两种Shared-Nothing,Shared-Disk.

Shared-Disk

在这个方向,有一个优化思路是将本地存储使用分布式存储替换。 1. 适合容量非常大,但写较少的场景。 2. 完全兼容单机数据库。 2. 缺点则是只解决了存储瓶颈,并没有解决计算和内存的瓶颈。

使用这种方案最经典的产品是 1. Oracle RAC,使用专用存储,应该是比较费钱。 2. Amazon Aurora/PolarDB MySQL,改造了Innodb,使用分布式存储的方式存储文件。 3. OceanBase0.5,最早的OceanBase,ChunkServer其实就是分布式存储,UpdateServer则是单点的修改入口。因此当时的结构,更像是Shared-Disk的设计。 4. 使用虚拟机运行数据库也是个不错的办法,因为云上的分布式存储本身就具备很高的可用性,比如直接将数据库跑在使用云盘的ECS上,也差不多可以达到这个效果。较好的云盘,可能也会使用RDMANVME等技术。搭车很不错。

Shared-Nothing

使用分布式集群的方式来提升系统容量。简单说,就是将请求分散到多台服务器上处理。

分布式中间件

分布式中间件是在NewSQL出现前,最常用的解决办法。

关键功能
  1. 分库分表访问
  2. 全局Sequence,全局递增但不一定连续。
  3. 小表广播
  4. 全局索引
几个分布式中间件
  1. Taobao Distributed Data Layer,淘宝分布式中间件,外号头都大了。是基于客户端实现的中间件,没有Proxy,承担淘宝很多核心的数据库访问。
  2. MariaDB MaxScale/Spider,开源的Proxy式中间件,基于MySQL内核实现。

分布式中间件具备了一定分布式的能力,但依然有很多限制,但已经非常接近NewSQL了。 有的NewSQL产品就是分布式中间件的实现。

分布式事务的需求

在解决了上面的各种问题之后,NewSQL还要解决的问题就是分布式事务。 比如常见的交易系统实现,我们可以使用中间件来做分库分表,达到很快的订单创建。订单创建同时,我们需要扣减库存,需要扣款。这些动作分布式中间件不能支持事务,通常需要另一个中间件来实现分布式事务。 因为事务的实现并不能简单的在中间件层面完成,也涉及存储。分布式事务需要全局时钟,2PCMVCC配合实现

NewSQL

NewSQL是上述特点的集大成者。 1. 原始数据库的特性。 2. 基于分布式共识的多副本同步。 3. 分库分表技术。 4. 分布式事务。

在NewSQL的实现中,有部分基于现有的数据库和中间件。有部分借鉴Spanner,使用KV存储上增加SQL解析层。但也是大同小异。

几款NewSQL
  1. Spanner/F1,基于truetime的数据库。也只有这样,才能实现全球化部署。其它基于中央授时,或逻辑时钟的关系型数据库,都无法做到全球化部署生产。
  2. TiDB/TiKV,Spanner/F1,的乞丐版实现,由于使用了TSO所以集群通常不会跨城市。此外,事务的实现是在TiDB上,和Spanner略有不同。但事务隔离性强于Spanner,可能是因为不用考虑truetime的延时.
  3. Ocaenbase,蚂蚁金服的分布式数据库,于TiDB/TiKV不同,KV层和SQL层不做分离。

总结

技术的发展总归不是一蹴而就,而是一步步变化的,是易用性和业务需求的相互作用。 1. 最早的关系型数据库,是易用性占主导地位。 2. NoSQL崛起,则是更高性能的业务需求占主导地位。 3. 随着硬件提升和技术发展,重新回归SQLNewSQL,则是易用性重新占据主导地位。

0 人点赞