分布式New SQL数据库典型开源产品和主要功能特性

      分布式NewSQL数据库的New主要是新在它结合了NoSQL数据库的水平扩展能力,同时继承了传统关系型数据库所采用的SQL关系模型和对ACID事务完整支持的能力。也就说,NewSQL结合了传统关系型数据库和NoSQL数据库各自的主要优点(也弥补了各自的主要缺点) ,采用新的架构和理论模型开发的新一代关系型数据库系统。

      NewSQL数据库采用分布式架构,数据库引擎内置自动水平伸缩和在线弹性扩容、Cloud-Native、提供完整的SQL和强一致性ACID事务支持、高可用 (自动多副本复制、自动故障恢复、自动数据副本补全、异地多活)等能力特征。应用开发人员能够使用熟悉的SQL语言聚焦业务逻辑的开发,不用关注底层细节、也不用受底层实现的制约,能够极大的提升开发效率和应用创新能力;对于运维人员来说,生产数据库的扩容、升级等运维工作很多是由NewSQL数据库内置自动实现,降低了运维压力、提升了运维效率。

      在分布式NewSQL数据库领域,比较著名的开源产品有PingCap的TiDB和Cockroach LABs的CockroachDB(简称crdb)。这两个产品都是受到Google Spanner / F1 论文启发,是其克隆版本的开源实现。这两个产品很多地方是相似的,从用户视角看其最大技术差异是在SQL支持方面:TiDB兼容MySQL协议和语法,而crdb 兼容PostgreSQL协议和语法 ; TiDB目前版本不支持表分区(很快就支持)、视图(计划支持)、外键、check约束、Sequence,二者目前都不支持存储过程、触发器(crdb 计划在未来支持,TiDB没有计划)。

      PingCap公司是一家国内公司,从2015年至今,在短短的三年之内其产品快速发展,已经逐步成熟,目前在国内互联网企业、金融、电信和其它一些传统企业中已经拥有不少客户。

      Cockroach LABs是一家美国公司,其创始人来自于google。百度是其CockroachDB产品的用户,也是CockroachDB社区的重要成员,其有多名 PMC Member和Contributor,并且与Cockroach LABs合作成立了CockroachDB中国社区,负责在中国地域内推广和应用CockroachDB产品。

      下面列出来自于这两家公司官网给出的主要功能特性(我们可以看到很多是相同的,它们的适用场景也是基本相同的):

      1. TiDB

         (1) 高度兼容MySQL

        大多数情况下,无需修改代码即可从MySQL 轻松迁移至TiDB,分库分表后的MySQL集群亦可通过TiDB工具进行实时迁移。

        (2) 水平弹性扩展

        通过简单地增加新节点即可实现TiDB 的水平扩展,按需扩展计算或存储能力,轻松应对高并发、海量数据场景。    

        (3) 分布式事务

        TiDB 100% 支持标准的ACID 事务。

       (4) 真正金融级高可用

      相比于传统主从(M-S) 复制方案,基于Raft 的多数派选举协议可以提供金融级的100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复(auto-failover),无需人工介入。

        (5) 一站式HTAP 解决方案TiDB 

        作为典型的OLTP 行存数据库,同时兼具强大的OLAP 性能,配合TiSpark, 可提供一站式HTAP 解决方案,一份存储同时处理OLTP & OLAP,无需传统繁琐的ETL过程。

        (6) 云原生SQL 数据库

        TiDB 是为云而设计的数据库,同Kubernetes 深度耦合,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。

      

   2. CockroachDB

      (1) 支持标准SQL

     CockroachDB支持标准SQL, 包括Join, 外键约束和显示事务。CockroachDB 兼容PostgreSQL协议以及语法,所有使用PostgreSQL的应用可以直接连接CockroachDB.

    (2)支持分布式事务

     CockroachDB支持两种隔离级别:

         SERIALIZABLE (SSI) : CockroachDB的默认隔离级别,类似于标准事务隔离级别中的串行化。

         SNAPSHOT (SI) : 在事务冲突比较严重的情况下,snapshot isolation的并发处理能力要更好一些,但是会有write skew的问题。

      应用需要在正确性和性能方面做出权衡,从而选择合适的隔离级别。当应用需要显示的事务操作时,可以直接使用标准SQL的begin和commit等操作。

      (3) 分布式SQL查询

      传统的OLTP型数据库,例如MySQL,对JOIN, Group By 等 OLAP类的查询支持比较弱。CockroachDB在分布式KV的基础上构建了分布式计算框架,可以将OLAP类的SQL请求通过物理执行计划转化为分布式计算任务,所以对OLAP类的查询也可以很好的支持。

      (4) 高并发

      CockroachDB本质是一个OLTP型的系统,底层存储采用分布式KV(类NoSQL系统),且采用去中心化的架构设计,任意节点都可以对应用提供读写请求,可以很好地支持用户高并发的访问需求。 

      (5) 弹性扩容

      对于使用传统关系型数据库(类似MySQL)的应用而言,当数据量或者访问量急剧增长时,传统关系型数据库会遇到单机瓶颈的问题。而CockroachDB可以让用户专注于业务逻辑,当数据量或者访问量增长时,可以通过新增节点的方式来满足业务需求,且新增节点的过程中,业务无感知。

      (6) 高可用

      对于应用而言,经常关注的一个问题在于底层系统的可用性。传统的单机数据库在出现故障时,往往会影响甚至中断业务的正常访问。CockroachDB在架构设计上无中心节点,且数据以Range(默认64M)为单位按照默认3副本的方式进行组 织,Range的各个副本之间采用Raft协议进行数据的同步。单个节点的故障可能会导致某些Range出现副本丢失的情况,但是Raft协议保证对于单个Range,在3副本情况下,如果有2副本可用,那么该Range对外依然可用。并且集群有自愈功能,当集群检测到某些 Range缺失副本的情况下,会自动尝试进行补全,且整个过程对应用无感知。

      (7) 云数据库

      CockroachDB与kubernetes紧密结合,能够在公有云或私有云下部署和运行。这方面的官方文档完整、详实,很不错。


      TiDB和crdb两种开源分布式New SQL数据库先前的主要精力还是在非功能特性方面(比如,扩展能力、高可用),还在为新一代数据库打“地基阶段”,与传统关系型数据库在SQL功能特性和完备性方面还有距离。随着用户对分布式数据库市场的迫切需求以及市场的确立,相信这些产品会不断演进、越来越完备!

       



猜你喜欢

转载自blog.csdn.net/u011782423/article/details/80923345