黄东旭解析 TiDB 的核心优势
481
2019-12-05
内容来源:http://mp.weixin.qq.com/s?__biz=MzI3NDIxNTQyOQ==&mid=2247490385&idx=1&sn=c268b40965b271086e25438824e7a847&chksm=eb163c3bdc61b52d955f4e216227ff872249dfd9ad6d513fbf20d9ddf4578a120dca86c42ac2#rd
11 月初我们开启了一项社区新活动「TiDB 性能挑战赛」(Performance Challenge Program,简称 PCP),这项积分赛将持续 3 个月,选手将完成一系列难度不同的任务,赢得相应的积分。目前赛程刚刚过去三分之一,已经取得了十分耀眼的阶段性成果:
截至发稿时积分排行榜前五名的参赛选手 / Team 分别是:.* team、ekalinin、mmyj、AerysNan、js00070。
其中 .* team 表现尤为优异,他们已经拿到了 4150 积分,在排行榜上遥遥领先。而来自俄罗斯的个人参赛者 ekalinin 获得了 1450 积分,是目前积分最高的个人参赛者,他共提交了 17 个任务,目前完成了 12 个,其中包含一个 Medium 难度的任务。
积分排行榜
“因为对 Rust 感兴趣参加了这次 PCP,能够亲自改善一个自己会使用的工具的感受非常令人愉悦,项目的文档,代码结构和社区都非常友好,带来了很强的正反馈。”
—— Renkai(PCP 个人参赛者)
“参加 PCP 是很有趣的体验,既能深度参与开源项目,又能在这个过程中学到很多数据库和 Rust 的知识,还能通过获得积分兑换奖励,导师的指导非常耐心,希望能有更多的人参与进这个项目来。”
—— TennyZhuang(PCP 团队参赛者 .* team 成员)
“I like Go & databases. TiDB has both of them. So I just decided to deep dive into internals of the TiDB and check if I can be useful for it. I'm a big fan of open source. I have a couple of open sourced projects and I understand the importance of the contribution into open source projects.
I feel great after joining the PCP and TiDB community! Good docs, a lot of tests, well written code :)”
—— ekalinin(PCP 个人参赛者,来自俄罗斯)
下面让我们来看看过去的一个月里大家在「性能提升」方面有哪些突破性的战绩吧!
1. IN() 函数性能提升 150+ 倍
相关 PR 链接:
https://github.com/tikv/tikv/pull/6000
作者:TennyZhuang( .* team 成员)
IN()
是一个大家用的很多的 SQL 内置函数。这个 PR 使得 IN()
内置函数的性能有了复杂度级别的提升,从 O(N)
提升到 O(1)
,如上图所示。这对于 IN()
函数中有很多参数的情况能有很大的帮助,例如在以下 1000 个参数场景中性能提升可达 150+ 倍:
CREATE TABLE `foo` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`c` char(100),
PRIMARY KEY (`id`)
);
select * from foo where c in (
"271a76b46731d9", "a7a69f89d4b32e", "8d969b6b76f6f4", "8ea63d5c33dabe", "4c5dabf74df99f", "897ab55a20218b", "80d73f4331a342", "a4747627a2e05d",
"e20beca46373", "4dbc295621b4c5", "79ab1ea844c293", "86d75b32f6b1b8", "7fd827adcc7cd0", "bf26b53dd73dd",
...
);
大家不要觉得这么多参数是很少见的情况,实际上我们已经遇到多个 TiDB 用户给 IN()
内置函数传递多达几千个参数的场景。
TennyZhuang( .* team 成员)成功通过这个 PR 获得了 2100 积分,这个是目前选手获得的单个贡献最高积分。不过这还只是 Medium 难度的任务,我们还有许多更高积分奖励的 Hard 级别任务等待大家来挑战
2. LIKE() 函数性能指数级提升
相关 PR 链接:
https://github.com/tikv/tikv/pull/5866
这个 PR 通过修改了算法,实现了对 LIKE()
内置函数性能的指数级别改进,从 O(2^N)
优化到 O(N)
。在优化前,仅仅是 6 个通配符就能将单行计算性能降低到秒级,对性能可以造成非常严重的影响。上图直观展示了这个 PR 带来的性能提升(纵坐标是对数坐标)。TennyZhuang( .* team 成员)通过这个 PR 获得了 1500 积分。
3. 全面提升 TPC-H 性能
相关 PR 链接:
https://github.com/tikv/tikv/pull/5979
作者:Renkai
更多有意思的任务
致谢
TiDB 性能挑战赛
TiDB 性能挑战赛由 PingCAP 发起,旨在激发社区创造性,参赛选手可以通过完成一系列的任务提升 TiDB 产品的性能。赛事于 2019 年 11 月 4 日正式开启,将持续 3 个月,比赛任务分为三个难度:Easy、Medium、Hard,不同难度对应不同积分,参赛选手获得的积分可以兑换 TiDB 限量周边礼品等丰富的奖励,详情:无挑战,不 Geek!TiDB 性能挑战赛等你来战。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。