返回 登录
1

TiDB,为SQL注入分布式可扩展性

时下,一大批新型数据库急剧涌现,诸如Google Spanner、FaunaDB、Cockroach以及TimeScaleDB等等,这些数据库都在专注解决影响标准SQL的规模问题。现在,另一位来自中国北京的竞争者——PingCAP开源的TiDB项目,旨在维持ACID事务的同时,使SQL也具备NoSQL系统的可伸缩性。

PingCAP联合创始人兼首席执行官刘奇表示,该项目全面支持MySQL协议,也就意味着用户可以重新利用MySQL工具,大大减少迁移成本。在多数情况下,用户甚至无需修改应用程序的任何代码即可取代MySQL。另外它是横向扩展的,通过简单地增加机器数量就可以提高性能。

去年十月,刘奇在阿姆斯特丹的Percona Live会议上提出了TiDB项目,彼时项目还处于测试阶段,目前项目已进化到候选版本。本周四,PingCAP联合创始人兼首席技术官爱德华黄将在加州,圣克拉拉的Percona Live会议上披露TiDB项目的新进展。

他们认为TiDB兼具SQL和NoSQL的优势,并且致力于使它:

  • 易于使用;
  • 确保数据不会丢失,故障情况下自我修复;
  • 跨平台且可以在任何环境中运行;
  • 开源。

该项目还允许模式在线变化,所以可以根据实际需求来修改模式。此外,在不影响业务进展的前提下,用户还可以添加新列和索引。

在某次邮件采访中,刘奇提到:作为一个开源项目,TiDB已有超过100名贡献者。

TiDB项目灵感来源于Google F1分布式数据库及Google Spanner。Google在自己的专有系统上建立了Spanner,并不开源,这在一部分人看来是个缺点。

“如果使用Spanner,用户即默认承诺在GCE(Google Compute Engine)运行服务,并有可能贯穿服务的整个生命周期。即使用户选择运行自己的堆栈,也不会出栈。”Cockroach Labs首席执行官Spencer Kimball此前曾向The New Stack透露。

TiDB采用松散耦合的方法,由一个MySQL Server层和SQL层组成,其基础是开源分布式事务键-值数据库TiKV。TiKV是另一个PingCAP项目,使用Rust编程语言和分布式协议Raft,而TiDB用的是Go编程语言。TiKV项目内含MVCC(多版本并发控制)、Raft以及使用RocksDB的本地键值存储等功能,它同样使用Spark Connector。

刘奇表示,TiDB与Spanner相比较有两点不同:

Spanner底层依赖于Google的Colossus分布式文件系统,但TiDB可以确保安全日志存储在Raft层。也就是说TiDB不依赖任何分布式文件系统,大大降低了写入延迟。

“我们还看到了SQL优化器的巨大潜力,但Google似乎并不打算在F1项目中深入研究这方面。在设计我们的项目时,我们就旨在探索优化器的能力,”他说。

受益于原子钟的使用,Spanner获得了广泛关注,用户可以借助它在地理分布的数据中心间获得时间同步。TiDB没有使用原子钟和GPS时钟,相反,它依靠Percolator(2006年Google发表的一篇论文)中所介绍的Timestamp Allocator。

TiDB支持流行的容器技术,例如Docker。目前团队正在致力于对Kubernetes提供支持,刘奇表示,这方面工作中的难点,在之前的阿姆斯特丹会议上恰好提到过。

现在他们正在努力解决的最大问题是延迟,尤其是地理分布的数据中心之间存在的延迟,他希望这一问题能在不久的将来得到解决。

PingCAP由高级分布式系统工程师黄东旭、高级系统工程师崔秋以及基础设施工程师刘奇共同创立于2015年4月,它有48个在北京的工程师和其他来自中国各地的远程工作者。

其客户包括手机游戏提供商GAEA,它使用TiDB支持跨平台的实时广告系统,这要求面对大容量数据时能够在一定期限内具备高峰负荷能力和经验。TiDB支持自动分片和底层,TiKV自动分配集群中的数据,帮助GAEA降低操作和维护的成本。

评论