基于 Chaos Mesh® 和 Argo 打造分布式测试平台

本文介绍我们是如何在 Chaos Mesh 和 Argo 的基础上打造自己的自动化测试平台 TiPocket],实现完全自动化的混沌测试,构成混沌测试完整闭环。

基于 TiDB 开源社区的友邻合作伙伴体系构建

2020 年 PingCAP 合作伙伴生态体系构建全面启动,基于 TiDB 社区,秉承开放平等的全新社区化合作伙伴生态理念,产业生态合作、解决方案合作、联合技术中心等众多计划百花齐放。

TiDB 异构数据库复制最佳实践

纵观现有业务系统的分布式改造,其中一个难点在于数据库的迁移,本文将分享我司在多年的实践中积攒的大量异构平台迁移经验,以及数据库复制技术的更多应用场景。

TiDB 金融级备份及多中心容灾

依托于整个工程研发团队、QA 测试团队,以及所打造和拥有的强大的测试体系、TiDB 产品的容灾灾备一系列高可用及灾备容灾机制,我们能够为银行、保险、证券等金融客户提供完善的、可靠的、放心的、金融级的分布式数据库服务。

从马车到电动车,TiDB 部署工具变形记

在部署易用性方面,TiDB 开发者经过诸多探索和尝试,经过了命令行时代、Ansible 时代,终于在 TiDB 4.0 发布了新一代具有里程碑意义的解决方案——TiUP。

刘奇:当今一切都要更实时、更弹性、更简单,TiDB 就是这样的基础设施

TiDB 发展到今天,已经不仅仅是一个数据库产品,它已经是很多系统的基石,作为一个基础设施的存在。

TiDB 4.0:The Leading Real-Time HTAP Database is Ready for Cloud

TiDB 4.0 终于迎来 GA 版本,这是 TiDB「面向未来的数据库」道路上面的一个重要的里程碑。

开发者 x 用户联手“打怪升级”,易用性挑战赛& 4.0 捉“虫”竞赛完结!

所有参赛选手的点滴成果都已经汇聚到了 TiDB 产品中,TiDB 因你们的贡献而变得更好、更强大!

TiKV Committer 聂殿辉:开源不仅仅是开放源代码,更是一种态度和沟通方式

“我对 TiDB 社区的整体印象用一句话概括就是:很专业,又很有人情味。”

打造未来的数据库,不一定要写代码? TiDB 4.0 捉“虫”竞赛等你来战

赛程即将进入下半场,战况愈发激烈,我们总结了上半场的大事件快来看看吧~

赛程过半,谁在让 TiDB 变得更好用?

三月初,围绕着这 20 个呼声最高的需求,我们在社区启动了 TiDB 易用性挑战赛。赛事开启后,大家可是百花齐放,百家争鸣。目前赛程已经过半,我们先来看看战绩吧!

为啥 TiFlash 又变快了?

短短几周时间,每次 TiFlash 的版本更新都会带来新的性能的改进,速度越来越快

未来数据库应具备什么核心能力?

上周六,我们开启了 The Future of Database 系列 的第一期直播,我司 CTO 黄东旭及 Engineering VP 申砾畅聊了“未来的数据库会是什么样?”这个颇具想象力的话题。这是第一期直播的部分文字&视频回顾。

左手尝鲜、右手周边?TiDB 4.0 捉“虫"竞赛来袭!

邀请社区小伙伴参与一起为 TiDB 全球社区建设添砖加瓦,让 TiDB 新版本给大家带来更好的体验!

TiDB 4.0 新特性尝鲜指南

在 TiDB 4.0 中我们实现了 很多具有里程碑意义的功能,这里为大家列一份「新特性尝鲜指南」。

聊聊数据库的未来,写在 PingCAP 成立五周年之际

我们要造的是一个真正能作为整个系统的 Single Source of Truth 的基础软件。

The Overview of TiDB 4.0

4 月 8 日是 PingCAP 成立五周年的日子,我们也在这一天发布了具有里程碑意义的 TiDB 4.0 首个 RC 版本。

TiDB 4.0 新特性前瞻(四)图形化诊断界面

TiDB 4.0 新提供 TiDB Dashboard 图形化界面,内置各种有力工具方便 DBA 同学诊断、监视和管理集群。

TiDB 4.0 新特性前瞻(三)再也不用担心我的 SQL 突然变慢了

一条本来跑得好好的 SQL 突然变成了慢查询,怎么办?

TiKV 源码解析系列文章(十八)Raft Propose 的 Commit 和 Apply 情景分析

raft-rs 实现了 Raft Leader election 和 Log replication 等核心功能,而消息的发送、接收、应用到状态机等操作则需要使用者自行实现,本文将要介绍的就是 TiKV 中这些部分的处理过程。

TiFlash:并非另一个 T + 1 列存数据库

TiFlash 是配合 TiDB 体系的列存引擎,它和 TiDB 无缝结合,在线 DDL、无缝扩容、自动容错等等方便运维的特点也在 TiFlash 中得到继承,此外,TiFlash 可以实时与行存保持同步。

TiDB 4.0 新特性前瞻(二)白话“悲观锁”

如果说在 TiDB 3.0 中,悲观锁是 “千呼万唤始出来,犹抱琵琶半遮面”。那么在 TiDB 4.0 中,悲观锁在经历了市场与时光的考验后,无论是性能还是稳定性都能够 “轻拢慢撚抹复挑,初为《霓裳》后《六幺》”。

TiKV Committer 庄天翼:只要能提升 Codebase 质量,就值得提交 PR

“参与社区贡献,除了增加了 Rust 使用经验和真正用于生产的数据库开发经验,同时也认识了很多人,扩大了社交圈,让我学到了很多东西。”

Hi,你有一份 TiDB 易用性挑战赛「捞分指南」请查收

我们简单总结了一些捞分技巧,希望能够帮助大家快速上手,追上这些排名靠前的参赛选手们。

What’s New in TiDB 4.0.0

