【.com快译】随着企业采用云原生架构,话题自然就转向了我们如何让数据库横向扩展。答案可能是仔细看看TiDB。TiDB是在Apache2.0许可下发布的开源NewSQL数据库。因为它使用MySQL协议,现有的应用程序可以使用任何MySQL连接器连接到它,并且大多数SQL功能保持不变(连接、子查询、事务等)。但是,底部仍然存在差异。如果您的架构基于带有只读副本的MySQL,您会发现TiDB的工作方式略有不同。本文介绍了TiDB和MySQL的五个主要区别。1.TiDB原生的查询执行和存储分布是MySQL,通过复制水平扩展很常见。通常一个MySQL主库有很多从库,每个从库都有一份完整的数据副本。使用应用程序逻辑或ProxySQL等技术,查询被路由到适当的服务器(您可以将查询从主服务器卸载到从服务器,只要这样做是安全的)。横向扩展复制是读取密集型工作负载的理想选择,因为查询执行可以在复制从属之间分配。但是,这成为写入密集型工作负载的瓶颈,因为每个副本都需要数据的完整副本。换个角度看,MySQL的复制机制可以横向扩展SQL处理,但不能横向扩展存储。(顺便说一下,对于传统复制以及GaleraCluster和组复制等较新的解决方案也是如此。)TiDB的工作方式略有不同:查询执行是通过一层TiDB服务器处理的。向外扩展SQL处理可以通过添加新的TiDB服务器来实现,这可以使用KubernetesReplicaSets轻松完成。这是因为TiDB服务器是无状态的,它的TiKV存储层负责所有的数据持久化。表数据自动分片成小块分布在TiKV服务器之间。TiKV集群中保留了每个数据区域(TiKV中的分片名称)的三份副本,但没有任何TiKV服务器需要数据的完整副本。用MySQL的术语来说:每个TiKVserver同时是master和slave,因为对于某些数据区域,它会包含主副本,而对于其他数据区域,它会包含从副本。TiDB支持跨数据区域的查询,也就是MySQL术语中的跨分片查询。关于不同区域所在位置的元数据由PlacementDriver(任何TiDB集群的管理服务器组件)维护。所有操作都完全符合ACID,并且跨两个区域更改数据的操作分两个阶段提交。对于学习TiDB的MySQL用户,更简单的解释是,TiDB服务器就像一个智能代理,将SQL转换成批量key-value请求发送给TiKV。TiKV服务器使用基于范围的分区来存储你的表。范围自动平衡以保持每个分区为96MB(默认,但可配置),并且每个范围可以存储在不同的TiKV服务器上。PlacementDriver服务器跟踪哪些范围在哪里,并在范围变得太大或太热时自动重新平衡。这种设计具有横向扩展复制的几个优点:SQL处理层和数据存储层可以独立扩展。对于许多工作负载,您会先遇到一个瓶颈。通过添加节点(用于SQL和数据存储)进行增量扩展。更好地利用硬件。要将MySQL扩展为一主四副本,您必须有五个数据副本。TiDB只使用三副本,热点可以通过PlacementDriver自动重新平衡。2.TiDB的存储引擎是RocksDB。自2010年以来,MySQL默认的存储引擎是InnoDB。InnoDB内部使用B+树数据结构,类似于传统商业数据库使用的数据结构。相比之下,TiDB使用RocksDB作为TiKV的存储引擎。RocksDB对于大型数据集有优势,因为它可以更有效地压缩数据,并且当索引不再适合内存时,插入性能不会降低。请注意,MySQL和TiDB都支持新存储引擎可以使用的API。例如,PerconaServer和MariaDB都支持RocksDB选项。3.TiDB使用Prometheus/Grafana收集指标跟踪关键指标是维护数据库健康的重要一环。MySQL将这些快速变化的指标集中在性能模式中。PerformanceSchema是一组可以通过常规SQL查询查询的内存表。在TiDB的情况下,做出将信息发送到私有服务而不是将指标保留在服务器内部的战略选择。Prometheus+Grafana是当今运维团队中非常常见的技术栈,附上图表很容易自己创建阈值或者配置告警的阈值。TiDB指标4.TiDB更好地处理DDL如果我们暂时忽略MySQL中并非所有数据定义语言(DDL)更改都是在线的,那么运行分布式MySQL系统时更大的挑战是为所有节点同时更改的模式外部化。假设您有10个分片并添加了一列,但每个分片完成更改所需的时间不同。如果没有分片,这个挑战仍然存在,因为副本在主副本之后处理DDL。TiDB使用Google的F1论文中描述的协议来实现在线DDL。简而言之,DDL更改被分解为更小的过渡阶段,这样它们可以防止数据损坏情况,并且系统可以容忍单个节点一次最多支持一个DDL版本。5.TiDB专为HTAP工作负载而设计MySQL团队传统上专注于优化在线事务处理(OLTP)查询的性能。也就是说,MySQL团队花更多的时间让更简单的查询执行得更好,而不是让所有或复杂的查询执行得更好。这种方法没有任何问题,因为许多应用程序只使用简单的查询。TiDB旨在跨混合事务/分析处理(HTAP)查询执行良好。对于那些希望实时分析数据的人来说,这是一个很大的卖点,因为这样就不需要在MySQL数据库和分析数据库之间进行批量加载。结束语以上是我在MySQL行业15年,然后关注TiDB的5大观察。虽然其中许多涉及内部差异,但我建议查看有关MySQL兼容性的TiDB文档。它描述了可能影响您的应用程序的任何差异的一些细节。原标题:MeetTiDB:AnopensourceNewSQLdatabase,作者:MorganTocker
