学生教材网 >程序设计 > 开源项目 > 程序开发 > 浏览文章

TiDB:支持 MySQL 协议的分布式数据库解决方案 - OneAPM 官方技术专栏

来源:网络编辑:佚名时间:2016-01-22人气:

好看的小说穿越,五月的鲜花演员表,异界之超越轮回

下面学生教材网的小编为您详细介绍TiDB:支持 MySQL 协议的分布式数据库解决方案 - OneAPM 官方技术专栏文章的具体内容,佚名希望您能完整的阅读下来,看完后将会有更多收获.

【编者按】TiDB 是国内 PingCAP 团队开发的一个分布式 SQL 数据库。其灵感来自于 Google 的 F1,TiDB 支持包括传统 RDBMS 和 NoSQL 的特性。在国内 ITOM 管理平台 OneAPM 举办的技术公开课中,TiDB 的高级工程师刘奇从 HBase 特性、TiDB 的优势和系统架构等方面进行了详细阐述。以下为演讲整理:

HBase 简介

众所周知,在 SQL 方面处于顶级的有两个公司,一个是 Oracle,他们已经积累了大量的经验,另一个是谷歌,谷歌 F1 在2012年发布了一篇论文,个人认为它是全球最优秀的 SQL OLTP 数据库。

1978年左右,数据库刚刚发展时出现了SQL RDBMS。2000年左右,国内开始流行互联网,互联网对 Oracle 数据库也产生较大的冲击。现在,传统的数据库大部分是集中在传统领域,互联网方面用得比较多的是 MySQL ,其次 HBase 等 NoSQL 也吸引了大量的用户。

为什么会出现 NoSQL?最开始所有人都用 SQL Database,那时比较高端有 Oracle,开源的还有 MySQL、PostgreSQL。可是随着业务的迅速发展,数据库成为了瓶颈,于是促使了 NoSQL 的诞生,NoSQL 将 Scale 放在第一位。如果业务快速发展,扩容会成为亟待解决的首要问题。这时,大多数人会选择放弃事务一致性。什么是一致性?比如使用微信时,如果我加你为好友,这是一个双向关系,对应到数据库中至少是两个操作,第一是在好友列表里把你加进来,第二个是你的好友列表里把我加进去。如果这两个列表的数据库放在不同的机器上,就需要保证一致性。否则可能会出现我是你的好友,但你的好友中却找不到我的这种情况。但这中间可能会出现多种情况,比如我把你加为好友,然后修改数据的时候 Crush 掉了,这个时候传统方案是会引入一个消息队列,有的还需要做一些补偿,这些问题在 NoSQL 里处理起来相对麻烦。

国内最大的 HBase 使用者是小米公司,有几个 HBase 的 Committer ,所以经过一些修改后可以支持分布式事务,于是能够解决之前的问题。为什么在面临诸多选择时,小米会选择 HBase 呢?就目前情况来说,主要还是技术选型和人才储备上的考虑。 MongoDB 大家应该不陌生,但用到一定程度后,总会出现各种问题,甚至有文章呼吁大家放弃 MongoDB 。但所有数据库都不是“十全十美”的,没有最好,选择最适合的尤为重要。

很多时候产品都有其特性,在满足其特性或者规格的情况下,使用起来可能非常顺手,否则十之八九都遇到各种麻烦。比如小米使用 HBase 就非常顺手,但其他的公司则不一定。道理很简单,如果不熟悉其使用场景,也不知道在相应场景下配什么参数,所以会出现各种各样的问题。


事实上,HBase 有非常好的特性,目前在小米公司可以每秒跑一百万 OPS ,最近 Pinterest 公布他们的 HBase 每秒可以跑三百万个 OPS ,这个数量级可以远超很多互联网公司。 HBase 在读写一致性方面非常出色,有很好的自动 Scale 的能力,通过Block Cache 和 Bloom Filters可以很好的解决查询问题,是否在磁盘上也可以通过Bloom Filters来判定。

另一方面,Oracle 把一部分逻辑会放在 CPU/硬件里,对应的 HBase 也会把一部分逻辑下推到对应的 RegionServer 上。对于一个分布系统来说,如果需要查询一个条件,可以直接把这个简单调节推到对应的 RegionServer 上执行。再比如求和运算,现在有一百亿数据,甚至一千亿条数据,分布在10个节点上,最快的求和方法是让所有节点同时运算,将这个条件下推得到所有对应数据的和,最后收集到10个数据的和即可。其实还可以继续往下推,这是比较复杂的数据库优化技术,实际情况还会更复杂。这在 HBase 里面依赖 Coprocessor 来实现。

大家应该对 MVCC 比较熟悉,也就是多版本,它的优点在于可以多次读取而不会 block。然后还有一个很好的特性,假设你用的 Database ,MVCC 在你没有做 compaction 之前可以回到任何时间的数据。现在云服务上也可以每隔半小时做一次快照,实际上如果使用 MVCC 回到任意一秒的话,可以完全不需要快照。

TiDB的优势

下面再介绍一下我们的产品 TiDB,Ti 是元素周期表里的元素。大家如果了解我们团队的程序员,就知道他们都比较 Geek,取名字要么在希腊神话里选一个神的名字,或者在数学里找一个希腊字母, 但是看了一圈,好坑都已经被占上了。于是,我们在化学元素周期表里找了一个金属作为项目名称,对于 Database 而言,它必须是高速稳定的,刚好钛金属有很强的防腐蚀性,所以选择了钛(Ti)。

因为 TiDB 的目标是谷歌 F1,所以自然会满足以上特性。首先是可以满足分布式一致,也就是说对于应用来说,不用关心后面分成多少个机器,事务的一致性是必须保证的,比如我们之前提到的 A 关注 B,两个互相加好友或者转帐,可以直接利用一条 SQL 搞定,而无需担心中间过程。另外一个特性是兼容 MySQL 协议,国内大概有70% 的互联网公司都在使用 MySQL,为了考虑大家的迁移成本,我们会兼容 MySQL 协议。同时,由于已经很多 APP 在 MySQL 上运行,为我们提供了充足的测试样本。 TiDB 的测试有五百多万个,每次提交一行代码时,后面大概有6个机器并行地跑 Test ,五百多万 Test 所需时间大约是十分钟。为了照顾各种引擎爱好者,我们还支持了 LevelDB 、RocksDB、LMDB、BoltDB 等。TiDB 主要是采用 Go 语言开发的,其代码简单、易于理解,而且性能非常高。

系统架构

如何用不同的方式来处理安卓的权限管理? - OneA…

随着Marshmallow的发布,安卓增加了一种新的权限管理模式,要求开发者们采用一种不同的方式来处理安卓的权限管理。在本系列文章中,我们将会从技术角度和如何提供流畅用户体验的角度来探讨权限问题的处理方法。

热门推荐