TiDB 4.0 版本是一个让人兴奋的版本,我们提供了非常多有用、有趣的特性,本文将带领大家对这些有用、有趣的特性作一个概括性的讲述。

历时 48 小时,开源电子书<TiDB in Action>第一版完成!

从上周五晚 21:00 开始,历时 48 小时,共有 102 位来自社区的作者参与,截止周日 21:00,总计产生了 421 次 Commit,199 个 PR,最终开源电子书 <TiDB in Action> 第一版诞生。

一位 Rust 开发者的 Go 初体验

Go 是一种简单、小巧、令人愉悦的语言。它也有一些犄角旮旯,但绝大部分是经过精心设计的。它的学习速度令人难以置信,并且规避了其他语言中一些不那么广为人知的特性。

TiDB Contributor 人数突破 400,有关开源理想,我们同在!

和一群志同道合的朋友一起做酷且正确的事情,哪怕它是困难的、甚至曾被人认为是不可能的。但,让世界变得更美好,不正是我们踏入开源世界的初衷吗?

一个疯狂的念头:48 小时写一本书,来一次开源社区的行为艺术

既然都是做分布式系统的,为什么不尝试下「分布式写书」?TiDB 的社区里有那么多身怀绝技的朋友,社区里也积赞了无数的内容,我们只是需要一个契机将这些内容串联起来。

TiDB 易用性挑战赛开启:解决用户的痛点,让 TiDB 更易用!

TiDB 挑战赛第二季今天正式开启,赛程持续 3 个月,本赛季将围绕“提升 TiDB 的易用性”展开。考虑到用户们对 TiDB 落地实操中的“易用性”有深刻的体验,我们特地征求了一波 TiDB User Group(TUG)的意见。

Rust 编译模型之殇

许多人抱怨构建的时间太长。有时,在开发模式下完全重新构建需要花费 15 分钟,而在发布模式则需要 30 分钟。

积聚社区力量,让 Talent Plan 来一次升级吧!

欢迎大家来“试玩”并提供建议、贡献自己的智慧,一起来打造这门课程,帮助更多社区伙伴们学习、成长!

如何做到 10T 集群数据安全备份、1GB/s 快速恢复?

TiDB 目前可以满足超大集群的备份恢复的需求,经过测试,10T 数据的备份恢复速度可以达到 GB/s 级别。这得益于我们研发的分布式备份恢复工具 Backup&Restore That Scales (BR)。

TiDB Binlog 源码阅读系列文章 (九)同步数据到下游

同步数据这一步重要操作由 Drainer 模块支持,它可以将 binlog 同步到 TiDB / MySQL / Kafka / File (增量备份)等下游组件

我眼中的分布式系统可观测性

在Cloud Native 和微服务的世界里,大家正在讲“系统的可观测性”放在更高的位置。

TiDB 4.0 新特性前瞻(一)拍个 CT 诊断集群热点问题

在 4.0 版本中 TiDB 也实现了 Key Visualizer 功能。现在,我们可以很轻松地给集群拍个 “CT”,快速直观地观察集群整体热点及流量分布情况。

原来提升一个数据库的性能并没有那么难!TiDB 性能挑战赛完结撒花

性能挑战赛已经圆满落幕,最终的积分排行也新鲜出炉,选手们的参赛成果让人非常惊喜,让我们回顾一下选手们是如何在“TiDB 性能提升”之路上,过五关斩六将的吧~

为了证明它的速度,我们一口气对比了 Oracle、MySQL、MariaDB、Greenplum、Apache Spark

借助 TiFlash 的一致性数据同步特型,用户可否以一个优异的速度直接对实时数据进行分析呢?

一两个节点、一两条命令,轻松让 TiDB 分析场景无痛提速十倍

TiDB 3.1 推出的 TiFlash 产品,可以让你的 AP 查询提升数倍,不需要复杂的操作,无需多少节点,轻轻松松。

TiDB Binlog 源码阅读系列文章(八)Loader Package 介绍

本文将从 Loader 的接口定义开始,由上至下的介绍 Loader 将 binlog 写入下游数据库的过程。

TiLightning —— Lightning + TiSpark 轻松解除数据导入限制

TiLightning 可以轻松解除数据导入限制,解决了大数据生态系统和 TiDB 之间的鸿沟。

TiKV 源码解析系列文章(十七)raftstore 概览

本文以 3.0 版本代码为例,讲述 raftstore 源码中的关键定义和设计。

分布式系统 in 2010s :测试和运维

本文为「分布式系统 in 2010s」 系列最终篇,这次我们来聊一聊测试和运维。

TiExciting —— 让 TiDB 部署轻松简单

本篇文章将介绍在 Hackathon 获得三等奖的 TiExciting 项目,它可以帮助更多人用上 TiDB 并改善运维的复杂度。

分布式系统 in 2010s :硬件的进化

本文为「分布式系统 in 2010s」 系列第三篇,这次我们来聊一聊硬件的进化。

汇聚能量,元气弹发射 | PingCAP Special Week - Tools matter 有感

2019 年第四季度,PingCAP Special Week 的主题是 Tools matter,本篇文章将介绍本次 SW 都有哪些不错的成果。

Chaos Mesh - 让应用跟混沌在 Kubernetes 上共舞

我们将混沌相关实现从自动化测试平台中抽离出来,作为 Chaos Mesh 的最初原型,并经过重新设计和完善,最终于 Github 上开源。

分布式系统 in 2010s :软件构建方式和演化

本文为「分布式系统 in 2010s」系列第二篇,内容为软件构建的方式和演化。

分布式系统 in 2010s :存储之数据库篇

无论哪个时代,存储都是一个重要的话题,今天先聊聊数据库。

TiDB Binlog 源码阅读系列文章(七)Drainer server 介绍

本文介绍了 Drainer server 的实现。

效率 10x!打造运维 TiDB 的瑞士军刀

为解决分布式数据库的运维难题,本文将介绍如何用 SQL 管理整个 TiDB 集群。

