https://db-engines.com/en/system/MySQL%3BTiDB
https://opensource.com/article/18/11/key-differences-between-mysql-and-tidb
https://www.zhihu.com/question/58767602
TiDB 具备如下 NewSQL 核心特性:
SQL支持 (TiDB 是 MySQL 兼容的)---->基本上没有学习成本和开发改造成本,可以实现无缝后端存储迁移,这一点对开发哥来说太太太重要了。
水平线性弹性扩展 ---->无限的计算能力,无限的存储能力,虽然是理论上的,但是不觉得很牛逼的样子吗?
分布式事务 -->适配OLTP场景
跨数据中心数据强一致性保证 ---->某些场景下很有用
故障自恢复的高可用 ---->永远挂不了的系统,是不是很酷?
TiDB 的设计目标是 100% 的 OLTP 场景和 80% 的 OLAP 场景。
没有学习成本和接入成本,不需要运维,随意扩展,支持事务,原生高可用,mysql遇到的问题在tidb里基本都解决了。
TiDB 在小米的应用实践
https://zhuanlan.zhihu.com/p/51472404
目前 TiDB 主要应用在:
小米手机桌面负一屏的快递业务
商业广告交易平台素材抽审平台
这两个业务场景每天读写量均达到上亿级,上线之后,整个服务稳定运行;接下来我们计划逐步上线更多的业务场景,小米阅读目前正在积极的针对订单系统做迁移测试。
TiDB 结合了传统的 RDBMS 和 NoSQL 的最佳特性,兼容 MySQL 协议,支持无限的水平扩展,具备强一致性和高可用性。
具有如下的特性:
高度兼容 MySQL,大多数情况下无需修改代码即可从 MySQL 轻松迁移至 TiDB,即使已经分库分表的 MySQL 集群亦可通过 TiDB 提供的迁移工具进行实时迁移。
水平弹性扩展,通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。
分布式事务,TiDB 100% 支持标准的 ACID 事务。
真正金融级高可用,相比于传统主从(M-S)复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复(auto-failover),无需人工介入。
TiDB 的架构及原理官网有详细介绍(https://pingcap.com/)。
TiDB 基础架构图
跟绝大数互联网公司一样,小米关系型存储数据库首选 MySQL,单机 2.6T 磁盘。由于小米手机销量的快速上升和 MIUI 负一屏用户量的快速增加,导致负一屏快递业务数据的数据量增长非常快,每天的读写量级均分别达到上亿级别,数据快速增长导致单机出现瓶颈,比如性能明显下降、可用存储空间不断降低、大表 DDL 无法执行等,不得不面临数据库扩展的问题。比如,我们有一个业务场景(智能终端),需要定时从几千万级的智能终端高频的向数据库写入各种监控及采集数据,MySQL 基于 Binlog 的单线程复制模式,很容易造成从库延迟,并且堆积越来越严重。
对于 MySQL 来讲,最直接的方案就是采用分库分表的水平扩展方式,综合来看并不是最优的方案,比如对于业务来讲,对业务代码的侵入性较大;对于 DBA 来讲提升管理成本,后续需要不断的拆分扩容,即使有中间件也有一定的局限性。同样是上面的智能终端业务场景,从业务需求看,需要从多个业务维度进行查询,并且业务维度可能随时进行扩展,分表的方案基本不能满足业务的需求。
了解到 TiDB 特点之后,DBA 与业务开发沟通确认当前 MySQL 的使用方式,并与 TiDB 的兼容性做了详细对比,经过业务压测之后,根据压测的结果,决定尝试将数据存储从 MySQL 迁移到 TiDB。经过几个月的线上考验,TiDB 的表现达到预期。
兼容性对比
TiDB 支持包括跨行事务、JOIN、子查询在内的绝大多数 MySQL 的语法,可以直接使用 MySQL 客户端连接;对于已用 MySQL 的业务来讲,基本可以无缝切换到 TiDB。
二者简单对比如下几方面:
1. 功能支持
TiDB 尚不支持如下几项:
增加、删除主键
非 UTF8 字符集
视图(即将支持)、存储过程、触发器、部分内置函数
Event
全文索引、空间索引
2. 默认设置
字符集、排序规则、sql_mode、lower_case_table_names 几项默认值不同。
3. 事务
TiDB 使用乐观事务模型,提交后注意检查返回值。
TiDB 限制单个事务大小,保持事务尽可能的小。
4. TiDB 支持绝大多数的 Online DDL。
5. 另,一些 MySQL 语法在 TiDB 中可以解析通过,不会产生任何作用,例如: create table 语句中 engine、partition 选项都是在解析后忽略。
6. 详细信息可以访问官网:https://pingcap.com/docs-cn/sql/mysql-compatibility/ 。
