Trying TiDB

TiDB体验记录

一直在寻找分布式数据库解决方案,有看过MyCat,MyCat是一个数据库中间层产品,通过数据库分区技术能提供一个理论上无限扩展的大数据库,背后核心还是MySQL,我感觉不是终极解决方案,但可以算作是过度方案。

TiDB进入我的视野,觉得思路比较有趣,对外以MySQL 协议提供关系数据库存储服务,而核心是NoSQL技术实现分布式存储和分布式计算。先不看其核心部分,单从对外提供兼容 MySQL服务这个角度看,这是很聪明的选择,可以吸引庞大的MySQL用户群来尝试使用。

我们已经基于MySQL开发了很多项目,目前面临的一个瓶颈是随着数据量越来越大,存储空间扩展方面和查询性能方面都面临比较大的问题。一台服务器的存储容量总归是有限的,如何能有效利用其他服务器的存储资源?还有计算资源等。

一般场景下MySQL是搭建了主从环境,这意味着写数据时必须要写到主服务器上,其他从服务器可以同步到最新的数据。这样就可以通过查询从服务器实现读写分离,大大减轻主服务器的压力。

但随着数据量不断增长,主服务器和从服务器的存储都会出现难以满足的情况,这时可能会考虑数据分区的方案把数据库分拆成多个,分别存储到不同服务器上,但这需要迁移大量数据,可能在考虑不周的情况下会多次迁移数据,这在数据量到一定规模时迁移数据耗时会很长。而且应用程序往往也要适应这种数据库分拆做改动,成本可能很高。

有没有一种解决方案能弹性扩张数据库的存储资源和计算资源,也不需要复杂的数据分区以及改动相关应用程序?

这就是TiDB 的解决方案,底层的数据存储和计算资源可以动态扩展,前端的数据访问服务是以兼容MySQL的协议开放出来,堪称完美。

据TiDB官方介绍,他们在兼容MySQL方面花了相当的精力,据说是直接用MySQL的单元测试代码来测试他们的代码,保证完美兼容。

我试着搭了一个有3个节点的TiDB环境,把我们一个系统的接口调用日志数据转移过去,并且进行实时写入。同时也开发了统计分析方面的查询,测试跟MySQL的兼容性和性能,总体评估感觉是挺理想的,后面还需要持续测试一段时间观察一下。

根据TiDB官方网站上讲的,是希望满足100% OLTP数据库以及80%的OLAP数据库应用场景,这个目标是很有野心的,期待他们能达成,这样我们就可以有一个相当完美的数据库解决方案了。