GoCN第三期《老司机带你看Go风景》——分布式达人刘奇

GoCN 本期老司机系列我们请来了分布式开发的达人,之前也分享过很多分布式开发和数据库开发经验 —— @goroutine 为大家解答关于Go 数据库开发方面的问题。


刘奇:PingCAP 联合创始人兼 CEO,先后创建了 Codis、TiDB / TiKV 等知名开源项目。曾任豌豆荚,京东资深系统架构师。现从事开源的分布式 NewSQL 数据库 TiDB 开发。擅长高并发、大规模、分布式数据库系统架构设计。



本次活动持续两天,嘉宾会在空闲时间上来给大家一一回答。不欢迎任何与主题无关的讨论和喷子。



https://github.com/pingcap/tidb
欢迎大家关注刘奇他们新的数据库项目


已邀请:

goroutine

赞同来自: SunisDown ianwoolf raindylong

TiDB 早期支持 boltdb 引擎,随着代码的演进和性能的需要,现在主要支持 goleveldb 作为单元测试引擎,TiKV 作为实际的分布式引擎。


TiDB 支持针对某一列做索引。 再说具体实现前,可以先看看 TiDB 怎么把一个 SQL 的表映射到KV上面,假设我们给一个表(id, name, email)插入两条记录:
INSERT INTO user VALUES (1, “bob”, “bob@pingcap.com”);
INSERT INTO user VALUES (2, “tom”, “tom@pingcap.com”);
映射到KV后:
Key Value
user/1 bob | bob@pingcap.com
user/2 tom | tom@pingcap.com
... ...


现在给 name 创建索引,这时候的KV映射是这样的:
Key Value (user id)
bob_1 user/1 // 可以看到 bob 的 value 指向了 user/1
tom_2 user/2 // 可以看到 tom 的 value 指向了 user/2
user/1 bob | bob@pingcap.com
user/2 tom | tom@pingcap.com


如果这个时候要根据索引来访问,第一步是先读取索引,然后根据索引的指针读取原来的行。 简单的步骤如下:
pointer := kv.scan("bob")
row := kv.get(pointer)

SunisDown - @douban

赞同来自: itfanr

看到 tidb 支持用 bolt 作为存储引擎。
当用 bolt 作为存储引擎的时候,是否还支持 MySQL 下面那种针对某一列加索引?如果支持,是通过什么方式来实现的?

goroutine

赞同来自: xieyanke

@nange:
关于GC,有两点需要仔细考虑,Pause 的时间,另外就是吞吐。
目前 Go 的 Pause 时间有明显进步,代价是消耗更多 CPU,对与数据库而言高效利用 CPU 也很重要,另外还有 CGO 的开销目前也很大。

nange

赞同来自:

最近看到go1.8的gc暂停时间能降到0.1ms了,可以预见未来可能更低,比如0.01ms以下,性能也在稳步提升。 gc暂停时间足够低的时候,现在tidb/tikv这种架构是不是还是最合适的呢? 只是用go开发会不会更好?

bopjiang

赞同来自:

看您有篇文章: 分布式系统测试那些事儿——理念



包括刚才的监控。比如说你一个系统一过去,然后自动发现有哪些项需要监控,然后自动设置报警。大家觉得这事是不是很神奇?其实这在 Google 里面是司空见惯的事情,PingCAP 现在也正在做。



这个自动监控,告警? 愿闻其详,有开源系统在做类似的事情么

要回复问题请先登录注册