阅读官方文档画以下路线图:
储存:
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更新.
待继续..