TableCache 是一个构建在 F1 存储和 F1 查询引擎之间的分布式内存缓存。
TableCache 是针对单一主键的查询而设计的,论文中的单一主键为 RowID。
TableCache 是 read-through cache,意味着更新时缓存不会失效,而是借助 Data Change History 直接更新内存。
具体设计
- 将 (table, RowID) 的所有数据行分割成 table shard,以便可以并行读取。(table, RowID) -> table shards 的映射关系由离线任务实时计算得出,并存储在系统表里。
- 通过确定性的 (table, RowID, shard_id) -> cache server 的 hash 函数,cache client 将读请求均匀的分布到各个 cache server 上。
- cache server 会 lazily load table shard,在内存不足的情况下使用 LRU 算法 evict table shard。
- 当缓存中的 shard timestamp T_cache 小于请求的时间 T_query 时,cache server 会向 Change History Table 发起读请求,返回 (table,RowID) 的大于 T_query 的所有数据更新,然后将属于这个 shard range 的更新应用到这个 shard 上。
可以看到,查询 Change History Table 的时延是很重要的,这里论文说针对这个查询做了优化,使其响应时间很快。
网友评论