直击备份恢复的痛点:基于 TiDB Binlog 的快速时间点恢复

基于 TiDB Binlog 的 Fast-PITR (Fast point in time recovery),即基于 TiDB Binlog 的快速时间点恢复,实现了基于 TiDB Binlog 的逐级 merge,以最小的代价实现快速 PITR,解决了现有 TiDB 原生备份恢复方案的一些痛点问题。

从大数据到数据库

作为一个从大数据转行做数据库的人,我自以为能感受到两个世界的异同。本篇文章,斗胆聊下这个话题,以及对未来的看法。

TiKV 源码解析系列文章(十六)TiKV Coprocessor Executor 源码解析

本文将介绍下推算子的执行流程并分析下推算子的部分实现细节,加深大家对 TiKV Coprocessor 的理解。

拥抱 Elasticsearch:给 TiDB 插上全文检索的翅膀

我们尝试为 TiDB 引入“全文检索”功能,为存储在 TiDB 中的文本数据提供随时随地搜索的能力。

赛程刚过 1/3,什么操作让性能提升 150+ 倍?

TiDB 性能挑战赛的赛程刚过 1/3,参赛选手们已经取得了十分耀眼的阶段性成果~让我们来看看吧!

你呼呼大睡,机器人却在找 bug?

复杂系统的测试是一件艰难、艰苦和艰巨的事情,可不可以让程序自动帮我们查 bug?

TiDB Binlog 源码阅读系列文章(六)Pump Storage 介绍(下)

本文介绍了 Pump Storage 的两个重要组件 `valueLog`,`slowChaser` 的主要功能与具体实现。

流量和延迟减半!挑战 TiDB 跨数据中心难题

我们针对 TiDB 跨数据中心方案做了一些优化,使得跨地域 SQL 查询延迟下降 50%,跨节点消息数减半,即网络流量减半。

开源社区怎么玩?明星项目 TiKV 的 Maintainer 这样说……

“当你持续的认真投入到开源后,项目和社区就会产生双向的交流,不再只是你单向的投入,社区也会给予你反哺,这时就会形成正向循环,对项目发展会起到非常大的推动作用。”

TiKV Engine SIG 成立,硬核玩家们看过来!

TiKV Engine SIG 主要职责是对 TiKV 的存储引擎的未来发展进行讨论和规划,并进行相关开发和维护。期待社区伙伴们的支持和贡献~

揭秘 TiDB 新优化器:Cascades Planner 原理解析

本文将为大家深入介绍 TiDB 新的优化器——Cascades Planner 的框架及原理。

十分钟成为 Contributor 系列 | 为 Cascades Planner 添加优化规则

我们将这个系列再向着数据库的核心前进一步,挑战一下「为 TiDB 的优化器增加优化规则」,带大家初步体验一下可以对查询的执行时间产生数量级影响的优化器的魅力。

TiDB 最佳实践系列(六)HAProxy 的使用

TiDB Server 作为无限水平扩展的无状态计算节点,需要能提供稳定且高性能的负载均衡组件用对外统一的接口地址来提供服务,而 HAProxy 在负载均衡的生态中占有很大的市场。本文将介绍在 TiDB 下使用 HAProxy 的最佳实践。

TiKV 源码解析系列文章(十五)表达式计算框架

本文将介绍 Coprocessor 中表达式计算框架的源码架构,带大家看看 SQL 中的表达式是如何在 Coprocessor 中执行的。

Unified Thread Pool | Hackathon 2019 优秀项目介绍

Unified Thread Pool 项目实现了在 TiKV 中使用一个统一的自适应线程池处理读请求,能够显著提升性能,并可预测性地限制大查询对小请求的干扰,最终在 TiDB Hackathon 2019 中斩获一等奖。

TiDB-Wasm 原理与实现 | Hackathon 优秀项目介绍

TiDB-Wasm 项目实现了将 TiDB 编译成 Wasm 运行在浏览器里,让用户无需安装就可以使用 TiDB,最终获得了 TiDB Hackathon 2019 的二等奖。

如何玩转 TiDB 性能挑战赛?本文教你 30 分钟快速上手拿积分!

本文以 TiKV 性能挑战赛 Easy 级别任务“PCP:Migrate functions from TiDB”为例,教大家如何快速又正确地完成这个任务。

TiDB 最佳实践系列(五)Java 数据库应用开发指南

本文将从 Java 数据库交互组件开发的角度出发,介绍各组件的推荐配置和推荐使用方式,希望能帮助 Java 开发者在使用 TiDB 时能更好的发挥数据库性能。

让数据库运行在浏览器里?TiDB + WebAssembly 告诉你答案

今天的 TiDB 可以直接运行在浏览器本地。打开浏览器,你可以直接创建数据库,对数据进行增删改查。关掉浏览器,一切都消失了,干净绿色环保。

TiKV 源码解析系列文章(十四)Coprocessor 概览

本文将简要介绍 TiKV Coprocessor 的基本原理,面向想要了解 TiKV 数据读取执行过程的同学,同时也面向想对该模块贡献代码的同学。

高效编排有状态应用——TiDB 的云原生实践与思考

本文将以 TiDB 与 Kubernetes 的“爱恨情仇”为例,总结有状态应用走向云原生的工程最佳实践。

TiKV 项目首个 SIG 成立,一起走上 Contributor 进阶之路吧!

今天是 1024 程序员节,我们正式成立 TiKV 项目的首个 SIG —— Coprocessor SIG,希望对 TiKV 项目感兴趣的小伙伴们都能加入进来,探索硬核的前沿技术,交流切磋,一起走上 Contributor 的进阶之路!

TiDB 最佳实践系列(四)海量 Region 集群调优

本文将介绍 TiKV 核心模块 Raftstore 的处理流程以使大家更好得理解海量 Region 导致性能问题的根源,以及针对这种情况的一些优化手段。

新架构、新角色:TiDB Community Upgrade!

