02-数据库含中间件选型

一、数据库

数据库 类型 MySQL兼容 事务支持 计算资源扩容能力 存储资源扩容能力
MySQL 单机DB;OLTP 自身 innoDB存储引擎支持
myIsAm存储引擎不支持
单机DB不支持扩容。可以通过分表分库,挂载只读实例来实现 单机DB不支持扩容。可以通过分表分库,挂载只读实例来实现
PolarDB 一主多从DB;OLTP 100%兼容,无需修改代码 ACID。支持READ_UNCOMMITTED、READ_COMMITTED(默认)、REPEATABLE_READ。不支持SERIALIZABLE 一主节点(可读可写),多从节点(只读),最多可扩容至16个节点。可在线扩容 使用PolarFS共享文件系统,多个节点使用相同的存储,容量最大支持200TB。自动扩容
PolarDB-X 分布式DB;HTAP 兼容MySQL协议。兼容绝大多数MySQL的各种DML、DAL、DDL语法 ACID。默认采用可重复读(Repeatable Read)隔离级别 CN节点可以动态扩容 CN节点可以动态扩容
TableStore NoSQL 不支持 不支持 自动扩容 自动扩容
MongoDB NoSQL 不支持 单个文档支持原子性,多个文档需要4.2版本后的分布式事务 可以增加节点 可以增加节点
TiDB NewSQL; HTAP TiDB 高度兼容 MySQL 5.7 协议、MySQL 5.7 常用的功能及语法 ACID。支持READ_COMMITTED、REPEATABLE_READ TiDB可动态扩容 TiKV可动态扩容
ClickHouse OLAP 不支持MySQL协议;支持SQL,许多情况下与ANSI SQL标准一致 - 可以增加节点 可以增加节点

1.PolarDB

PolarDB是对MySQL主从架构的深度优化。MySQL主从架构本质上依然是单机DB,存在单机计算资源及存储资源的限制。PolarDB将计算资源及存储资源分离为DBServer及DataServer,而DataServer是一个分布式共享文件系统,使得存储空间可以突破单机存储限制

  • PolarDB的DBServer同样分为主从节点,主节点只有一个负责数据读写,从节点可以最多有15个,只能进行读操作。所有DBServer节点共享存储在底层DataServer中的数据。
  • 计算及存储的分离使得增加从节点时不再像MySQL加从库时,需要进行数据同步。从节点的增加是瞬时的
  • MySQL的Binlog主从同步是逻辑层的数据同步,同样的SQL需要在从库再执行一遍,使得主从延迟有时会比较明显。而PolarDB主从同步使用Redo Log,Redo Log记录了在数据的物理层面修改的信息,从库可以按照Log直接对数据页进行修改,从而提高了主从同步的速度
  • 会话一致性,PolarDB使用会话一致性解决主从不同步问题。
  • DataServer使用三副本及分布式一致性协议Raft保证数据的可靠性。DataServer自动进行扩容管理
  • 阿里云官方PolarDB深度解读

从MySQL迁移至PolarDB的理由:

  1. 无法拒绝的理由:PolarDB 100%兼容MySQL协议及SQL语法及函数。
  2. 容量可以突破单机磁盘限制,目前上限为200TB。是大表业务的福音。
  3. 从节点增加更快。对于经常性有并发高峰的业务,可以快速增加从节点。

迁移成本:

  1. 由于PolarDB 100%兼容MySQL协议及SQL语法及函数,已有的数据库客户端不需要改动,在代码层面没有任何代价。
  2. 学习成本几乎为零。 PolarDB Server 设计上,采用 MySQL 完全兼容的思路,完全拥抱开源生态,从 SQL 的编译、性能优化器和执行计划等等都保留了传统关系型数据库的特色。
  3. 由云完全托管,没有新的运维成本开销。
  4. 阿里云的MySQL的RDS可以一键升级至PolarDB,也可以通过相关迁移工具做数据同步

2.PolarDB-X

与PolarDB不同,PolarDB-X是一个真正的分布式服务。他的计算节点CN,数据节点DN都是可以进行扩容的。

  • 相较与MySQL的服务架构,PolarDB的DBServer可以认为就是MySQL本身,而DataServer则是文件服务。而PolarDB-X的CN节点可以认为是MySQL的Server部分,DN节点为MySQL的InnoDB部分。
  • 与PolarDB的主从架构不同,PolarDB-X的计算节点是完全分布式的。
  • DN节点基于Paxos提供数据高可靠、强一致保障。同时通过MVCC维护分布式事务可见性。且DN支持PB级别的数据量
  • PolarDB-X将数据表以水平分区的方式,分布在多个存储节点(DN)上。数据分区方式由分区函数决定,PolarDB-X支持哈希(Hash)、范围(Range)等常用的分区函数。
  • PolarDB-X支持并行计算,将SQL拆分为不同的Task分配给多个CN,并行计算。

从MySQL迁移至PolarDB-X的理由:

  1. PolarDB-X将兼容MySQL以及周边生态作为核心设计目标之一。兼容MySQL协议,兼容绝大部分MySQL函数。SQL使用限制见官方文档
  2. PolarDB-X作为分布式服务,在可支撑并发量及容量上都是可以线性扩展的。

