TiDB初步概念

阅读官方文档画以下路线图:

储存:

rockDB用于单机数据固化:完全理解

raft用于分布式数据同步:完全理解

最终对外展示一整个完全有序的Key-Value序列:完全理解

重点:有序,就可以随机访问了,事关查询速度.

  Key-Value :在这里K-V并不是死板的KV,由于有序的概念在里面,同时KV都是byte的数据结构,故逻辑上的键一般存在KEY里,但逻辑上的值也可能存在KEY里.

整个储存是为了快速定位而设计的.

计算:

就是如何利用超大有序K-V结构来实现关系数据库,很重点.

  行储存:Key:表前缀_行前缀_表ID_行ID Value: 字符串化的一行数据:完全理解

      这个储存可以直接找到行,在有序的情况下也可以快速全表扫描.

  索引:Key:表前缀_索引前缀_表ID_索引ID_(列名值)  Value: rowID, 完全理解

      可以通过列名+值直接找到rowID,在唯一索引情况下,复杂度恒为常数.

    Key:表前缀_索引前缀_表ID_索引ID_列名值_主键 Value: NULL, 敲黑板

      用于非唯一索引,在查询给定(列名值)的情况下,可以把范围缩小到所有主键所在的逻辑连续区域.

      但具体怎么缩小,还没想通,估计是首先定位第一个索引,然后next读取完,

      目前不理解如何定位到第一个索引,直接构造Key明显行不通,但随意猜测主键也挺扯淡,

      又可能是查询KEY的分区记录,可以找到符合构造前缀的第一个KEY,然后复杂度就是N(索引数)了

  略过了:分布式schema更新.

待继续..

猜你喜欢

转载自www.cnblogs.com/user-for-once/p/9455068.html