TiDB 社区已经逐渐成熟,但是随着社区的发展壮大,我们逐渐感受到了现在社区架构上的一些不足。经过一系列的思考和总结,我们决定升级和调整目前社区组织架构,引入更多的社区角色和社区组织,以便更好的激发社区活力,维护积极健康的社区环境。

TiDB 最佳实践系列(三)乐观锁事务

本文我们将深入浅出介绍 TiDB 乐观事务原理,并给出多种场景下的最佳实践,希望大家能够从中收益。同时,也欢迎大家给我们提供相关的优化建议,参与到我们的优化工作中来。

Hands-on! 如何给 TiDB 添加新系统表

“TiDB,你已经是一个成熟的数据库了,该学会用自己的 SQL 查自己的状态了。”

TiDB 最佳实践系列(二)PD 调度策略最佳实践

本文将详细介绍 PD 调度系统的原理,并通过几个典型场景的分析和处理方式,分享调度策略的最佳实践和调优方法,帮助大家在使用过程中快速定位问题。

AutoTiKV:基于机器学习的数据库调优

如果有一个自动 tuning 的方案就可以大大减少调优的人力成本,同时也可能在调优的过程中,发现一些人工想不到的信息。我们从 AutoML 中得到启发,希望能用 Automated Hyper-parameter Tuning 中的一些方法来对数据库参数进行自动调优。

TiDB Binlog 源码阅读系列文章(五)Pump Storage 介绍(上)

在上篇文章中,我们主要介绍了 Pump Server 的上线过程、gRPC API 实现、以及下线过程和相关辅助机制,其中反复提到了 Pump Storage 这个实体。本文就将介绍 Pump Storage 的实现。

十分钟成为 Contributor 系列 | TiDB 向量化表达式活动第二弹

在上篇文章中,我们介绍了 TiDB 如何实现表达式的向量化优化,以及社区同学如何参与这项工程。两周过去了,我们收到了很多来自社区小伙伴们的建议和反馈,今天在这里和大家分享一下活动进展和这些建议及反馈。

TiKV Rust Client 迁移记 - futures 0.1 至 0.3

最近我将一个中小型的 crate 从 futures 库的 0.1 迁移至了 0.3 版本。过程本身不是特别麻烦,但还是有些地方或是微妙棘手,或是没有很好的文档说明。这篇文章里,我会把迁移经验总结分享给大家。

十分钟成为 Contributor 系列 | 助力 TiDB 表达式计算性能提升 10 倍

最近我们扩展了 TiDB 表达式计算框架,增加了向量化计算接口,初期的性能测试显示,多数表达式计算性能可大幅提升,部分甚至可提升 1~2 个数量级。为了让所有的表达式都能受益,我们需要为所有内建函数实现向量化计算。

从使用者到开发者,知乎参与 TiDB 社区背后的故事

“从前我们更多是站在使用者的角度从开源社区汲取养分,随着知乎技术架构和内部工程能力的成长,未来我们希望能够以更加积极主动的状态参与开源项目,回馈社区。”

如何高效利用 Grafana 监控分析 TiDB 指标

使用 TiDB Ansible 部署 TiDB 集群,会同时部署一套 Grafana + Prometheus 的监控平台,这套监控用来收集和展示 TiDB 集群各个组件和机器的 metric 信息,这些 metric 信息非常丰富,可以帮助使用者分析 TiDB 集群的状态以及 Trouble shooting。

一体化数据同步平台 DM 1.0 GA 发布

DM 在 TiDB DevCon 2019 上正式开源,经过半年多时间在大量用户、开发者的支持和反馈下,今天我们宣布 DM 1.0 GA 正式发布。

TiDB 最佳实践系列(一)高并发写入常见热点问题及规避方法

本文通过阐述一个高并发批量写入数据到 TiDB 的典型场景中,TiDB 中常见的问题,给出一个业务的最佳实践,避免业务在开发的时候陷入 TiDB 使用的 “反模式”。

TiKV 源码解析系列文章(十三)MVCC 数据读取

本文将介绍数据读取的流程。

TiDB + TiFlash : 朝着真 HTAP 平台演进

本篇文章介绍了关于 HTAP 数据库的一些思考,以及新组件 TiFlash 给 TiDB 带来的变化。

TiDB Binlog 源码阅读系列文章(四)Pump server 介绍

本文将继续介绍 Pump server 的实现,对应的源码主要集中在 TiDB Binlog 仓库的 pump/server.go 文件中。

TiDB 新特性漫谈:悲观事务

TiDB 在 3.0 中引入了一个实验性的新功能:悲观事务模型。这个功能也是千呼万唤始出来的一个功能。

TiDB 新特性漫谈:从 Follower Read 说起

关注 TiDB 的同学,最近可能注意到 TiKV 这边合并了一个不大不小的 PR,支持了一个特性叫做 Follower Read,看到这个功能被合并进主干我确实有点百感交集,还发了条朋友圈庆祝,因为我实在很喜欢这个特性。

TiKV 源码解析系列文章(十二)分布式事务

本文将更加深入地讲解 TiKV 的事务算法的原理和实现细节。

三十分钟成为 Contributor | 提升 TiDB Parser 对 MySQL 8.0 语法的兼容性

本次活动聚焦于语法兼容,提升 TiDB SQL Parser 对 MySQL 8.0 的语法支持。对于新的贡献者而言,除了能将理论知识运用到实践上以外,还可以从中体验参与一个开源项目的整体流程与规范。

TiDB Binlog 源码阅读系列文章(三)Pump client 介绍

本篇将介绍 Pump client,希望大家了解 TiDB 把 binlog 写到 Pump,以及输出数据的过程。

云上 TiDB 管理「利器」,TiDB Operator 1.0 GA 发布

开源后到现在的近一年内,我们一方面基于用户反馈不断打磨项目的易用性,另一方面通过严苛的稳定性测试持续提升可靠性。今天,我们自豪地宣布 TiDB Operator 1.0 GA 正式发布!

TiKV 源码解析系列文章(十一)Storage - 事务控制层