迁移成本

  1. PolarDB 100%兼容MySQL协议,不需要改变客户端
  2. 学习成本低,除了部分由于分布式导致的SQL使用限制
  3. 由云完全托管,没有新的运维成本开销。
  4. 历史数据可以通过相关工具自动迁移至PolarDB-X。

3.TableStore

TableStore是NoSQL数据库,虽然与MySQL不具有可比性。但是作为一种存储的选择,有理由介绍一下。

  • TableStore支持宽列模型(Wide column),可以存储非结构化的数据。与MySQL相比,MySQL必须预先定义好表结构,读写必须对已有字段进行。
  • 分布式服务。对数据的高可靠和一致性有保障。
  • 可以通过二级索引、多元索引加速查询及支持复杂查询

从MySQL迁移至TableStore的理由:

  • 没有理由!不可以互相替代。TableStore不支持MySQL协议,也不支持SQL(通过阿里云的其他工具进行转换除外)
  • TableStore可以弥补MySQL在数据量和并发方面的限制问题,可以应用在大数据场景
  • 可以使用阿里云相关工具将MySQL数据同步至TableStore

4.MongoDB

MongoDB是介于关系型DB与非关系型DB之间的分布式数据库。不支持MySQL协议,也不支持SQL。拥有自己的CRUD方法,同样支持聚合。

  • MongoDB支持的数据结构是类似json的bjson格式,单条数据称为文档,可以类比与MySQL的一行数据。不需要固定的表结构。
  • bjson格式可以存储复杂的数据结构、包括内嵌数据,并支持丰富的查询方式
  • MongoDB只能支持单文档的原子性,在4.2版本之后可以使用分布式事务,并支持ACID。
  • 支持索引、复合索引、内嵌结构索引
  • 可以指定索引或者复合索引作为数据分片值,支持hash分片及范围分片

从MySQL迁移至MongoDB的理由:

  • bjson格式支持存储和查询复杂的数据结构,没有MySQL那样的表结构限制
  • MongoDB是分布式的。对数据的高可靠和一致性有保障。
  • MongoDB也可以通过建立索引加速查询。

迁移成本

  • 需要客户端代码改造
  • 需要重新设计业务数据存储
  • 需要学习MongoDB开发及运维知识
  • 需要自行迁移

5.TiDB

TiDB是分布式关系型数据库,兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。在存储层,相比PolarDB-X使用Innodb,TiDB使用RocksDB存储引擎,数据以KV结构存储。

  • 作为关系型数据库,支持事务,支持索引等MySQL常用特性。
  • 纯分布式数据库,对数据的高可靠和一致性有保障。
  • 支持hash分片及范围分片

从MySQL迁移至TiDB的理由:

  • TiDB是分布式的。对数据的高可靠和一致性有保障。
  • 兼容 MySQL 5.7 协议、MySQL 常用的功能、MySQL 生态

迁移成本

  • 兼容 MySQL 5.7 协议、MySQL 常用的功能、MySQL 生态,应用无需或者修改少量代码即可从 MySQL 迁移到 TiDB
  • 新的学习成本:TiDB底层存储使用了新的KV存储引擎RocksDB
  • 可以使用TiDB Lightning将数据从MySQL迁移至TiDB

6.ClickHouse

ClickHouse是列式存储计算的分析型数据库,适用于写少但是查询海量数据的场景。

  • 使用列式存储,有更高的压缩比。相比行式存储,相同大小的空间,列式可以存储更多条数据,减少IO。
  • 无需事务,数据一致性要求低
  • 需要低频批量写入甚至一次性写入
  • 有限支持delete、update(删除、更新操作为异步操作,需要后台compation之后才能生效)
  • 向量化执行与SIMD,对内存中的列式数据,一个batch调用一次SIMD指令。加速计算。
  • ClickHouse支持更多的数据类型,如数组、Map、嵌套类型

从MySQL迁移至ClickHouse的理由:

  • 完全没有理由!MySQL是OLTP,ClickHouse是OLAP。不可相互替代
  • ClickHouse可以全量和增量导入MySQL数据。

总结

  • 从兼容角度,以上DB的MySQL兼容度从高到低依次为:1. PolarDB 2. PolarDB-X、TiDB;ClickHouse支持SQL;TableStore、MongoDB不支持SQL。
  • 从事务支持角度,PolarDB与MySQL具有相同的事务支持,PolarDB-X、MongoDB、TiDB支持分布式事务。
  • 从高可用角度,PolarDB支持有限的扩容。PolarDB-X、MongoDB、TiDB、TableStore、ClickHouse均为分布式服务,支持扩容。
  • 从存储结构来看,MySQL、PolarDB、PolarDB-X、TiDB、ClickHouse都是固定表结构。MongoDB、TableStore为Scheme-Free。TableStore、ClickHouse为列式存储。MongoDB与ClickHouse支持存储和查询复杂数据类型。

二、数据库中间件

image-20230525163756618


02-数据库含中间件选型
https://janycode.github.io/2020/06/13/19_技术选型/02-数据库含中间件选型/
作者
Jerry(姜源)
发布于
2020年6月13日
许可协议