TiDB 简介

参考文章:TiDB 简介

TIDB入门了解,对比MySql

1.什么是 TiDB

世界级的开源分布式数据库 TiDB 自 2016 年 12 月正式发布第一个版本以来,业内诸多公司逐步引入使用,并取得广泛认可。 
       对于互联网公司,数据存储的重要性不言而喻。在 NewSQL 数据库出现之前,一般采用单机数据库(比如 MySQL)作为存储,随着数据量的增加,“分库分表”是早晚面临的问题,即使有诸如 MyCat、ShardingJDBC 等优秀的中间件,“分库分表”还是给 RD 和 DBA 带来较高的成本;NewSQL 数据库出现后,由于它不仅有 NoSQL 对海量数据的管理存储能力、还支持传统关系数据库的 ACID 和 SQL,所以对业务开发来说,存储问题已经变得更加简单友好,进而可以更专注于业务本身。而 TiDB,正是 NewSQL 的一个杰出代表! 
        TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。
        TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案

TiDB 官方网站

TIDB是什么?MySql是什么?

TiDB 是 PingCAP 公司受 Google Spanner / F1 论文启发而设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP(Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。

TiDB 是一个分布式 NewSQL 数据库。它支持水平弹性扩展、ACID 事务、标准 SQL、MySQL 语法和 MySQL 协议,具有数据强一致的高可用特性,是一个不仅适合 OLTP 场景还适合 OLAP 场景的混合数据库。

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

TIDB适用场景;MySql适用场景:

TIDB适用场景:

  1. 原业务的MySql的业务逻辑遇到单机容量或者性能瓶颈时,可以考虑适用TiDB无缝替换MySql。
  2. 大数据量下,MySql复杂查询很慢。
  3. 大数据量下,数据增长很快,接近单机处理的极限,不想分库分表或者使用数据库中间件等对业务侵入性较大、对业务有约束的Sharding方案。
  4. 大数据量下,有高并发实时写入、实时查询、实时统计分析的需求。
  5. 有分布式事务、多数据中心的数据100%强一致性、auto-failover的高可用的需求.

 MySql适用场景:

  1. Web网站系统
  2. 日志记录系统
  3. 数据仓库系统
  4. 嵌入式系统

TIDB不适用场景:

  1. 单机MySql能满足的场景用不到TiDB。
  2. 数据条数少于5000W的场景下通常用不到TiDB,TiDB是为大规模的数据场景设计的。
  3. 如果你的应用数据量小(所有数据千万级别行以下),且没有高可用、强一致性或者多数据中心复制等要求,那么就不适合适用TiDB。

MySql不适用场景:

  1. 单机MySql无法满足的场景。
  2. 数据条数大于5000W的场景下MySql通常无法满足。
  3. 应用数据量特别大,请求次数频繁。

TIDB和MySql的核心特点:

TIDB核心特点:

  • 高度兼容MySql

大多数情况下,无需修改代码即可从MySql轻松迁移至TiDB,分库分表后的MySql集群亦可通过TiDB工具进行实时迁移。

  • 水平弹性扩展

通过简单地增加新节点即可实现TiDB的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。

  • 分布式事务

TiDB 100% 支持标准的ACID事务。

  • 真正金融级高可用

相比于传统主从(M-S)复制方案,基于Raft的多数派选举协议可以提供金融级的100%数据强一致性保证,且在不丢失大多数读本的前提下,可以实现故障的自动恢复(auto-failover),无需人工介入。

  • 一站式HTAP解决方案

TiDB作为典型的OLTP(联机事务处理)行存数据库,同事兼具强大的OLAP(联机分析处理)性能,配合TiSpark,可提供一站式HTAP解决方案,一份存储同时处理OLTP&OLAP无需传统繁琐的ETL过程。

  • 云原生SQL数据库

TiDB是为云而设计的数据库,同Kubernetes深度耦合,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。
TiDB的设计目标是100%的OLTP场景和80%的OLAP场景,更复杂的OLAP分析可以通过TiSpark项目来完成。TiDB对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分表分库等Sharding方案。同时它也让开发运维人员不用关注数据库Scale的细节问题,专注于业务开发,极大的提升研发的生产力。

MySql核心特点:

  1. 开源、免费、成本低
  2. 性能高、移植性也好
  3. 体积小,便于安装

2.核心特点

  • 支持 MySQL 协议(开发接入成本低); 
  • 100% 支持事务(数据一致性实现简单、可靠); 
  • 无限水平拓展(不必考虑分库分表)。 

2.1高度兼容 MySQL

大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移

2.2水平弹性扩展

通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景

2.3分布式事务

TiDB 100% 支持标准的 ACID 事务

2.4真正金融级高可用

相比于传统主从 (M-S) 复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复 (auto-failover),无需人工介入

2.5一站式 HTAP 解决方案

TiDB 作为典型的 OLTP 行存数据库,同时兼具强大的 OLAP 性能,配合 TiSpark,可提供一站式 HTAP 解决方案,一份存储同时处理 OLTP & OLAP 无需传统繁琐的 ETL 过程

2.6云原生 SQL 数据库

TiDB 是为云而设计的数据库,同 Kubernetes 深度耦合,支持公有云、私有云和混合云,使部署、配置和维护变得十分简单。TiDB 的设计目标是 100% 的 OLTP 场景和 80% 的 OLAP 场景,更复杂的 OLAP 分析可以通过 TiSpark 项目来完成。 TiDB 对业务没有任何侵入性,能优雅的替换传统的数据库中间件、数据库分库分表等 Sharding 方案。同时它也让开发运维人员不用关注数据库 Scale 的细节问题,专注于业务开发,极大的提升研发的生产力

3整体架构

要深入了解 TiDB 的水平扩展和高可用特点,首先需要了解 TiDB 的整体架构。TiDB 集群主要包括三个核心组件:TiDB Server,PD Server 和 TiKV Server。此外,还有用于解决用户复杂 OLAP 需求的 TiSpark 组件。

3.1 TiDB Server

TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展,可以通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统一的接入地址。

3.2 PD Server

Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个:一是存储集群的元信息(某个 Key 存储在哪个 TiKV 节点);二是对 TiKV 集群进行调度和负载均衡(如数据的迁移、Raft group leader 的迁移等);三是分配全局唯一且递增的事务 ID。

PD 通过 Raft 协议保证数据的安全性。Raft 的 leader server 负责处理所有操作,其余的 PD server 仅用于保证高可用。建议部署奇数个 PD 节点。

3.3 TiKV Server

TiKV Server 负责存储数据,从外部看 TiKV 是一个分布式的提供事务的 Key-Value 存储引擎。存储数据的基本单位是 Region,每个 Region 负责存储一个 Key Range(从 StartKey 到 EndKey 的左闭右开区间)的数据,每个 TiKV 节点会负责多个 Region。TiKV 使用 Raft 协议做复制,保持数据的一致性和容灾。副本以 Region 为单位进行管理,不同节点上的多个 Region 构成一个 Raft Group,互为副本。数据在多个 TiKV 之间的负载均衡由 PD 调度,这里也是以 Region 为单位进行调度。

3.4 TiSpark

TiSpark 作为 TiDB 中解决用户复杂 OLAP 需求的主要组件,将 Spark SQL 直接运行在 TiDB 存储层上,同时融合 TiKV 分布式集群的优势,并融入大数据社区生态。至此,TiDB 可以通过一套系统,同时支持 OLTP 与 OLAP,免除用户数据同步的烦恼。

4 技术内幕

5 附:扩展阅读

5.1 OLTP

  • 基本含义: OLTP(Online Transactional Processing),OLTP 是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,记录即时的增、删、改、查,比如在银行存取一笔款,就是一个事务交易
  • 实时性: OLTP 实时性要求高,OLTP 数据库旨在使事务应用程序仅写入所需的数据,以便尽快处理单个事务
  • 数据量: OLTP 数据量不是很大,一般只读 / 写数十条记录,处理简单的事务
  • 用户和系统的面向性: OLTP 是面向顾客的,用于事务和查询处理
  • 数据库设计: OLTP 采用实体 - 联系 ER 模型和面向应用的数据库设计

5.2 OLAP

  • 基本含义: OLAP(Online Analytical Processing) 即联机分析处理,是数据仓库的核心部心,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。典型的应用就是复杂的动态报表系统
  • 实时性: OLAP 的实时性要求不是很高,很多应用顶多是每天更新一下数据
  • 数据量: OLAP 数据量大,因为 OLAP 支持的是动态查询,所以用户也许要通过将很多数据的统计后才能得到想要知道的信息,例如时间序列分析等等,所以处理的数据量很大
  • 用户和系统的面向性: OLAP 是面向市场的,用于数据分析
  • 数据库设计: OLAP 采用星型或雪花模型和面向主题的数据库设计
--- OLTP OLAP
用户 操作人员,低层管理人员 决策人员,高级管理人员
功能 日常操作处理 分析决策
DB 设计 面向应用 面向主题
数据 当前的,最新的细节,二维的,分立的 历史的,聚集的,多维集成的,统一的
存取 读/写数十条记录 读上百万条记录
工作单位 简单的事务 复杂的查询
用户数 上千个 上百个
DB 大小 100MB-GB 100GB-TB