本文将为大家介绍 TiKV 源码中的 Storage 模块,它位于 Service 与底层 KV 存储引擎之间,主要负责事务的并发控制。TiKV 端事务相关的实现都在 Storage 模块中。

DM 源码阅读系列文章(十)测试框架的实现

本篇文章将从质量保证的角度来介绍 DM 测试框架的设计和实现,探讨如何通过多维度的的测试方法保证 DM 的正确性和稳定性。

DM 源码阅读系列文章(九)shard DDL 与 checkpoint 机制的实现

在本篇文章中,我们将对 shard DDL 同步机制以及 checkpoint 机制等进行详细的介绍,内容包括 shard group 的定义、shard DDL 的同步协调处理流程、checkpoint 机制以及与之相关的 safe mode 机制。

TiKV 源码解析系列文章(十)Snapshot 的发送和接收

TiKV 针对 Snapshot 收发场景做了特殊处理,解决了消息包过大会导致的一系列问题。

TiKV 源码解析系列文章(九)Service 层处理流程解析

之前的 TiKV 源码解析系列文章介绍了 TiKV 依赖的周边库,从本篇文章开始,我们将开始介绍 TiKV 自身的代码。本文重点介绍 TiKV 最外面的一层——Service 层。

TiDB Binlog 源码阅读系列文章(二)初识 TiDB Binlog 源码

本文介绍了 TiDB Binlog 相关源码仓库:tidb-tools 和 tidb-binlog,以及其中的目录,并且展示了如何启动测试集群。

TiDB 3.0 GA,稳定性和性能大幅提升

2019 年 6 月 28 日,TiDB 3.0 GA 正式发布,请跟随我们的脚步看看 TiDB 3.0 有什么样的惊喜。

DM 源码阅读系列文章(八)Online Schema Change 同步支持

本篇文章将会以 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 源码阅读系列文章(七)定制化数据同步功能的实现

本篇文章介绍了 DM 的定制化数据同步功能中库表路由(Table routing)、黑白名单(Black & white table lists)、列值转化(Column mapping)、binlog 过滤(Binlog event filter)四个主要功能的实现。

DM 源码阅读系列文章(六)relay log 的实现

本篇文章的内容包括 relay log 目录结构定义、relay log 数据的处理流程、主从切换支持、relay log 的读取等逻辑。

势高,则围广:TiDB 的架构演进哲学

我们更多时候是站在哲学层面思考整个公司的运转和 TiDB 这个产品的演进的思路。这些思路很多时候是大家看不见的,因为不是一个纯粹的技术层面或者算法层面的事情。

诊断修复 TiDB Operator 在 K8s 测试中遇到的 Linux 内核问题

我们在 K8s 中测试 TiDB Operator 时发现了两个 Linux 内核错误,这些错误已经困扰我们很长一段时间,并没有在整个 K8s 社区中彻底修复。经过广泛的调查和诊断,我们已经确定了处理这些问题的方法。

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 实现

本篇文章将会详细地介绍 DM 核心处理单元 Binlog replication,内容包含 binlog 读取、过滤、路由、转换,以及执行等逻辑。

TiDB Binlog 组件正式开源

为方便用户和开发者更加深入理解和使用 TiDB Binlog 组件,以及基于 TiDB Binlog 组件做二次开发用于更多的业务场景, TiDB 团队决定于 2019 年 5 月 6 日正式开源 TiDB Binlog 组件。

Golang Failpoint 的设计与实现

Failpoint 项目是 FreeBSD Failpoints 的 Golang 实现,允许在代码中注入错误或异常行为,并由环境变量或代码动态激活来触发这些异常行为。Failpoint 能用于各种复杂系统中模拟错误处理来提高系统的容错性、正确性和稳定性。

DM 源码阅读系列文章(四)dump/load 全量同步的实现

本文将详细介绍 dump 和 load 两个数据同步处理单元的设计实现,重点关注数据同步处理单元 interface 的实现,数据导入并发模型的设计,以及导入任务在暂停或出现异常后如何恢复。

TiKV 源码解析系列文章(六)raft-rs 日志复制过程分析

本文将对数据冗余复制的过程进行详细展开,特别是关于 snapshot 及流量控制的机制,帮助读者更深刻地理解 Raft 的原理。

DM 源码阅读系列文章(三)数据同步处理单元介绍

本篇文章将详细地介绍 DM 数据同步处理单元(DM-worker 内部用来同步数据的逻辑单元),包括数据同步处理单元实现了什么功能,数据同步流程、运行逻辑,以及数据同步处理单元的 interface 设计。

Kubernetes 中如何保证优雅地停止 Pod

很多场景下 PreStop Hook 并不能很好地完成需求,这篇文章就简单分析一下“优雅地停止 Pod”这回事儿。

TiKV 源码解析系列文章(五)fail-rs 介绍

本文为 TiKV 源码解析系列的第五篇,为大家介绍 TiKV 在测试中使用的周边库 fail-rs。

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 Data Migration (TiDB DM) 的整体架构,包括 TiDB DM 有哪些组件、各组件分别实现什么功能、组件之间交互的数据模型和 RPC 实现。

DM 源码阅读系列文章(一)序

本篇文章主要介绍了 DM 源码阅读的目的和源码阅读的规划,简单介绍了 DM 的源码结构和工具链。本文为本系列文章的第一篇。

TiKV 源码解析系列文章(四)Prometheus(下)

本篇将为大家介绍 rust-prometheus 的更多高级功能的实现原理。

TiKV 源码解析系列文章(三)Prometheus(上)

本篇将为大家介绍 rust-prometheus 的基础知识以及最基本的几个指标的内部工作机制。

The (Near) Future of Database

在 TiDB DevCon 2019 上,我司联合创始人兼 CTO 黄东旭分享了对数据库行业大趋势以及未来数据库技术的看法。

TiKV 源码解析系列文章(二)raft-rs proposal 示例情景分析

本文将以 raft-rs 的公共 API 作为切入点,介绍一般 proposal 过程的实现原理,让用户可以深刻理解并掌握 raft-rs API 的使用,以便用户开发自己的分布式应用,或者优化、定制 TiKV。

