博客
最受欢迎的文章
推荐阅读文章
热门标签
查看全部标签TiDB Serverless Branching:通过数据库分支简化应用开发流程
TiDB Serverless Branching 功能使用户能够为其 TiDB Serverless 集群创建分支。这些分支可以实现并行开发,促进新功能快速迭代,排查故障,开发者无需中断生产数据库的运行。该功能不仅简化了开发和部署过程,还保持了生产环境中数据库的稳定性和可靠性。
TiDB Bot:用 Generative AI 构建企业专属的用户助手机器人
本文介绍了 PingCAP 是如何用 Generative AI 构建一个使用企业专属知识库的用户助手机器人。除了使用业界常用的基于知识库的回答方法外,还尝试使用模型在 few shot 方法下判断毒性。目前该机器人已经应用到了 TiDB 面向全球客户的各种渠道中。
TiDB 7.2 - 更平滑的操作体验
TiDB 7.2 致力于简化数据管理,引入了暂停和恢复 DDL 操作、资源组控制查询影响以及将 TiDB Lightning 导入服务整合到 TiDB 中的功能。
TiKV 新架构:Partitioned Raft KV 原理解析
在上一篇文章中,我们介绍了 Partitioned Raft KV 这一新实验特性带来的性能和可伸缩性大幅提升。本文我们将为大家介绍这一功能的实现原理。
新特性解析丨TiDB 资源管控的设计思路与场景解析
资源管控技术是 TiDB 7.0 版本中优化提升的重要能力之一,不仅可以在负载剧烈变化时,保证服务质量,同时提供了数据库的多租户隔离能力,能够有效地降低数据库运行成本,帮助企业节省信息化管理开支,提升企业的竞争力。
TiDB Raft KV 新引擎:更高级别的可扩展性和写性能
TiDB 6.6 之前已经成功容纳超过 200 TB 的数据,开启新功能后,TiDB 的可扩展性能够提高到 PB 级别。本文将深入介绍 TiKV “partitioned-raft-kv”功能的用户价值、应用实践以及使用方式。
方案精讲丨TiDB 助力 Fintech 构建新一代数据服务平台
本文讨论了金融科技(Fintech)行业在数据基础设施建设上所面临的挑战,以及 TiDB 数据库在解决这些挑战方面的天然优势。
TiCDC 源码阅读(七)TiCDC Sorter 模块揭秘
本文聚焦 TiCDC 的 Sorter 模块,内容包括 Sorter 的价值、Sorter 的默认排序引擎选择,以及针对 LSM 树的读、写放大,Sorter 中做出的优化。
方案精讲丨电商数据技术栈,在海量数据增长下如何实现实时与全量兼得?
在跨境电商领域中,TiDB 得到了广泛的应用。本文分析了电商出海的现状与挑战,同时介绍了 TiDB 的产品能力,并结合实际案例介绍了对应的解决方案。
TiDB 6.5 新特性解析丨解锁 TiDB + 数据仓库的新形态
从 v6.5.0 开始,TiCDC 支持将行变更事件保存至存储服务,这给 TiDB + 数据仓库带来了更多可能。本文将结合生产中的实际需求和测试结果,分享 TiDB + 数据仓库共建的构想。
TiCDC 源码阅读(六)TiCDC Puller 模块介绍
TiCDC 中的 Puller 通过创建 KV-Client 向 TiKV 发送请求,在 TiCDC 中实现从 TiKV 接收变更数据功能。本期将详细分享 Puller 模块的功能实现原理。
TiDB 6.5 新特性解析丨他山之石,可以攻玉:从磁盘快照到备份恢复
本文分享了 TiDB 运用 AWS EBS 快照技术实现备份恢复功能的原理和实践,以及如何解决传统数据库备份恢复特性无法克服的问题,让备份恢复特性向前迈进了坚实的一步。
TiCDC 源码阅读(五)TiCDC 对 DDL 的处理和 Filter 解析
本文是 TiCDC 源码阅读的第五篇,将介绍 TiCDC 对 DDL 的处理方式和 Filter 功能的实现(基于 TiCDC v6.5.0 版本代码)。
坚如磐石: TiDB 基于时间点的恢复特性优化之路
对于数据库产品而言,基于时间点的恢复是非常重要的基础能力,它允许用户根据需要,将数据库恢复到特定时间点,以帮助客户的数据库免受意外损坏或错误操作的影响。例如,数据库在某个时间点之后的数据遭受了意外的删除或损坏,则可以使用 PiTR 功能将数据库恢复到该时间点之前的状态,从而避免丢失重要数据。
TiDB Serverless 和技术生态全景
本次分享在介绍 Serverless Tier 的技术细节之余,全面解析了 TiDB 的技术生态全景和在生态构建中所做的努力。阅读本文,了解有关 Serverless 的更多信息,以及 PingCAP 在技术领域的最新进展。
方案精讲丨降低架构复杂度、实现成本节约:TiDB 多业务融合方案(下)
在《多业务融合方案 - 上篇》中介绍了基础多业务融合方案,在本文中继续介绍多业务融合方案以下能力:多业务融合能力与 HTAP 结合;多业务融合在基础架构上通过修改 Leader 分布进一步提升整体隔离性;如何在线调整业务资源组。
TiDB 6.5 新特性解析丨过去一年,我们是如何让 TiFlash 高效又稳定地榨干 CPU?
TiDB 6.5 新特性解析系列文章由 PingCAP 产研团队重磅打造,从原理分析、技术实现、和产品体验几个层面展示了 6.5 版本的多项功能优化,旨在帮助读者更简单、更全面的体验 6.5 版本。本文介绍了 TiFlash 在高并发场景下的稳定性和资源利用率的优化原理。
方案精讲丨TiDB 多业务融合方案(上)
多业务融合即将多个业务系统部署在同一套 TiDB 集群中,如何提高资源隔离能力确保不同业务之间不相互影响是多业务融合方案设计要点。本文主要介绍如何使用单 TiDB 集群支持多业务,并且保证业务之间隔离性。
TiCDC MQ 吞吐性能提升报告
TiCDC 是 TiDB 生态圈的一员,为 TiDB 提供数据同步服务,它订阅上游集群中的 TiKV 节点事务执行过程中产生的数据变更事件,输出到下游目标数据系统(如 TiDB / Kafka / MySQL)。
TiCDC 源码阅读(一)TiCDC 架构概览
本篇文章是 TiCDC 源码阅读系列文章的第一期,主要叙述了 TiCDC 的目的、架构和数据同步链路,旨在让读者能够初步了解 TiCDC,为阅读其他源码文章起到一个引子的作用。
TiKV 源码阅读三部曲(一)重要模块
本篇博客介绍了 TiKV 的基本概念,TiKV 读写路径上的三个重要模块(KVService,Storage,RaftStore)和断点调试 TiKV 学习源码的方案,希望能够帮助对 TiKV 开发感兴趣的新同学尽快了解 TiKV 的 codebase。
我们如何消除两个开源项目之间长达 4 年的分叉
本文以 TiFlash Proxy 与 TiKV 的解耦为例,从目标确定、方案设计、实施过程及测试设计等方面分享了如何消除两个开源项目间的分叉。
PingCAP Clinic 服务:TiDB 集群诊断助理,打开智能诊断之门
本篇以数据库管理员的视角,讲述在典型的集群运维场景中,Clinic 如何帮助管理员更清晰地了解集群健康状态,如何以智能的方式提前发现问题、快速解决问题,提升 TiDB 集群的性能和稳定性。
TiFlash 源码阅读(九)TiFlash 中常用算子的设计与实现
本文主要介绍了数据库系统中常用的算子 Join 和 Aggregation 在 TiFlash 中的执行情况,包括查询计划生成、编译阶段与执行阶段,以期望读者对 TiFlash 的算子有初步的了解。
TiFlash 源码阅读(八)TiFlash 表达式的实现与设计
本文主要介绍的是 TiFlash 表达式的实现与设计,系统性地介绍了 TiFlash 表达式的基本概念,包括表达式体系,标量函数、聚合函数等,以期望读者能够对 TiFlash 的表达式计算有一个初步的了解。
TiFlash 源码阅读(六)DeltaTree Index 的设计和实现分析
本文对 DeltaTree Index 在读取时的作用以及如何维护 DeltaTree Index 进行了讲解。
TiSpark 原理之下推丨TiDB 工具分享
TiSpark 是 PingCAP 为解决用户复杂 OLAP 需求而推出的产品,本文将详细介绍 TiSpark 中下推相关的知识,包括 Spark 中的下推含义,实现原理,及其拓展接口、TiSpark 下推策略和下推支持列表。
如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南
本文主要介绍如何创建 TiDB Cloud Developer Tier 集群、如何将 TiDB 对接到 Databricks,以及如何使用 Databricks 处理 TiDB 中的数据。
化繁为简,PingCAP 与阿里云计算巢联合方案深度解析
近日,阿里云计算巢与 PingCAP 合作,融合双方技术优势的云数据库 TiDB 正式上线阿里云,这正是双方为用户“删繁就简”愿景中的坚实一步。本文将深入剖析 PingCAP 和阿里云计算巢的联合解决方案,探索软件在云端私有化部署的新形态。
TiFlash 源码阅读(五)DeltaTree 存储引擎设计及实现分析 - Part 2
在 Part1 中我们主要对 DeltaTree 引擎的结构和写入相关流程进行了介绍,本文将对读取流程进行介绍。
手把手教你实现 TiFlash 向量化函数丨十分钟成为 TiFlash Contributor
之前我们介绍了 TiDB 下推函数到 TiFlash 的开发过程,在本篇,我们会沿着用户旅程,手把手教你具体怎么在 TiFlash 里实现一个向量化函数。
TiFlash 面向编译器的自动向量化加速
SIMD 是重要的程序加速手段。本文简要介绍了一些在 TiFlash 中使用编译器进行自动向量化所需要的入门知识,包括 SIMD、SIMD 函数派发方案以及面向编译器的优化。
TiFlash 源码阅读(四)TiFlash DDL 模块设计及实现分析
在上一期源码阅读中,我们介绍了 TiFlash 的存储引擎,本文将介绍 TiFlash DDL 模块的相关内容,包括 DDL 模块的设计思路, 以及具体代码实现的方式。
TiDB 可观测性 UP!UP!UP! Performance Overview 面板开启 TiDB 性能调优自助服务时代
Performance Overview 面板在 TiDB v6.1.0 正式发布,为所有 TiDB 用户提供一个系统级别的总体性能诊断入口。本文详细介绍了 Performance Overview 面板的设计理念及应用实践。
TiFlash 函数下推必知必会 | 十分钟成为 TiFlash Contributor
本文特别筛选了 TiFlash 中一些入门级别的 issue,希望通过下文的介绍,帮助大家无门槛地参与到大型开源项目中来。
TiFlash 源码阅读(三)TiFlash DeltaTree 存储引擎设计及实现分析 - Part 1
本文分为两部分,主要介绍 TiFlash DeltaTree 存储引擎的设计细节及对应的代码实现。Part 1 部分主要涉及写入流程,Part 2 主要涉及读取流程,本次分享为 Part 1。
TiDB 查询优化及调优系列(五)调优案例实践
本文为「TiDB 查询优化及调优」系列文章的第五篇,也是最终篇。通过这个系列文章,我们详细介绍了 TiDB 优化器、查询计划、慢查询以及调优的理论知识,并在本章节中进行了实战的分享。希望通过这个系列文章,大家能够更加深入地理解 TiDB 优化器,并通过这些调优技巧更好地提升系统性能。
TiFlash 源码阅读(二)计算层概览
本文将对 TiFlash 计算层进行介绍,包括架构的演进,DAGRequest 协议、dag request 在 TiFlash 侧的处理流程以及 MPP 基本原理。
PingCAP Clinic 服务:贯穿云上云下的 TiDB 集群诊断服务
伴随着 TiDB 6.0 的发布,PingCAP Clinic 服务也揭开了她的面纱,提供 Tech Preview 版本给广大用户试用。本文介绍了 Clinic 在 TiDB Cloud 中的应用及助力云下本地部署集群的问题诊断,并描述了 Clinic 服务后续发展的方向。
TiDB 查询优化及调优系列(四)查询执行计划的调整及优化原理
本文为「TiDB 查询优化及调优」系列文章的第四篇,详细介绍了如何通过 TiDB HINT 和 SPM 对查询执行计划进行调整和优化,简要列举了其他优化器开发或规划中的诊断调优功能等。
如何让 TiDB 集群管理“更省心”?丨TiEM 使用教程来了
TiDB 企业级数据库管理平台( TiDB Enterprise Manager,简称 TiEM) 覆盖的管理运维场景众多,本文主要介绍了最新发布的 1.0.0 版本中的几个重点功能。
DM 是如何处理 DML 的丨TiDB 工具分享
本篇文章将介绍 DM 核心处理单元 Sync,内容包含 binlog 读取、过滤、路由、转换,优化以及执行等逻辑。本文仅描述 DML 的处理逻辑,DDL 相关内容可参考《DM 分库分表 DDL “悲观协调” 模式介绍》、《DM 分库分表 DDL “悲观协调” 模式介绍》。
TiFlash 源码阅读(一)TiFlash 存储层概览
TiFlash 是 TiDB 的分析引擎,是 TiDB HTAP 形态的关键组件。TiFlash 源码阅读系列文章将从源码层面介绍 TiFlash 的内部实现。本文为系列文章的第一篇,将对 TiDB HTAP 的整体形态进行介绍,并详细解析存储层 DeltaTree 引擎进行优化的设计思路以及其子模块
TiDB 查询优化及调优系列(二)TiDB 查询计划简介
查询计划(execution plan)展现了数据库执行 SQL 语句的具体步骤,例如通过索引还是全表扫描访问表中的数据,连接查询的实现方式和连接的顺序等。查阅及理解 TiDB 的查询计划是查询调优的基础。本文为系列文章的第二篇,将着重介绍 TiDB 查询计划以及如何查看。
TiDB 6.0 的元功能:Placement Rules in SQL 是什么?
TiDB 有一些功能和其它功能不一样,这类功能可以作为构建其它功能的基础,组合出新的特性,这类功能称之为:Meta Feature。
TiDB 查询优化及调优系列(一)TiDB 优化器简介
与其它主流商业数据库一样,TiDB 的查询优化器负责用户及系统查询的优化,生成有效且高效的执行计划由执行器来执行。而优化器生成的执行计划的优劣直接影响查询的执行效率和性能。本文将简要介绍 TiDB 查询优化器的优化流程。
当 TiDB 遇见 dbt丨让数据价值清晰可见
TiDB 社区在近日推出了 dbt-tidb 插件,实现了 TiDB 和 dbt 的兼容适配。本文将通过一个简单的案例介绍如何通过 dbt 实现 TiDB 中数据的简单分析。
TiDB Online DDL 在 TiCDC 中的应用丨TiDB 工具分享
本文主要通过对 TiDB Online DDL 机制原理和实现的分析,引出对当前 TiCDC 数据解析实现的讨论。
Dumpling 导出表内并发优化丨 TiDB 工具
之前的文章对 Dumpling 进阶使用进行了介绍,本文接下来将会介绍 Dumpling 内部表内并发的优化逻辑,从而帮助大家更深刻地理解 Dumpling 工作原理。
DM 分库分表 DDL “乐观协调”模式介绍丨 TiDB 工具
本文主要介绍 TiDB DM 分库分表 DDL 协调的“乐观协调”模式。乐观协调模式适用于上游灰度更新、发布的场景,或者是对上游数据库表结构变更过程中同步延迟比较敏感的场景。
备份的 “算子下推”:TiDB BR 简介
本文将会详细描述 BR 备份侧的具体实现。简单来讲,BR 就是备份的“算子下推”:通过 gRPC 接口,将任务下发给 TiKV,然后让 TiKV 自己将数据转储到外部存储中。
发生即看见,一切可回溯 | TiDB 故障诊断与性能排查探讨
本文首先详细讲述了一次海量数据场景下的性能排查经历,其次介绍了在刚刚发布的 TiDB 5.3 版本中,PingCAP 率先在数据库领域推出的 “持续性能分析” 这一功能,在文章最后列举了一些主要应用场景。
带着问题读 TiDB 源码:Power BI Desktop 以 MySQL 驱动连接 TiDB 报错
本文从一个 Power BI Desktop 在 TiDB 上表现异常的问题为例,介绍从问题的发现、定位,到通过开源社区提 issue、写 PR 解决问题的流程,从代码实现的角度来做 trouble shooting,希望能够帮助大家更好地了解 TiDB 源码。
带着问题读 TiDB 源码:Hive 元数据使用 TiDB 启动报错
本文是《带着问题读源码系列》的第一次尝试,在定位并解决用户所遇到的一个简单问题的过程中,对相关的代码一并进行介绍。希望能够从不同的视角,以不同的问题颗粒度来帮助大家更好的学习 TiDB 和 TiKV 的源码。
内存泄漏的定位与排查:Heap Profiling 原理解析
本文将介绍一些常见的 Heap Profiler 的实现原理及使用方法,帮助读者更容易地理解 TiKV 中相关实现,或将这类分析手段更好地运用到自己项目中。
TiDB HTAP 上手指南丨添加 TiFlash 副本的工作原理
本文将会介绍在目前所有 release 的 4.x, 5.x 版本下给 TiDB 中的表添加 TiFlash 副本的工作原理。DBA 同学们在排查相关的问题时,可以从中获取参考。
事务前沿研究丨事务并发控制
本次我们将学习一些常用的并发控制方法,最后对 VLDB 2020 的 best paper “Opportunities for Optimism in Contended Main-Memory Multicore Transactions” 进行解读,来看看有哪些办法能够提升事务的并行度。
TiDB Operator 源码阅读 (三) 编排组件控制循环
本篇文章将介绍组件控制循环的编排设计。我们将会了解到完成 TiDB 集群的生命周期管理过程中,各种控制循环事件经过了怎样的编排,这些事件中又完成了哪些资源管理操作。
迈向企业级核心场景的 TiDB 5.0
TiDB 5.0 的性能和稳定性得到显著提升,从而具备更强大的 OLTP 金融级核心场景的服务能力;在原有 HTAP 引擎 TiFlash 的基础上引入 MPP 架构,TiDB 使得众多企业的实时/交互式 BI 成为现实。
TiDB Operator 源码阅读 (二) Operator 模式
本文讨论了 Operator 模式,并从 Operator 模式的视角介绍 TiDB Operator 的代码的执行逻辑。
TiDB Operator 源码阅读 (一) 序
本文作为 TiDB Operator 源码阅读系列的开篇,介绍了 TiDB Operator 的应用场景和能力定位,并谈到了之后源码阅读系列文章的规划,我们希望能通过这一系列文章扫清 TiDB Operator 理解的障碍,让更多的创意在社区中萌发。
TiDB 5.0 跨中心部署能力初探 | 中心化还是去中心化?揭秘 TiDB 5.0 事务分布式授时模块
本文将会从 TiDB 现有的授时服务出发,一步步阐释新分布式授时服务的改造思路和本地事务的性能表现,最后会分享一个应用场景与上手步骤。
Linux 内核 VS 内存碎片 (下)
本文将重点描述随着时间的推移,当内存碎片过多,无法满足连续物理内存需求时,将会引起性能问题。因此仅仅依靠此功能还不够,所以内核又引入了内存规整等功能。
Linux 内核 VS 内存碎片 (上)
本文将重点描述当前常用的 3.10 版本内核在伙伴分配器的预防内存碎片的扩展,内存规整原理,如何查看碎片指数,以及如何量化内存规整带来的延迟开销等。
Chaos Mesh 技术内幕 | 如何注入 I/O 故障?
随着 Chaos Mesh 1.0 的发布,提供了运行时注入文件系统错误的功能,使得 IOChaos 的使用和其他所有类型的 Chaos 一样简单方便。这篇文章将会介绍它的实现方式。
看不懂监控怎么办?TiDB 新推出了耗时关系图
本文将向大家介绍 TiDB 4.0.7 提供的一个新功能,可以将数据库各个内部流程的耗时监控按父子关系绘制为关系图,帮助用户快速以另一种维度了解集群状态。
TiDB DM 2.0 GA,数据迁移不用愁
DM 2.0 版本已正式发布,新增高可用、乐观协调模式下的分库分表合并迁移等企业级特性,同时带来一系列易用性的提升,确保用户的原数据库可以平滑地切换到 TiDB,完全不用担心迁移带来的故障与数据丢失。
TiCDC 首个 GA 版本发布,特性与场景全揭秘丨TiDB 工具
本文将向大家介绍 TiCDC,一个通过拉取 TiKV 日志实现的 TiDB 增量数据同步工具,具有还原数据到与上游任意 TSO 一致状态的能力,同时提供开放数据协议,支持其他系统订阅数据变更。
TiKV 源码解析系列文章(十九)read index 和 local read 情景分析
这篇文章尝试向大家较为完整的介绍下 TiKV 中的 Raft 读流程的实现,特别是 read index 和 lease read。
Libbpf-tools —— 让 Tracing 工具身轻如燕
本篇文章概述了 BPF 的主要应用,重点描述了 libbpf-tools 解决了哪些 BCC 痛点以及在 PingCAP 内部的相关实践。
Why HTAP Matters丨TiDB 4.0
说到 Why HTAP Matters,其实包含两部分,一部分是说为什么我们叫 HTAP,另外一部分是说 TiDB 怎样在 HTAP 架构下发挥它的优势。
TiDB 4.0 为解决热点问题做了哪些改进?
热点处理是分布式数据库亘古不变的话题,经过四个大版本的演进,目前 TiDB 4.0 通过 AutoRandom、新热点调度器、热点可视化这几个方面进行了大幅度的优化。这些变化将以润物细无声的方式影响用户的体验。
TiDB 金融级备份及多中心容灾
依托于整个工程研发团队、QA 测试团队,以及所打造和拥有的强大的测试体系、TiDB 产品的容灾灾备一系列高可用及灾备容灾机制,我们能够为银行、保险、证券等金融客户提供完善的、可靠的、放心的、金融级的分布式数据库服务。
从马车到电动车,TiDB 部署工具变形记
在部署易用性方面,TiDB 开发者经过诸多探索和尝试,经过了命令行时代、Ansible 时代,终于在 TiDB 4.0 发布了新一代具有里程碑意义的解决方案——TiUP。
TiDB 4.0:The Leading Real-Time HTAP Database is Ready for Cloud
TiDB 4.0 终于迎来 GA 版本,这是 TiDB「面向未来的数据库」道路上面的一个重要的里程碑。
TiKV 源码解析系列文章(十八)Raft Propose 的 Commit 和 Apply 情景分析
raft-rs 实现了 Raft Leader election 和 Log replication 等核心功能,而消息的发送、接收、应用到状态机等操作则需要使用者自行实现,本文将要介绍的就是 TiKV 中这些部分的处理过程。
TiFlash:并非另一个 T + 1 列存数据库丨TiDB工具
TiFlash 是配合 TiDB 体系的列存引擎,它和 TiDB 无缝结合,在线 DDL、无缝扩容、自动容错等等方便运维的特点也在 TiFlash 中得到继承,此外,TiFlash 可以实时与行存保持同步。
TiDB 4.0 新特性前瞻(二)白话“悲观锁”
如果说在 TiDB 3.0 中,悲观锁是 “千呼万唤始出来,犹抱琵琶半遮面”。那么在 TiDB 4.0 中,悲观锁在经历了市场与时光的考验后,无论是性能还是稳定性都能够 “轻拢慢撚抹复挑,初为《霓裳》后《六幺》”。
如何做到 10T 集群数据安全备份、1GB/s 快速恢复?丨TiDB 工具
TiDB 目前可以满足超大集群的备份恢复的需求,经过测试,10T 数据的备份恢复速度可以达到 GB/s 级别。这得益于我们研发的分布式备份恢复工具 Backup&Restore That Scales (BR)。
TiDB Binlog 源码阅读系列文章 (九)同步数据到下游
同步数据这一步重要操作由 Drainer 模块支持,它可以将 binlog 同步到 TiDB / MySQL / Kafka / File (增量备份)等下游组件
TiDB 4.0 新特性前瞻(一)拍个 CT 诊断集群热点问题
在 4.0 版本中 TiDB 也实现了 Key Visualizer 功能。现在,我们可以很轻松地给集群拍个 “CT”,快速直观地观察集群整体热点及流量分布情况。
为了证明它的速度,我们一口气对比了 Oracle、MySQL、MariaDB、Greenplum、Apache Spark
借助 TiFlash 的一致性数据同步特型,用户可否以一个优异的速度直接对实时数据进行分析呢?
TiDB Binlog 源码阅读系列文章(八)Loader Package 介绍
本文将从 Loader 的接口定义开始,由上至下的介绍 Loader 将 binlog 写入下游数据库的过程。
TiLightning —— Lightning + TiSpark 轻松解除数据导入限制 丨TiDB 工具
TiLightning 可以轻松解除数据导入限制,解决了大数据生态系统和 TiDB 之间的鸿沟。
Chaos Mesh - 让应用跟混沌在 Kubernetes 上共舞
我们将混沌相关实现从自动化测试平台中抽离出来,作为 Chaos Mesh 的最初原型,并经过重新设计和完善,最终于 Github 上开源。
TiKV 源码解析系列文章(十六)TiKV Coprocessor Executor 源码解析
本文将介绍下推算子的执行流程并分析下推算子的部分实现细节,加深大家对 TiKV Coprocessor 的理解。
TiDB Binlog 源码阅读系列文章(六)Pump Storage 介绍(下)
本文介绍了 Pump Storage 的两个重要组件 `valueLog`,`slowChaser` 的主要功能与具体实现。
TiKV 源码解析系列文章(十四)Coprocessor 概览
本文将简要介绍 TiKV Coprocessor 的基本原理,面向想要了解 TiKV 数据读取执行过程的同学,同时也面向想对该模块贡献代码的同学。
TiDB Binlog 源码阅读系列文章(五)Pump Storage 介绍(上)
在上篇文章中,我们主要介绍了 Pump Server 的上线过程、gRPC API 实现、以及下线过程和相关辅助机制,其中反复提到了 Pump Storage 这个实体。本文就将介绍 Pump Storage 的实现。
如何高效利用 Grafana 监控分析 TiDB 指标
使用 TiDB Ansible 部署 TiDB 集群,会同时部署一套 Grafana + Prometheus 的监控平台,这套监控用来收集和展示 TiDB 集群各个组件和机器的 metric 信息,这些 metric 信息非常丰富,可以帮助使用者分析 TiDB 集群的状态以及 Trouble shooting。
一体化数据同步平台 DM 1.0 GA 发布 丨TiDB 工具
DM 在 TiDB DevCon 2019 上正式开源,经过半年多时间在大量用户、开发者的支持和反馈下,今天我们宣布 DM 1.0 GA 正式发布。
TiDB Binlog 源码阅读系列文章(四)Pump server 介绍
本文将继续介绍 Pump server 的实现,对应的源码主要集中在 TiDB Binlog 仓库的 pump/server.go 文件中。
TiDB 新特性漫谈:从 Follower Read 说起
关注 TiDB 的同学,最近可能注意到 TiKV 这边合并了一个不大不小的 PR,支持了一个特性叫做 Follower Read,看到这个功能被合并进主干我确实有点百感交集,还发了条朋友圈庆祝,因为我实在很喜欢这个特性。
TiDB Binlog 源码阅读系列文章(三)Pump client 介绍
本篇将介绍 Pump client,希望大家了解 TiDB 把 binlog 写到 Pump,以及输出数据的过程。
TiKV 源码解析系列文章(十一)Storage - 事务控制层
本文将为大家介绍 TiKV 源码中的 Storage 模块,它位于 Service 与底层 KV 存储引擎之间,主要负责事务的并发控制。TiKV 端事务相关的实现都在 Storage 模块中。
DM 源码阅读系列文章(九)shard DDL 与 checkpoint 机制的实现丨TiDB 工具
在本篇文章中,我们将对 shard DDL 同步机制以及 checkpoint 机制等进行详细的介绍,内容包括 shard group 的定义、shard DDL 的同步协调处理流程、checkpoint 机制以及与之相关的 safe mode 机制。
TiKV 源码解析系列文章(九)Service 层处理流程解析
之前的 TiKV 源码解析系列文章介绍了 TiKV 依赖的周边库,从本篇文章开始,我们将开始介绍 TiKV 自身的代码。本文重点介绍 TiKV 最外面的一层——Service 层。
TiDB Binlog 源码阅读系列文章(二)初识 TiDB Binlog 源码
本文介绍了 TiDB Binlog 相关源码仓库:tidb-tools 和 tidb-binlog,以及其中的目录,并且展示了如何启动测试集群。
DM 源码阅读系列文章(八)Online Schema Change 迁移支持丨TiDB 工具
本篇文章将会以 gh-ost 为例,详细地介绍 DM 是如何支持一些 MySQL 上的第三方 online schema change 方案迁移,内容包括 online schema change 方案的简单介绍,online schema change 迁移方案,以及迁移实现细节。
TiDB Binlog 源码阅读系列文章(一)序
TiDB Binlog 组件用于收集 TiDB 的 binlog,并准实时同步给下游,如 TiDB、MySQL 等。该组件在功能上类似于 MySQL 的主从复制,会收集各个 TiDB 实例产生的 binlog,并按事务提交的时间排序,全局有序的将数据同步至下游。
TiKV 源码解析系列文章(八)grpc-rs 的封装与实现
本篇将带大家深入到 grpc-rs 这个库里,查看 RPC 请求是如何被封装和派发的,以及它是怎么和 Rust Future 进行结合的。
DM 源码阅读系列文章(七)定制化数据同步功能的实现丨TiDB 工具
本篇文章介绍了 DM 的定制化数据同步功能中库表路由(Table routing)、黑白名单(Black & white table lists)、列值转化(Column mapping)、binlog 过滤(Binlog event filter)四个主要功能的实现。
DM 源码阅读系列文章(六)relay log 的实现丨TiDB 工具
本篇文章的内容包括 relay log 目录结构定义、relay log 数据的处理流程、主从切换支持、relay log 的读取等逻辑。
TiKV 源码解析系列文章(七)gRPC Server 的初始化和启动流程
本篇 TiKV 源码解析将为大家介绍 TiKV 的另一周边组件—— grpc-rs。grpc-rs 是 PingCAP 实现的一个 gRPC 的 Rust 绑定,其 Server/Client 端的代码框架都基于 Future,事件驱动的 EventLoop 被隐藏在了库的内部,所以非常易于使用。
What’s New in TiDB 3.0.0-rc.1
2019 年 5 月 10 日,TiDB 3.0.0-rc.1 版本正式推出,该版本对系统稳定性,性能,安全性,易用性等做了较多的改进,本文会逐一介绍。
DM 源码阅读系列文章(五)Binlog replication 实现丨TiDB 工具
本篇文章将会详细地介绍 DM 核心处理单元 Binlog replication,内容包含 binlog 读取、过滤、路由、转换,以及执行等逻辑。
Golang Failpoint 的设计与实现
Failpoint 项目是 FreeBSD Failpoints 的 Golang 实现,允许在代码中注入错误或异常行为,并由环境变量或代码动态激活来触发这些异常行为。Failpoint 能用于各种复杂系统中模拟错误处理来提高系统的容错性、正确性和稳定性。
DM 源码阅读系列文章(四)dump/load 全量同步的实现丨TiDB 工具
本文将详细介绍 dump 和 load 两个数据同步处理单元的设计实现,重点关注数据同步处理单元 interface 的实现,数据导入并发模型的设计,以及导入任务在暂停或出现异常后如何恢复。
TiKV 源码解析系列文章(六)raft-rs 日志复制过程分析
本文将对数据冗余复制的过程进行详细展开,特别是关于 snapshot 及流量控制的机制,帮助读者更深刻地理解 Raft 的原理。
DM 源码阅读系列文章(三)数据同步处理单元介绍丨TiDB 工具
本篇文章将详细地介绍 DM 数据同步处理单元(DM-worker 内部用来同步数据的逻辑单元),包括数据同步处理单元实现了什么功能,数据同步流程、运行逻辑,以及数据同步处理单元的 interface 设计。
What’s New in TiDB 3.0.0 Beta.1
今年 1 月份,我们发布了 TiDB 3.0.0 Beta 版本,DevCon 上也对这个版本做了介绍,经过两个月的努力,今天推出了下一个 Beta 版本 3.0.0 Beta.1。
DM 源码阅读系列文章(二)整体架构介绍丨TiDB 工具
本篇文章主要介绍 TiDB Data Migration (TiDB DM) 的整体架构,包括 TiDB DM 有哪些组件、各组件分别实现什么功能、组件之间交互的数据模型和 RPC 实现。
TiKV 源码解析系列文章(二)raft-rs proposal 示例情景分析
本文将以 raft-rs 的公共 API 作为切入点,介绍一般 proposal 过程的实现原理,让用户可以深刻理解并掌握 raft-rs API 的使用,以便用户开发自己的分布式应用,或者优化、定制 TiKV。
Titan 的设计与实现
Titan 是由 PinCAP 研发的一个基于 RocksDB 的高性能单机 key-value 存储引擎。我们的基准测试结果显示,当 value 较大的时候,Titan 在写、更新和点读等场景下性能都优于 RocksDB。
TiDB 源码阅读系列文章(二十四)TiDB Binlog 源码解析
本文将为大家介绍 TiDB 在执行 DML/DDL 语句过程中,如何将 binlog 数据发送给 TiDB Binlog 集群的 Pump 组件。
TiDB 源码阅读系列文章(二十三)Prepare/Execute 请求处理
在《(三)SQL 的一生》中,我们介绍了 TiDB 在收到客户端请求包时,最常见的 `Command --- COM_QUERY` 的请求处理流程。本文我们将介绍另外一种大家经常使用的 `Command --- Prepare/Execute` 请求在 TiDB 中的处理过程。
TiDB Ecosystem Tools 原理解读系列(三)TiDB Data Migration 架构设计与实现原理
TiDB Data Migration 是用于将数据从 MySQL/MariaDB 迁移到 TiDB 的工具。该工具既支持以全量备份文件的方式将 MySQL/MariaDB 的数据导入到 TiDB,也支持通过解析执行 MySQL/MariaDB binlog 的方式将数据增量同步到 TiDB。
TiDB Ecosystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍
TiDB-Lightning Toolset 是一套快速全量导入 SQL dump 文件到 TiDB 集群的工具集,适合在上线前用作迁移现有的大型数据库到全新的 TiDB 集群。
TiDB Ecosystem Tools 原理解读系列(一):TiDB Binlog 架构演进与实现原理
TiDB Binlog 组件用于收集 TiDB 的 binlog,并提供实时备份和同步功能。本文主要介绍了 TiDB Binlog 的架构演进之路和实现原理。
TiDB 2.1:Battle-Tested for an Unpredictable World
TiDB 是由 PingCAP 开发的分布式关系型数据库,今天我们很高兴地推出 TiDB 2.1 正式版,提供更丰富的功能、更好的性能以及更高的可靠性。
TiDB 源码阅读系列文章(十九)tikv-client(下)
本文将继续介绍 tikv-client 里的两个主要的模块——负责处理分布式计算的 copIterator 和执行二阶段提交的 twoPhaseCommitter。
TiDB 源码阅读系列文章(十七)DDL 源码解析
本文首先会介绍 TiDB DDL 组件的总体设计,以及如何在分布式场景下支持无锁 schema 变更,并描述这套算法的大致流程,然后详细介绍一些常见的 DDL 语句的源码实现。Enjoy~
TiDB Operator,让 TiDB 成为真正的 Cloud-Native 数据库
TiDB Operator 已经正式开源,本文将详细介绍 TiDB Operator 开源的细节,希望大家深入了解这个新的开源项目之后,能够速来贡献代码、成为 Contributor!Enjoy~
TiDB 源码阅读系列文章(十六)INSERT 语句详解
本文将首先介绍在 TiDB 中的 INSERT 语句的分类,以及各语句的语法和语义,然后分别介绍五种 INSERT 语句的源码实现,enjoy~
TiDB 源码阅读系列文章(十四)统计信息(下)
本篇文章将介绍直方图和 Count-Min(CM) Sketch 的数据结构,然后介绍 TiDB 是如何实现统计信息的查询、收集以及更新的。
TiDB 源码阅读系列文章(十二)统计信息(上)
本篇文章将介绍统计信息基本概念、TiDB 的统计信息收集/更新机制以及如何用统计信息来估计算子代价。上篇侧重于介绍原理,下篇会结合原理介绍 TiDB 的源码实现。
TiDB 源码阅读系列文章(十一)Index Lookup Join
前两篇文章中介绍了 Chunk 和 Hash Join,本篇将继续介绍 TiDB 中 Index Lookup Join 具体实现方法和执行流程。Enjoy~
TiDB 源码阅读系列文章(八)基于代价的优化
本文是 TiDB 源码阅读系列文章的第八篇。内文会先简单介绍制定查询计划以及优化的过程,然后用较大篇幅详述在得到逻辑计划后的 Cost-Based Optimization(CBO)过程。
TiDB 源码阅读系列文章(七)基于规则的优化
本文是 TiDB 源码阅读系列文章的第七篇。在 TiDB 中,SQL 优化的过程可以分为逻辑优化和物理优化两个部分。本篇将主要关注逻辑优化。Enjoy ~
TiDB 源码阅读系列文章(六)Select 语句概览
在先前的 TiDB 源码阅读系列文章(四)中,我们介绍了 Insert 语句,想必大家已经了解了 TiDB 是如何写入数据,本篇文章介绍一下 Select 语句是如何执行的。Enjoy~
刘寅:TiDB 工具链和生态
本文为今年年初 PingCAP 商业产品团队负责人刘寅在 TiDB DevCon2018 上分享的 《 TiDB 工具链和生态》实录内容,文内详细介绍了 TiDB 的周边工具以及生态系统。enjoy~
TiDB 源码阅读系列文章(五)TiDB SQL Parser 的实现
本文为 TiDB 源码阅读系列文章的第五篇,主要对 SQL Parser 功能的实现进行了讲解。内容来自社区小伙伴——马震(GitHub ID:mz1999 )的投稿。
TiDB 源码阅读系列文章(三)SQL 的一生
本文为 TiDB 源码阅读系列文章的第三篇。本篇文章从 SQL 处理流程出发,介绍哪里是入口,对 SQL 需要做哪些操作,知道一个 SQL 是从哪里进来的,在哪里处理,并从哪里返回。
TiDB 源码阅读系列文章(一)序
在 TiDB DevCon2018 上,我们对外宣布了 TiDB 源码阅读分享活动,承诺对外发布一系列文章以及视频帮助大家理解 TiDB 源码。本文为本系列文章第一篇。
When TiDB Meets Spark
本文整理自 TiSpark 项目发起人马晓宇在 Strata Data Conference 上分享的《When TiDB Meets Spark》演讲实录。
Linearizability 一致性验证
上篇文章介绍了 TiDB 如何使用 Jepsen 来进行一致性验证,并且介绍了具体的测试案例,但是并没有对 Jepsen 背后的一致性验证算法做过多介绍。这篇文章将会深入 Jepsen 的核心库 knossos,介绍 knossos 库所涉及的 Linearizability(线性化)一致性验证算法。
TiSpark (Beta) 用户指南
TiSpark 是 PingCAP 推出的为了解决用户复杂 OLAP 需求的产品。借助 Spark 平台本身的优势,同时融合 TiKV 分布式集群的优势,和 TiDB 一起为用户一站式解决 HTAP (Hybrid Transactional/Analytical Processing)需求。 TiSpark 依赖 TiKV 集群和 PD 的存在。当然,TiSpark 也需要你搭建一个 Spark 集群。本文简单介绍如何部署和使用 TiSpark。
PAX:一个 Cache 友好高效的行列混存方案
今年,Spanner 终于发了另一篇 Paper,Spanner - Becoming a SQL System,里面提到 Spanner 使用了一种新的存储格式 - Ressi,用来支持 OLTP 和 OLAP。在 Ressi 里面,使用了 PAX 来组织数据。因为 TiDB 定位就是一个 HTAP 系统,所以我也一直在思考在 TiKV 这层如何更好的存储数据,用来满足 HTAP 的需要,既然 Spanner 使用了 PAX,那么就有研究的必要了。
深入了解 gRPC:协议
经过很长一段时间的开发,TiDB 终于发了 RC3。RC3 版本对于 TiKV 来说最重要的功能就是支持了 gRPC,也就意味着后面大家可以非常方便的使用自己喜欢的语言对接 TiKV 了。gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必要的,这里先简单介绍一下 HTTP/2 相关的知识,然后再介绍下 gRPC 是如何基于 HTTP/2 构建的。
三篇文章了解 TiDB 技术内幕 - 谈调度
任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外。前两篇文章介绍了 TiKV、TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都是大家看得见的东西。在这两个组件的后面,还有一个叫做 PD(Placement Driver)的组件,虽然不直接和业务接触,但是这个组件是整个集群的核心,负责全局元信息的存储以及 TiKV 集群负载均衡调度。本篇文章介绍一下这个神秘的模块。这部分比较复杂,很多东西大家平时不会想到,也很少在其他文章中见到类似的东西的描述。我们还是按照前两篇的思路,先讲我们需要什么样的功能,再讲我们如何实现,大家带着需求去看实现,会更容易的理解我们做这些设计时背后的考量。
工欲性能调优,必先利其器(1)
最近在排查 TiDB 性能问题的时候,通过工具发现了一些问题,觉得有必要记录一下,让自己继续深刻的去理解相关工具的使用,也同时让同学们对类似问题的时候别再踩坑。
三篇文章了解 TiDB 技术内幕 - 说计算
上一篇介绍了 TiDB 如何存储数据,也就是 TiKV 的一些基本概念。本篇将介绍 TiDB 如何利用底层的 KV 存储,将关系模型映射为 Key-Value 模型,以及如何进行 SQL 计算。
三篇文章了解 TiDB 技术内幕 - 说存储
数据库、操作系统和编译器并称为三大系统,可以说是整个计算机软件的基石。其中数据库更靠近应用层,是很多业务的支撑。这一领域经过了几十年的发展,不断的有新的进展。很多人用过数据库,但是很少有人实现过一个数据库,特别是实现一个分布式数据库。了解数据库的实现原理和细节,一方面可以提高个人技术,对构建其他系统有帮助,另一方面也有利于用好数据库。研究一门技术最好的方法是研究其中一个开源项目,数据库也不例外。单机数据库领域有很多很好的开源项目,其中 MySQL 和 PostgreSQL 是其中知名度最高的两个,不少同学都看过这两个项目的代码。但是分布式数据库方面,好的开源项目并不多。 TiDB 目前获得了广泛的关注,特别是一些技术爱好者,希望能够参与这个项目。由于分布式数据库自身的复杂性,很多人并不能很好的理解整个项目,所以我希望能写一些文章,自顶向下,由浅入深,讲述 TiDB 的一些技术原理,包括用户可见的技术以及大量隐藏在 SQL 界面后用户不可见的技术点。
基于 Tile 连接 Row-Store 和 Column-Store
在之前的 Kudu 的文章里面已经提到过,行列混存是一个非常有意思的研究方向,因为不同的存储方式有不同的针对应用场景,但作为技术人员,折腾是天性,所以大家都在研究如何融合行存和列存,让一个服务能尽量满足大部分应用需求,而这也是 TiDB 在努力的方向。
Kudu - 一个融合低延迟写入和高性能分析的存储系统
Kudu 是一个基于 Raft 的分布式存储系统,它致力于融合低延迟写入和高性能分析这两种场景,并且能很好的嵌入到 Hadoop 生态系统里面,跟其他系统譬如 Cloudera Impala,Apache Spark 等对接。
TiKV 功能介绍 - Raft 的优化
在分布式领域,为了保证数据的一致性,通常都会使用 Paxos 或者 Raft 来实现。但 Paxos 以其复杂难懂著称,相反 Raft 则是非常简单易懂,所以现在很多新兴的数据库都采用 Raft 作为其底层一致性算法,包括我们的 TiKV。
TiDB 的正确使用姿势
最近这几个月,特别是 TiDB RC1 发布后,越来越多的用户已经开始测试起来,也有很多朋友已经在生产环境中使用,我们这边也陆续的收到了很多用户的测试和使用反馈。非常感谢各位小伙伴和早期用户的厚爱,而且看了这么多场景后,也总结出了一些 TiDB 的使用实践 (其实 Spanner 的最佳实践大部分在 TiDB 中也是适用的,MySQL 最佳实践也是),也是借着 Google Cloud Spanner 发布的东风,看了一下 Spanner 官方的一些最佳实践文档,写篇文章讲讲 TiDB 以及分布式关系型数据库的一些正确的使用姿势,当然,时代也在一直发展,TiDB 也在不停的进化,这篇文章基本上只代表近期的一些观察。
TiKV 功能介绍 - Lease Read
在 TiKV 里面,从最开始的 Raft log read,到后面的 Lease Read,我们一步一步的在保证线性一致性的情况下面改进着性能。后面,我们会引入更多的一致性测试 case 来验证整个系统的安全性,当然,也会持续的提升性能。
TiKV 功能介绍 - PD Scheduler
在前面的文章里面,我们介绍了 PD 一些常用功能,以及它是如何跟 TiKV 进行交互的,这里,我们重点来介绍一下 PD 是如何调度 TiKV 的。
TiKV 功能介绍 - Placement Driver
Placement Driver (后续以 PD 简称) 是 TiDB 里面全局中心总控节点,它负责整个集群的调度,负责全局 ID 的生成,以及全局时间戳 TSO 的生成等。PD 还保存着整个集群 TiKV 的元信息,负责给 client 提供路由功能。
TiKV 源码解析系列 - multi-raft 设计与实现
本文档主要面向 TiKV 社区开发者,主要介绍 TiKV 的系统架构,源码结构,流程解析。目的是使得开发者阅读文档之后,能对 TiKV 项目有一个初步了解,更好的参与进入 TiKV 的开发中。
TiKV 源码解析系列 - 如何使用 Raft
本系列文章主要面向 TiKV 社区开发者,重点介绍 TiKV 的系统架构,源码结构,流程解析。目的是使得开发者阅读之后,能对 TiKV 项目有一个初步了解,更好的参与进入 TiKV 的开发中。需要注意,TiKV 使用 Rust 语言编写,用户需要对 Rust 语言有一个大概的了解。另外,本系列文章并不会涉及到 TiKV 中心控制服务 Placement Driver(PD) 的详细介绍,但是会说明一些重要流程 TiKV 是如何与 PD 交互的。TiKV 是一个分布式的 KV 系统,它采用 Raft 协议保证数据的强一致性,同时使用 MVCC + 2PC 的方式实现了分布式事务的支持。
TiKV 的 MVCC(Multi-Version Concurrency Control)机制
事务隔离在数据库系统中有着非常重要的作用,因为对于用户来说数据库必须提供这样一个“假象”:当前只有这么一个用户连接到了数据库中,这样可以减轻应用层的开发难度。但是,对于数据库系统来说,因为同一时间可能会存在很多用户连接,那么许多并发问题,比如数据竞争(data race),就必须解决。在这样的背景下,数据库管理系统(简称 DBMS)就必须保证并发操作产生的结果是安全的,通过可串行化(serializability)来保证。
Percolator 和 TiDB 事务算法
本文先概括的讲一下 Google Percolator 的大致流程。Percolator 是 Google 的上一代分布式事务解决方案,构建在 BigTable 之上,在 Google 内部用于网页索引更新的业务。TiDB 的事务模型沿用了 Percolator 的事务模型。
解析 TiDB 在线数据同步工具 Syncer
TiDB 是一个完全分布式的关系型数据库,从诞生的第一天起,我们就想让它来兼容 MySQL 语法,希望让原有的 MySQL 用户 (不管是单机的 MySQL,还是多机的 MySQL Sharding) 都可以在基本不修改代码的情况下,除了可以保留原有的 SQL 和 ACID 事务之外,还可以享受到分布式带来的高并发,高吞吐和 MPP 的高性能。
TiDB 作为 MySQL Slave 实现实时数据同步
由于 TiDB 本身兼容绝大多数的 MySQL 语法,所以对于绝大多数业务来说,最安全的切换数据库方式就是将 TiDB 作为现有数据库的从库接在主 MySQL 库的后方,这样对业务方实现完全没有侵入性下使用 TiDB 对现有的业务进行备份,应对未来数据量或者并发量增长带来的单点故障风险,如需上线 TiDB,也只需要简单的将业务的主 MySQL 地址指向 TiDB 即可。
回到过去,找回遗失的珍宝 - TiDB 的历史读功能
数据作为业务的核心,关系着整个业务的生死,所以对于数据库来说,数据的安全性是放在首位的,从宏观角度来看,安全性不仅仅在于的数据库本身足够稳定不会主动的丢失数据,有的时候更是对业务本身甚至人为失误造成损失是否有足够且便捷的应对方案,例如在游戏行业中经常遇到的反作弊(作弊玩家回档)问题,对于金融业务的审计需求等等,如果在数据库层面上提供相关机制,会让业务开发的工作量和复杂度减少很多。
TiKV 事务模型概览,Google Spanner 开源实现
随着时代的发展,应用和数据的规模越来越大。然而在这个一切都可以水平扩展的时代,你会发现,大多数应用的最下层的关系型数据库,竟然难以找到一个优雅易用的水平扩展解决方案,一直以来不得不依赖静态 Sharding ,牺牲掉事务,然后在业务层各种 Workarounds。作为后端开发者应该深有体会。
基于 Raft 构建弹性伸缩的存储系统的一些实践
最近几年来,越来越多的文章介绍了 Raft 或者 Paxos 这样的分布式一致性算法,且主要集中在算法细节和日志同步方面的应用。但是呢,这些算法的潜力并不仅限于此,基于这样的分布式一致性算法构建一个完整的可弹性伸缩的高可用的大规模存储系统,是一个很新的课题,我结合我们这一年多以来在 TiKV 这样一个大规模分布式数据库上的实践,谈谈其中的一些设计和挑战。
TiDB 中的子查询优化技术
子查询优化一直是 SQL 查询优化中非常难的一部分,尤其是关联子查询的改写。TiDB 为了兼容 MySQL,允许用户在任何位置编写子查询。对于非关联子查询,TiDB 会对其进行提前求值,对于关联子查询,TiDB 会尽可能的对其进行去关联化,例如改写成 SemiJoin。本文会重点介绍 TiDB 对关联子查询的优化手段。
TiDB 下推 API 实现细节 - Union Scan
TiDB 集群的架构分为上层的 SQL 层和底层的 KV 层,SQL 层通过调用 KV 层的 API 读写数据,由于 SQL 层的节点和 KV 层节点通常不在一台机器上,所以,每次调用 KV 的 API 都是一次 RPC, 而往往一个普通的 Select 语句的执行,需要调用几十到几十万次 KV 的接口,这样的结果就是性能非常差,绝大部分时间都消耗在 RPC 上。为了解决这个问题,TiDB 实现了下推 API,把一部分简单的 SQL 层的执行逻辑下推到 KV 层执行,让 KV 层可以理解 Table 和 Column,可以批量读取多行结果,可以用 Where 里的 Expression 对结果进行过滤, 可以计算聚合函数,大幅减少了 RPC 次数和数据的传输量。
京公网安备 11010802035112 号