各类数据库缓存对比

68 阅读3分钟

hbase: 读缓存:blockcache HBase会将一次文件查找的Block块缓存到Cache中 写缓存:memstore HBase执行写操作首先会将数据写入MemStore,并顺序写入HLog。 MemStore对于读性能也至关重要,假如没有MemStore,读取刚写入的数据就需要从文件中通过IO查找,这种代价显然是昂贵的 blockcache:blog.51cto.com/u_12445535/…

1、Block是HBase中最小的数据存储单元,默认为64K,在建表语句中可以通过参数BlockSize指定。

2、HBase中Block分为四种类型:Data Block,Index Block,Bloom Block和Meta Block。

3、其中Data Block用于存储实际数据,通常情况下每个Data Block可以存放多条KeyValue数据对;

4、Index Block和Bloom Block都用于优化随机读的查找路径,

5、其中Index Block通过存储索引数据加快数据查找,

6、而Bloom Block通过一定算法可以过滤掉部分一定不存在待查KeyValue的数据文件,减少不必要的IO操作;

7、Meta Block主要存储整个HFile的元数据。

LRUBlockCache

1、将内存从逻辑上分为了三块:single-access区、mutil-access区、in-memory区,分别占到整个BlockCache大小的25%、50%、25%

2、一次随机读中,一个Block块从HDFS中加载出来之后首先放入signle区,

3、后续如果有多次请求访问到这块数据的话,就会将这块数据移到mutil-access区。

4、而in-memory区表示数据可以常驻内存,一般用来存放访问频繁、数据量小的数据,比如元数据,用户也可以在建表的时候通过设置列族属性IN-MEMORY= true将此列族放入in-memory区。

doris: 数据湖文件缓存: 文件缓存(File Cache)通过缓存最近访问的远端存储系统(HDFS 或对象存储)的数据文件,加速后续访问相同数据的查询。在频繁访问相同数据的查询场景中,File Cache 可以避免重复的远端数据访问开销,提升热点数据的查询分析性能和稳定性。

原理: File Cache 将访问的远程数据缓存到本地的 BE 节点。原始的数据文件会根据访问的 IO 大小切分为 Block,Block 被存储到本地文件 cache_path/hash(filepath).substr(0, 3)/hash(filepath)/offset 中,并在 BE 节点中保存 Block 的元信息。当访问相同的远程文件时,doris 会检查本地缓存中是否存在该文件的缓存数据,并根据 Block 的 offset 和 size,确认哪些数据从本地 Block 读取,哪些数据从远程拉起,并缓存远程拉取的新数据。BE 节点重启的时候,扫描 cache_path 目录,恢复 Block 的元信息。当缓存大小达到阈值上限的时候,按照 LRU 原则清理长久未访问的 Block。

SQLCache SQLCache 按 SQL 的签名、查询的表的分区 ID、分区最新版本来存储和获取缓存。三者组合确定一个缓存数据集,任何一个变化了,如 SQL 有变化,如查询字段或条件不一样,或数据更新后版本变化了,会导致命中不了缓存。

PartitionCache 设计原理 缓存最近7天数据 SQL 可以并行拆分,Q = Q1 ∪ Q2 ... ∪ Qn,R= R1 ∪ R2 ... ∪ Rn,Q 为查询语句,R 为结果集。 拆分为只读分区和可更新分区,只读分区缓存,更新分区不缓存。

clickhouse: 文件缓存 查询缓存,sql级别的