TiKV 源码解析系列文章(一)序

在 TiDB DevCon 2019 上,我们宣布启动 TiKV 源码系列分享,帮助大家理解 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 2019, Level Up!

2018 年对于 TiDB 和 PingCAP 来说是一个由少年向成年的转换的一年,如果用一个关键字来概括就是「蜕变」。

TiDB Ecosystem Tools 原理解读系列(三)TiDB Data Migration 架构设计与实现原理

TiDB Data Migration 是用于将数据从 MySQL/MariaDB 迁移到 TiDB 的工具。该工具既支持以全量备份文件的方式将 MySQL/MariaDB 的数据导入到 TiDB,也支持通过解析执行 MySQL/MariaDB binlog 的方式将数据增量同步到 TiDB。

TiDB 源码阅读系列文章(二十二)Hash Aggregation

本篇文章将介绍 TiDB 中 Hash Aggregation 的实现原理和细节。

十分钟成为 Contributor 系列 | 支持 AST 还原为 SQL

为了实现一些新特性,我们需要为 AST 实现可以还原为 SQL 文本的功能,这篇教程描述如何为 AST 节点添加该功能。首先介绍一些必需的背景知识,然后介绍实现 Restore() 函数的流程,最后会展示一个例子。

TiDB Ecosystem Tools 原理解读系列(二)TiDB-Lightning Toolset 介绍

TiDB-Lightning Toolset 是一套快速全量导入 SQL dump 文件到 TiDB 集群的工具集,适合在上线前用作迁移现有的大型数据库到全新的 TiDB 集群。

TiDB 源码阅读系列文章(二十一)基于规则的优化 II

本篇文章将介绍聚合消除、外连接消除和子查询优化等优化规则。

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 2.1 GA Release Notes

2018 年 11 月 30 日,TiDB 发布 2.1 GA 版。相比 2.0 版本,该版本对系统稳定性、性能、兼容性、易用性做了大量改进。

TiDB 开源社区指南(上)

本系列文章旨在帮助社区开发者了解 TiDB 项目的全貌,更好的参与 TiDB 项目开发。上篇会聚焦在社区参与者的角度,描述如何更好的参与 TiDB 项目开发。

PingCAP University · TiDB DBA 官方培训认证计划启动

PingCAP University 正式启动 TiDB DBA 官方培训认证计划。通过该计划,大家可以深度理解 TiDB 架构、原理及最佳实践,具备独立部署、运维和调优 TiDB 的能力;提升分布式计算和存储领域的技术前沿视野;获得来自 PingCAP 官方的认可,提升个人技术竞争力。

TiDB 源码阅读系列文章(二十)Table Partition

本篇文章主要介绍 Table Partition 在 TiDB 中的实现。

线性一致性和 Raft

本篇文章会讨论一下线性一致性和 Raft,以及 TiKV 针对前者的一些优化。

TiKV 是如何存取数据的

本文会详细的介绍 TiKV 是如何处理读写请求的。通过该文档,同学们会知道 TiKV 是如何将一个写请求包含的数据更改存储到系统,并且能读出对应的数据的。

TiDB 源码阅读系列文章(十九)tikv-client(下)

本文将继续介绍 tikv-client 里的两个主要的模块——负责处理分布式计算的 copIterator 和执行二阶段提交的 twoPhaseCommitter。

TiKV 集群版本的安全迁移

本文会详细介绍 TiKV 集群版本迁移的实现步骤,enjoy~

使用 TiKV 构建分布式类 Redis 服务

本文将介绍 Redis 的特性与不足,以及使用 TiKV 构建分布式类 Redis 服务的

TiDB 源码阅读系列文章(十八)tikv-client(上)

本文会详细介绍数据读写过程中 tikv-client 需要解决的几个具体问题,enjoy~

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 源码阅读系列文章(十五)Sort Merge Join

本篇文章主要介绍 Sort Merge Join 在 TiDB 中的实现,enjoy~

三十分钟成为 Contributor | 为 TiKV 添加 built-in 函数

手把手教你如何在三十分钟内成为 TiKV 项目的 Contributor。

TiDB 源码阅读系列文章(十四)统计信息(下)

本篇文章将介绍直方图和 Count-Min(CM) Sketch 的数据结构,然后介绍 TiDB 是如何实现统计信息的查询、收集以及更新的。

TiDB 源码阅读系列文章(十三)索引范围计算简介

本文将详细介绍 TiDB 是如何分析复杂的筛选条件,来得到这些条件在对应的索引上的逻辑区间范围(range)。

TiDB 源码阅读系列文章(十二)统计信息(上)

本篇文章将介绍统计信息基本概念、TiDB 的统计信息收集/更新机制以及如何用统计信息来估计算子代价。上篇侧重于介绍原理,下篇会结合原理介绍 TiDB 的源码实现。

TiDB 源码阅读系列文章(十一)Index Lookup Join

前两篇文章中介绍了 Chunk 和 Hash Join,本篇将继续介绍 TiDB 中 Index Lookup Join 具体实现方法和执行流程。Enjoy~

十问 TiDB :关于架构设计的一些思考

这篇文章是关于 TiDB 代表性“为什么”的 TOP 10,希望大家在了解了我们这些背后的选择之后,能更加纯熟的使用 TiDB,让它在适合的环境里更好的发挥价值。

TiDB 混沌工程实践:如何打造健壮的分布式系统?

本文分享了 TiDB 应用混沌工程的方法,介绍基于 K8s 自研的自动化测试平台 Schrodinger,并通过实际例子说明如何在 Schrodinger 里应用混沌来测试系统。

TiDB 源码阅读系列文章(十)Chunk 和执行框架简介

本文详细介绍了在 TiDB 2.0 中引入的 Chunk 及执行框架,enjoy~

TiDB 源码阅读系列文章(九)Hash Join

