TiDB,金融级开源NewSQL

        Hi~各位读者朋友们,感谢您阅读本文,我是笠泱,本期分享一个国内自研且开源的NewSQL数据库TiDB,当逐渐了解后笔者给予四个字评价“岂止强悍!”简直是数据库中的六边形战士,几乎满足了对数据库的所有需求,完整阅读本文大约需要30分钟。

本期导语

数据库技术发展简史

        数据库技术产生于20世纪60年代末70年代初,其主要主要研究如何存储,使用和管理数据。随着计算机硬件和软件的发展,数据库技术也不断地发展。数据库技术在理论研究和系统开发上都取得了辉煌的成就。

  • 从数据管理的角度看,数据库技术到目前共经历了如下三个阶段:
  1. 人工管理阶段-数据量小独立,用户直接管理
  2. 文件系统阶段-使用文件存取数据,冗余度高,管理维护难
  3. 数据库系统阶段-专门的数据库软件系统管理数据,高效方便,易于共享维护
  • 按照数据模型发展的主线,数据库技术的形成过程和发展可分为如下三个阶段:
  1. 层次和网状数据库管理系统-可以理解为使用指针来表示数据之间的联系
  2. 关系数据库管理系统(RDBMS)-可以理解为理解为使用二维表来表示维护数据间的关系
  3. 新一代数据库技术的研究和发展-针对关系型数据库存在数据模型,性能,扩展性,伸缩性等方面的缺点,出现了:

ORDBMS:面向对象数据库技术。如:PostGreSQL

NoSQL:非结构化数据库技术。如

1)键值存储数据库:Redis

2)列式储数数据库:HBase、ClickHouse

3)文档型数据库:MongoDB

4)图形数据库:Neo4J

NewSQL:这类数据库不仅具有NoSQL对海量数据的存储管理能力,还保持了传统数据库支持ACID和SQL等特性。如:TiDB、OceanBase

从MySQL到TiDB

TiDB,金融级开源NewSQL_第1张图片

        如今的数据库种类繁多,RDBMS(关系型数据库)、NoSQL(Not Only SQL)、NewSQL,在数据库领域均有一席之地,可谓百家争鸣之势。那么我们为什么要学习使用TiDB呢?接下来就从我们最熟悉的MySQL的使用说起!

场景引入

        假设现在有一个高速发展的互联网公司,核心业务库MySQL的数据量已经近亿行,且还在不断增长中,公司对于数据资产较为重视,所有数据要求多副本保存至少5年,且除了有对历史数据进行统计分析的离线报表业务外,还有一些针对用户数据实时查询的需求,如用户历史订单实时查询

问题分析

1.MySQL能否满足上述场景需求?

        根据以往的MySQL使用经验,MySQL单表在 5000 万行以内时,性能较好,单表超过5000万行后,数据库性能、可维护性都会极剧下降。当然这时候可以做MySQL分库分表,如使用Mycat或Apache Sharding-Sphere。

2.分库分表的能否解决问题?

        分库分表的优点非常明显,如:将大表拆分成小表,单表数据量控制在 5000 万行以内,使 MySQL 性能稳定可控。将单张大表拆分成小表后,能水平扩展,通过部署到多台服务器,提升整个集群的 QPS、TPS、RT等数据库服务指标。

        但是,此方案的缺点也非常明显:分表跨实例后,产生分布式事务管理难题,一旦数据库服务器宕机,有事务不一致风险。分表后,对 SQL 语句有一定限制,对业务方功能需求大打折扣。尤其对于实时报表统计类需求,限制非常之大。事实上,报表大多都是提供给高层领导使用的,其重要性不言而喻。分表后,需要维护的对象呈指数增长(MySQL实例数、需要执行的物理SQL变更数量等)。

问题解决

        基于以上核心痛点,我们需要探索新的数据库技术方案来应对业务爆发式增长所带来的挑战,为业务提供更好的数据库服务支撑。调研市场上的各大数据库,我们可以考虑选用NewSQL技术来解决,因为NewSQL技术有如下显著特点:

- 理论上无限水平扩展能力

- 分布式强一致性

- 完整的分布式事务处理能力与 ACID 特性

        而TiDB数据库在GitHub的活跃度(截止目前已在GitHub上获得了超32,000颗星星)及社区贡献者方面都可以算得上是国际化的开源项目,是NewSQL技术中的代表性产品,所以我们可以选择使用TiDB数据库!

小结

        传统关系型数据库历史比较久,目前RDBMS的代表为Oracle、MySQL、PostgreSQL,在数据库领域也是“辈份”比较高的,其广泛应用在各行各业,RDBMS大多为本地存储或共享存储。

        但是此类数据库存在着一些问题,如自身容量的限制。随着业务量不断增加,容量渐渐成为瓶颈,此时DBA会通过多次的库表sharding,以此来缓解容量问题。大量的分库分表,不仅耗费了大量人力,还使得业务访问数据库的路由逻辑变得复杂。除此之外,RDBMS伸缩性比较差,通常集群扩容缩容成本较高,且不满足分布式的事务。

        NoSQL类数据库的代表为Hbase、Redis、MongoDB、Cassandra等,这类数据库解决了 RDBMS伸缩性差的问题,集群容量扩容变得方便很多,但是由于存储方式为多个KV存储

你可能感兴趣的:(拥抱云计算,tidb,开源,云计算,数据库,分布式)