tikv读取数据时候,是先读block cache,还是先读取memtable?

tikv读取数据时候,是先读block cache,还是先读取memtable?block 存储的数据,是如何被刷入的?这些官方有说明吗?

在 TiKV 中,读取数据的过程首先会检查 block cache,然后才是 memtable。这是因为 TiKV 使用 RocksDB 作为其存储引擎,而 RocksDB 的读取流程是这样的:

  1. Block Cache: 当读取请求到来时,RocksDB 首先会检查 block cache(如果启用了缓存)。Block cache 是用来缓存从磁盘读取的数据块的,这可以显著减少对磁盘的访问次数,提高读取性能。如果请求的数据在 block cache 中被找到,那么可以直接返回数据,无需进一步访问磁盘。

  2. Memtable: 如果数据不在 block cache 中,RocksDB 接下来会检查 memtable。Memtable 是一个内存中的数据结构,存储了最近写入的数据。如果在 memtable 中找到了数据,就可以直接返回。

  3. SSTables: 如果数据既不在 block cache 中也不在 memtable 中,RocksDB 会继续在磁盘上的 SSTables 中查找数据。SSTables 是分层存储的,RocksDB 会从最新的层开始查找,逐层向下直到找到数据或检查完所有层。

因此,对于 TiKV 的数据读取,优先级是:Block Cache → Memtable → SSTables。这种设计是为了最大化读取效率和减少磁盘 I/O 操作。

2 个赞

谢谢您耐心的解答

先 block cache,再 memtable

可以参考一下这篇专栏 专栏 - PCTP考试学习笔记之一:深入TIDB体系架构(下) | TiDB 社区

block cache

TiKV在读取数据时首先会检查Block Cache和MemTable,以确保能够快速地访问到最新和最常读的数据。而Block Cache中的数据是动态管理的,会根据缓存替换策略来决定哪些数据应该被移除或刷入磁盘。这些机制共同确保了TiKV能够高效地处理大量的读写请求,并提供高可用性和数据持久性的保证。

Block Cache是自动的,MemTable是通过设置热点小表手动的,因此应该是先block cache