本文是 TiDB 源码阅读系列文章的第九篇。内文详细介绍了 TiDB Hash Join 的实现以及几种常见的问题,enjoy~

TiDB 源码阅读系列文章(八)基于代价的优化

本文是 TiDB 源码阅读系列文章的第八篇。内文会先简单介绍制定查询计划以及优化的过程,然后用较大篇幅详述在得到逻辑计划后的 Cost-Based Optimization(CBO)过程。

详解 | TiDB 2.0 GA is here!

经过半年时间,6 个 RC 版本,今天 TiDB 2.0 GA 版本正式发布。

TiDB 2.0 GA Release

2018 年 4 月 27 日,TiDB 发布 2.0 GA 版。相比 1.0 版本,对 MySQL 兼容性、系统稳定性、优化器和执行器做了很多改进。

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 源码阅读系列文章(四)Insert 语句概览

本文为 TiDB 源码阅读系列文章的第四篇。本篇文章会以 Insert 语句为例进行讲解,帮助读者理解前一篇文章。

TiDB 源码阅读系列文章(三)SQL 的一生

本文为 TiDB 源码阅读系列文章的第三篇。本篇文章从 SQL 处理流程出发,介绍哪里是入口,对 SQL 需要做哪些操作,知道一个 SQL 是从哪里进来的,在哪里处理,并从哪里返回。

TiDB 源码阅读系列文章(二)初识 TiDB 源码

本文为 TiDB 源码阅读系列文章的第二篇,第一篇文章介绍了 TiDB 整体的架构,本篇文章是一篇入门文档 enjoy~

TiDB 源码阅读系列文章(一)序

在 TiDB DevCon2018 上,我们对外宣布了 TiDB 源码阅读分享活动,承诺对外发布一系列文章以及视频帮助大家理解 TiDB 源码。本文为本系列文章第一篇。

TiDB 1.1 Beta Release

2018 年 2 月 24 日,TiDB 发布 1.1 Beta 版。该版本在 1.1 Alpha 版的基础上,对 MySQL 兼容性、系统稳定性做了很多改进。

TiDB 1.1 Alpha Release

2018 年 1 月 19 日,TiDB 发布 1.1 Alpha 版。该版本对 MySQL 兼容性、SQL 优化器、系统稳定性、性能做了大量的工作。

使用 Rust 构建分布式 Key-Value Store

构建一个分布式 Key-Value Store 并不是一件容易的事情,我们需要考虑很多的问题,首先就是我们的系统到底需要提供什么样的功能。本文将以我们开发的分布式 Key-Value TiKV 作为实际例子,来说明下我们是如何取舍并实现的。

写在 TiDB 1.0 发布之际 | 预测未来最好的方式就是创造未来

1.0 版本只是个开始,是新的起点,愿我们一路相扶,不负远途。

谈谈开源(一)

很多人的『开源』是一个比较时髦且有情怀的词汇,不少公司也把开源当做 KPI 或者是技术宣传的手段。但是在我们看来,大多数人开源做的并不好,大多数开源项目也没有被很好的维护。比如前一段时间微博上流传关于 Tengine 的讨论,一个优秀的开源项目不止是公布源代码就 OK 了,还需要后续大量的精力去维护,包括制定 RoadMap、开发新功能、和社区交流、推动项目在社区中的使用、对使用者提供一定程度的支持,等等。

When TiDB Meets Spark

本文整理自 TiSpark 项目发起人马晓宇在 Strata Data Conference 上分享的《When TiDB Meets Spark》演讲实录。

Linearizability 一致性验证

上篇文章介绍了 TiDB 如何使用 Jepsen 来进行一致性验证,并且介绍了具体的测试案例,但是并没有对 Jepsen 背后的一致性验证算法做过多介绍。这篇文章将会深入 Jepsen 的核心库 knossos,介绍 knossos 库所涉及的 Linearizability(线性化)一致性验证算法。

当 TiDB 遇上 Jepsen

本篇文章主要介绍 TiDB 是如何使用分布式一致性验证框架进行一致性验证的。

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-rs:从 C 到 Rust

上篇文章中,我们讲到 TiKV 为了支持 gRPC,我们造了个轮子 gRPC-rs,本篇文章会简要地介绍一下这个库。

十分钟成为 Contributor 系列 | 重构内建函数进度报告

为了方便社区同学更好地参与 TiDB 项目,本文一方面对继上一篇文章发布后参考社区的反馈对表达式计算框架所做的修改进行详细介绍,另一方面对尚未重写的 built-in 函数进行陈列。

TiDB Best Practice

本文档用于总结在使用 TiDB 时候的一些最佳实践,主要涉及 SQL 使用、OLAP/OLTP 优化技巧,特别是一些 TiDB 专有的优化开关。建议先阅读讲解 TiDB 原理的三篇文章(讲存储,说计算,谈调度),再来看这篇文章。

工欲性能调优,必先利其器(2)- 火焰图

本篇文章将介绍一下,我们在 TiKV 性能调优上面用的最多的工具 - 火焰图。

十分钟成为 Contributor 系列 | 为 TiDB 重构 built-in 函数

为了加速表达式计算速度,最近我们对表达式的计算框架进行了重构,这篇教程为大家分享如何利用新的计算框架为 TiDB 重写或新增 built-in 函数。

深入了解 gRPC:协议

经过很长一段时间的开发,TiDB 终于发了 RC3。RC3 版本对于 TiKV 来说最重要的功能就是支持了 gRPC,也就意味着后面大家可以非常方便的使用自己喜欢的语言对接 TiKV 了。gRPC 是基于 HTTP/2 协议的,要深刻理解 gRPC,理解下 HTTP/2 是必要的,这里先简单介绍一下 HTTP/2 相关的知识,然后再介绍下 gRPC 是如何基于 HTTP/2 构建的。

来自 PingCAP CEO 的信:说在 B 轮融资完成之际

平时技术说得多,今天说点走心的。

使用 Ansible 安装部署 TiDB

