RocksDB系列二十:Simulation Cache

  Simulation Cache(SimCache)可以帮助用户在模拟的内存容量而不是物理上实际占用内存下预测block cache的性能数据,比如:hit、miss。

Motivation

  帮助用户调优参数:block cache size、更高效地使用内存。另外,也可以帮助用户了解 fast storage的cache性能。

Introduction

  SimCache的基本思想是根据要模拟的容量封装正常的block cache,但是这个封装后的block cache只有key,没有value。当插入数据时,把key插入到两个cache中,但是value只插入到normal cache。value的size会在两种cache中都计算进去,但是SimCache中因为只有key,所以并没有占用那么多的内存,但是以此却可以模拟block cache的一些行为。

How to use SimCache

  由于SimCache是normal cache的封装,所以必须要先创建一个block cache。

std::shared_ptr<rocksdb::Cache> normal_block_cache =
  NewLRUCache(1024 * 1024 * 1024 /* capacity 1GB */);

然后使用NewSimCache来封装normal_block_cache,将rocksdb::BlockBasedTableOptions的block cache变量设置为SimCache实例,然后生成options.table_factory。

rocksdb::Options options;
rocksdb::BlockBasedTableOptions bbt_opts;
std::shared_ptr<rocksdb::Cache> sim_cache = 
NewSimCache(normal_block_cache, 
  10 * 1024 * 1024 * 1024 /* sim_capacity 10GB */);
bbt_opts.block_cache = sim_cache;
options.table_factory.reset(new BlockBasedTableFactory(bbt_opts));

通过options配置来打开DB。通过调用sim_cache->get_hit_counter() and sim_cache->get_miss_counter()可以获取到SimCache的HIT/MISS。

Memory Overhead

用户可能会关注SimCache的实际内存占用,大致评估如下:
sim_capacity * entry_size / (entry_size + block_size),

  • 76 <= entry_size (key_size + other) <= 104
  • BlockBasedTableOptions.block_size = 4096 by default but is configurable

实际上,SimCache的实际内存开销大概是 sim_capacity * 2%

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   Block Cache是RocksDB把数据缓存在内存中以提高读性能的一种方法。开发者可以创建一个cache对...
    薛少佳阅读 12,689评论 0 5
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 1,775评论 0 9
  • 早就知道这一天会到来,像现在这样,大脑空白,真是写无可写。但是对于励志要坚持每天写东西的我来说必须得想点办法啊。...
    冬江花月夜阅读 367评论 1 1
  • 你是否有过这样的经历,在朋友圈晒自己的学习进程、健身进程以获得“赞誉”然后就没有然后了。你是否也见过平常不怎么引人...
    水平生阅读 185评论 0 0
  • 1.存在需要价值 2.适可而止 3.本分 4.肥潘和解 八年级课件+高考课件✔ 一份高考卷✔ 《第十二夜》✔
    Alian__阅读 173评论 0 0