获取 RocksDB 中键值对的总数

Posted

技术标签:

【中文标题】获取 RocksDB 中键值对的总数【英文标题】:Getting total number of key-value pairs in RocksDB 【发布时间】:2014-10-21 17:20:33 【问题描述】:

是否可以有效地获取 RocksDB 键值存储中存储的键值对的数量?

我浏览了wiki,到目前为止还没有看到任何讨论这个话题的东西。这样的操作有可能吗?

【问题讨论】:

【参考方案1】:

在代码方面,您可以使用db->GetProperty("rocksdb.estimate-num-keys", &num) 来获取存储在rocksdb 中的估计键数。

另一个选项是使用带有--show_properties 参数的sst_dump 工具来获取条目数,尽管结果将基于每个文件。例如,以下命令将显示指定rocksdb目录下每个SST文件的属性:

sst_dump --file=/tmp/rocksdbtest-691931916/dbbench --show_properties --command=none

这是示例输出:

Process /tmp/rocksdbtest-691931916/dbbench/000005.sst
Sst file format: block-based
Table Properties:
------------------------------
  # data blocks: 845
  # entries: 27857
  raw key size: 668568
  raw average key size: 24.000000
  raw value size: 2785700
  raw average value size: 100.000000
  data block size: 3381885
  index block size: 28473
  filter block size: 0
  (estimated) table size: 3410358
  filter policy name: N/A
  # deleted keys: 0
Process /tmp/rocksdbtest-691931916/dbbench/000008.sst
Sst file format: block-based
Table Properties:
------------------------------
  # data blocks: 845
  # entries: 27880
  raw key size: 669120
...

结合一些shell命令,就可以得到总条目数:

sst_dump --file=/tmp/rocksdbtest-691931916/dbbench --show_properties --command=none | grep entries | cut -c 14- | awk 'x+=$0ENDprint "total number of entries: " x'

这将产生以下输出:

total number of entries: 111507

【讨论】:

【参考方案2】:

没有办法准确地得到计数。但是在最近发布的rocksdb 3.4中,它公开了一种获取key的估计计数的方法,你可以试试。

https://github.com/facebook/rocksdb/releases

【讨论】:

3.4 发布已经很久了。想检查一下,是否有任何rocksdb api可以给出给定切片范围之间存在的(键值)数量?

以上是关于获取 RocksDB 中键值对的总数的主要内容,如果未能解决你的问题,请参考以下文章

反转字典中键值对的顺序(Python)[重复]

JAVA Map类代码解析,Map中键值对的两种取出方式

python字典中键值对的值为中文,打印成转义字符,怎么解决

替换对象中键值对的Python函数返回意外输出[重复]

Python中删除字典中键值对的方法

我怎样才能得到firebase中键、值对的计数? [关闭]