作为一个分布式系统,在多个节点分别配置安装服务会相当繁琐。Ansible 是基于 Python 的自动化运维工具,糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能,而且使用简单,仅需在管理工作站上安装 Ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端。选用自动化工具 Ansible 来批量的安装、配置、部署 TiDB 。本文介绍如何通过 Ansible 工具来批量安装,使整个过程简单化。

三篇文章了解 TiDB 技术内幕 - 谈调度

任何一个复杂的系统,用户感知到的都只是冰山一角,数据库也不例外。前两篇文章介绍了 TiKV、TiDB 的基本概念以及一些核心功能的实现原理,这两个组件一个负责 KV 存储,一个负责 SQL 引擎,都是大家看得见的东西。在这两个组件的后面,还有一个叫做 PD(Placement Driver)的组件,虽然不直接和业务接触,但是这个组件是整个集群的核心,负责全局元信息的存储以及 TiKV 集群负载均衡调度。本篇文章介绍一下这个神秘的模块。这部分比较复杂,很多东西大家平时不会想到,也很少在其他文章中见到类似的东西的描述。我们还是按照前两篇的思路,先讲我们需要什么样的功能,再讲我们如何实现,大家带着需求去看实现,会更容易的理解我们做这些设计时背后的考量。

工欲性能调优,必先利其器(1)

最近在排查 TiDB 性能问题的时候,通过工具发现了一些问题,觉得有必要记录一下,让自己继续深刻的去理解相关工具的使用,也同时让同学们对类似问题的时候别再踩坑。

【Infra Meetup No.45】Rust in TiKV

三篇文章了解 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 等对接。

演讲实录|黄东旭:Cloud-Native 的分布式数据库架构与实践

4 月 19 日,我司 CTO 黄东旭同学在全球云计算开源大会上,发表了《Cloud-Native 的分布式数据库架构与实践》主题演讲,以下为演讲实录。

如何从零开始参与大型开源项目

我们欢迎所有的具有气质的开发者能和 TiDB 一起成长,一起见证数据库领域的革新,改变世界这事儿有时候也不那么难。

十分钟成为 TiDB Contributor 系列 | 添加內建函数

最近我们对 TiDB 代码做了些改进,大幅度简化了添加內建函数的流程,这篇教程描述如何为 TiDB 新增 builtin 函数。首先介绍一些必需的背景知识,然后介绍增加 builtin 函数的流程,最后会以一个函数作为示例。

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 来验证整个系统的安全性,当然,也会持续的提升性能。

Spanner - CAP, TrueTime and Transaction

最近大家非常关注的一件事情就是 Google Spanner Cloud 的发布,这应该算是 NewSQL 又一个里程碑的事件。在本篇文章中,唐刘同学与大家分享了他自己对 Spanner 的理解,Spanner 的一些关键技术的实现以及与 TiDB 的相关对比。

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 的方式实现了分布式事务的支持。

分布式系统测试那些事儿 - 信心的毁灭与重建

本话题系列文章整理自 PingCAP Infra Meetup 第 26 期刘奇分享的《深度探索分布式系统测试》议题现场实录。文章较长,为方便大家阅读,会分为上中下三篇,本文为下篇。

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 的高性能。

MPP and SMP in TiDB

本篇文章整理自第 21 期 PingCAP Infra Meetup 上申砾分享的《MPP and SMP in TiDB》内容。

分布式系统测试那些事儿 - 错误注入

本话题系列文章整理自 PingCAP Infra Meetup 第 26 期刘奇分享的《深度探索分布式系统测试》议题现场实录。文章较长,为方便大家阅读,会分为上中下三篇,本文为中篇。

TiDB 作为 MySQL Slave 实现实时数据同步

由于 TiDB 本身兼容绝大多数的 MySQL 语法,所以对于绝大多数业务来说,最安全的切换数据库方式就是将 TiDB 作为现有数据库的从库接在主 MySQL 库的后方,这样对业务方实现完全没有侵入性下使用 TiDB 对现有的业务进行备份,应对未来数据量或者并发量增长带来的单点故障风险,如需上线 TiDB,也只需要简单的将业务的主 MySQL 地址指向 TiDB 即可。

分布式系统测试那些事儿 - 理念

本话题系列文章整理自 PingCAP Infra Meetup 第 26 期刘奇分享的《深度探索分布式系统测试》议题现场实录。文章较长,为方便大家阅读,会分为上中下三篇,本文为上篇。

Building a Reliable Large-Scale Distributed Database - Principles and Practice

日前,PingCAP Engineering VP 申砾受邀参加 2016 中国开源年会,并发表了《Building a Reliable Large-Scale Distributed Database - Principles and Practice》主题演讲。本文为演讲实录。

回到过去,找回遗失的珍宝 - TiDB 的历史读功能

数据作为业务的核心,关系着整个业务的生死,所以对于数据库来说,数据的安全性是放在首位的,从宏观角度来看,安全性不仅仅在于的数据库本身足够稳定不会主动的丢失数据,有的时候更是对业务本身甚至人为失误造成损失是否有足够且便捷的应对方案,例如在游戏行业中经常遇到的反作弊(作弊玩家回档)问题,对于金融业务的审计需求等等,如果在数据库层面上提供相关机制,会让业务开发的工作量和复杂度减少很多。

How do we build TiDB

首先我们聊聊 Database 的历史,在已经有这么多种数据库的背景下我们为什么要创建另外一个数据库;以及说一下现在方案遇到的困境,说一下 Google Spanner 和 F1,TiKV 和 TiDB,说一下架构的事情,在这里我们会重点聊一下 TiKV。因为我们产品的很多特性是 TiKV 提供的,比如说跨数据中心的复制,Transaction,auto-scale...

演讲实录|黄东旭:分布式数据库模式与反模式

日前,PingCAP 联合创始人兼 CTO 黄东旭在「2016中国数据分析师行业峰会(CDAS)」 “数据库与技术实战”分论坛上,分享了《分布式数据库模式与反模式》的主题演讲。本文为演讲实录。

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 次数和数据的传输量。