如今的数据库种类繁多,RDBMS(关系型数据库)、NoSQL(Not Only SQL)、NewSQL,在数据库领域均有一席之地,可谓百家争鸣之势。那么我们为什么要学习使用TiDB呢?接下来就从我们最熟悉的MySQL的使用说起!
场景引入
假设现在有一个高速发展的互联网公司,核心业务库MySQL的数据量已经近亿行,且还在不断增长中,公司对于数据资产较为重视,所有数据要求多副本保存至少5年,且除了有对历史数据进行统计分析的离线报表业务外,还有一些针对用户数据实时查询的需求,如用户历史订单实时查询
问题分析
1.MySQL能否满足上述场景需求?
根据以往的MySQL使用经验,MySQL单表在 5000 万行以内时,性能较好,单表超过5000万行后,数据库性能、可维护性都会急剧下降。当然这时候可以做MySQL分库分表,如使用Mycat或Sharding-jdbc
2.分库分表的能否解决问题?
分库分表的优点非常明显,如:
- 将大表拆分成小表,单表数据量控制在 5000 万行以内,使 MySQL 性能稳定可控。
- 将单张大表拆分成小表后,能水平扩展,通过部署到多台服务器,提升整个集群的 QPS、TPS、Latency 等数据库服务指标。
但是,此方案的缺点也非常明显:
- 分表跨实例后,产生分布式事务管理难题,一旦数据库服务器宕机,有事务不一致风险。
- 分表后,对 SQL语句有一定限制,对业务方功能需求大打折扣。尤其对于实时报表统计类需求,限制非常之大。事实上,报表大多都是提供给高层领导使用的,其重要性不言而喻。
- 分表后,需要维护的对象呈指数增长(MySQL实例数、需要执行的 SQL 变更数量等)。
问题解决
基于以上核心痛点,我们需要探索新的数据库技术方案来应对业务爆发式增长所带来的挑战,为业务提供更好的数据库服务支撑。
调研市场上的各大数据库,我们可以考虑选用NewSQL技术来解决,因为NewSQL技术有如下显著特点:
-
无限水平扩展能力
-
分布式强一致性,确保数据 100% 安全
-
完整的分布式事务处理能力与 ACID 特性