mysql myrocks

key value绑定

Memcomparable

myrocks的方案,一张图

多CF,schema/index信息都放在infomation_schema

schema信息存到infomation_schema表中,也就是system这个cf,保存映射关系,正常来说放在默认CF里点查也没啥问题

注意primary key和secondary key的设计差距不大,所以导致secondary key需要另外的CF来存,不然会撞,其实可以设计成特殊前缀来区分

类似hbase这种 key-row模型不会有储存index的烦恼

另外,多CF比单CF多个灵活删除CF的功能,可以更快的删

Q: 发生迁移schema信息是如何同步的?

没什么特别的。不涉及gateway路由的问题

mongo-rocks

单CF,特殊前缀

mongo两种映射,chunk->表名,表本身->index分开存储

chunk和表名的映射关系单独放在config server用来记录,方便mongos来路由,本身的index信息直接存到具体的chunk内部,用特殊前缀做区分,0000是元数据,0001是索引0002是数据等等

Q: schema信息是如何同步的?

无schema,index信息直接和表存在一起,没有啥同步问题

请求访问到mongos,mongos从config server拉路由信息,然后根据路由信息广播请求,然后获取对应的key index信息进行计算

TIDB

本身是多database 多副本

单CF 特殊前缀 存元数据(自身的ID, index做编码和数据放在一起, Memcomparable),database映射信息放到PD

TiDB 中每个Database和Table都有元信息,也就是其定义以及各项属性。这些信息也需要持久化,TiDB 将这些信息也存储在了 TiKV 中。每个Database/Table都被分配了一个唯一的 ID,这个 ID 作为唯一标识,并且在编码为 Key-Value 时,这个 ID 都会编码到 Key 中,再加上m_前缀。这样可以构造出一个 Key,Value 中存储的是序列化后的元信息。除此之外,TiDB 还用一个专门的 (Key, Value) 键值对存储当前所有表结构信息的最新版本号。这个键值对是全局的,每次DDL 操作的状态改变时其版本号都会加1。目前,TiDB 把这个键值对存放在 pd-server 内置的 etcd 中,其Key为”/tidb/ddl/global_schema_version”,Value 是类型为 int64 的版本号值。 TiDB 使用 Google F1 的 Online Schema 变更算法,有一个后台线程在不断的检查 etcd 中存储的表结构信息的版本号是否发生变化,并且保证在一定时间内一定能够获取版本的变化

路由信息是放在PD的,客户端需要从PD中拉到路由,根据这个路由来访问,PD内嵌etcd,维护一组版本信息

请求拿到需要的key和index计算就行了

Q:DDL改动如何保证正确?

用Online Schema变更算法。lease+版本

这里应该展开讲一下

Q: schema信息是如何同步的?

所有的变动都是主动推给pd

CockroachDB

无中心,gossip通信

保证最终一致性,时间窗内不保证DDL改动一致性

Q:DDL改动如何保证正确?

用Online Schema变更算法。lease+版本

这里应该展开讲一下

Q: schema信息是如何同步的?

gossip,变更中总有一个时间窗期间是不同步的

这里应该展开讲一下

参考信息

  • myrocks 图来自这里 https://github.com/wisehead/myrocks_notes/blob/master/10.CF/CF/index.md 代码分析记录的很详细,代码级别
  • mongorocks整理自
  • tidb vs crdb https://www.jianshu.com/p/8d0a99e198fb
  • crdb 分布式事务演进 https://www.jianshu.com/p/a4604b012f31
  • yugabyte-db介绍 https://ericfu.me/yugabyte-db-introduction/
  • http://www.postgres.cn/downfiles/pgconf_2018/PostgresChina2018%E8%B5%96%E5%AE%9D%E5%8D%8E%E5%BC%80%E6%BA%90%E5%88%86%E5%B8%83%E5%BC%8FNewSQL%E6%95%B0%E6%8D%AE%E5%BA%93CockroachDB%E6%9E%B6%E6%9E%84%E5%8F%8A%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.pdf
  • https://iswade.github.io/translate/crdb/crdb_paper_cn/