(数据库行业全景图)
接下来先从我们最熟悉的MySQL的使用说起!
一个问题假设现在有一个高速发展的互联网公司,核心业务库MySQL的数据量已经近亿行,且还在不断增长中。
公司对数据资产较为重视,所有数据要求多副本保存至少5年;且除了有历史数据进行统计分析的离线报表业务外,还有一些针对用户数据实时查询的需求,如用户历史订单实时查询。
问题分析
1:MySQL能否满足上述场景需求?
根据以往的MySQL使用经验,MySQL单表在5000万行以内时,性能较好,单表超过5000万行后,数据库性能、可维护性都会急剧下降。当然这时候可以做MySQL分库分表,如使用MyCAT。
2:分库分表能否解决问题?
分库分表的优点非常明显,如:
①将大表拆分成小表,单表数据量控制在5000万行以内,使MySQL性能稳定可控。
②将单张大表拆分成小表后,能水平扩展,通过部署到多台服务器,提升整个集群的QPS、TPS、Latency等数据库服务指标。
但是,此方案的缺点也非常明显:
①分表跨实例后,产生分布式事务管理难题,一旦数据库服务器宕机,有事务不一致风险。
②分表后,对SQL语句有一定限制,对业务功能需求大打折扣。尤其对于实时报表统计类需求,限制非常之大。事实上,报表大多都是提供给高层领导使用的,其重要性不言而喻。
③分表后,需要维护的对象呈指数增长(MySQL实例数、需要执行的SQL变更数量等)。
问题解决
基于以上核心痛点,我们需要探索新的数据库技术方案来应对业务爆发式增长所带来的挑战,为业务提供更好的数据库服务支撑。
调研市场上的各大数据库,我们可以考虑选用NewSQL技术来解决,因为NewSQL技术有如下显著特点:
无限水平扩展能力
分布式强一致性,确保数据100%安全
完整的分布式事务处理能力与ACID特性
而TiDB数据库Github的活跃度及社区贡献者方面都可以算得上是国际化的开源项目,是NewSQL技术中的代表性产品,所以我们可以选择TiDB数据库!
MySQL vs TiDB
(MySQL与TiDB性能对比)
从MySQL到TiDB,为你指明数据库学习路线
(数据库学习路线)