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的理由:
- 无法拒绝的理由:PolarDB 100%兼容MySQL协议及SQL语法及函数。
- 容量可以突破单机磁盘限制,目前上限为200TB。是大表业务的福音。
- 从节点增加更快。对于经常性有并发高峰的业务,可以快速增加从节点。
迁移成本:
- 由于PolarDB 100%兼容MySQL协议及SQL语法及函数,已有的数据库客户端不需要改动,在代码层面没有任何代价。
- 学习成本几乎为零。 PolarDB Server 设计上,采用 MySQL 完全兼容的思路,完全拥抱开源生态,从 SQL 的编译、性能优化器和执行计划等等都保留了传统关系型数据库的特色。
- 由云完全托管,没有新的运维成本开销。
- 阿里云的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的理由:
- PolarDB-X将兼容MySQL以及周边生态作为核心设计目标之一。兼容MySQL协议,兼容绝大部分MySQL函数。SQL使用限制见官方文档
- PolarDB-X作为分布式服务,在可支撑并发量及容量上都是可以线性扩展的。
迁移成本
- PolarDB 100%兼容MySQL协议,不需要改变客户端
- 学习成本低,除了部分由于分布式导致的SQL使用限制
- 由云完全托管,没有新的运维成本开销。
- 历史数据可以通过相关工具自动迁移至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支持存储和查询复杂数据类型。
二、数据库中间件
02-数据库含中间件选型
https://janycode.github.io/2020/06/13/19_技术选型/02-数据库含中间件选型/