一直有一个疑问,关于region和sst

通过查看tikv的代码,看上去region只是一个在tikv层面出现的概念,不太清楚是否region的概念也在rocksdb中有所体现。一个region是否对应着一个sst?或者是一个sst会存有不同region的一部分。
sst的compaction和region的迁移,是否存在联系??

感觉有些想不通,期待回复,谢谢

看PTCA的课程吧,看完了会有个大概清晰点的概念的

region 是针对很多层的热点写,热点读,以及调度的场景综合的解决思路,和SST 的关系不是太大
rocksDB和SST 有密切关联
SST只存在新旧迭代,和迁移无关;

谢谢,看起来region只是一个逻辑上的概念,一个region的key可能分散在不同的sst中。

我的理解是:
当我们要进行写操作时,需要找到这个key可能分属的region,然后写到这个region所属的节点。当时这次写入我们并不知道这个key最终会位于哪个sst,如果我给rocksdb的block cache分配很小的内存,那么可能在读取这个key时,仍旧需要遍历很多sst。

我的问题是:

  1. 当我们需要对region进行迁移时,我们是不是需要将这个region的所有key从不同的sst读取出来,然后将这些key/value复制到另一个节点。

  2. 当我们读取一个key时,我们只能通过region清楚这个key具体分布在集群中哪个节点上,具体的读和region没有关系,依然交由rocksdb,走正常的读流程。

  3. 同样,当我们进行scan操作时,也只会判断这个范围的key在哪个节点上,仍旧需要交由rocksdb去进行读操作,而如果region分属于不同的节点,我们如果去返回一个全局一致性的结果呢?

  1. region 迁移时,值是不是只需要最新的?那么还需要读 SST 么?
  2. key 跟Region 和 SST ,rocksDB无关,只和 PD 有关
  3. scan操作,也是由tidb 进行协议解析和协商后,通过PD 获取 metaData后,去获取相关的节点信息在进一步读取值;scan操作有点查,有范围查,有索引查,有全表,看实际的情况和场景了

我看你对这块的知识理解很零散,我的理解可能也不够太深,无法帮你太多,还是建议去官网学习

  1. region 迁移是通过 snapshot 生成 SST,然后通过 ingest sst 的方式插入到别的节点上的:region 的迁移与内存数据存放问题
  2. 是的
  3. 全局一致性这个是事务相关的内容,可以看下 percolator 事务模型的介绍:https://pingcap.com/blog-cn/percolator-and-txn/

谢谢!