Получение общего количества пар ключ-значение в RocksDB

Можно ли эффективно получить количество пар ключ-значение, хранящихся в хранилище ключ-значение RocksDB?

Я просмотрел вики и пока не нашел ничего, что обсуждало бы эту тему. Возможна ли вообще такая операция?


person therealrootuser    schedule 27.08.2014    source источник


Ответы (2)


Точного подсчета нет. Но в RocksDB 3.4, который был недавно выпущен, он предоставляет способ получить оценку количества ключей, вы можете попробовать его.

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

person yinqiwen    schedule 31.08.2014
comment
Прошло так много времени с момента выхода 3.4. Хотите проверить, есть ли API-интерфейс rockdb, который может указать количество (ключ-значение) между заданным диапазоном фрагментов? - person amitwdh; 17.02.2021

С точки зрения кода вы можете использовать db->GetProperty("rocksdb.estimate-num-keys", &num) для получения примерного количества ключей, хранящихся в базе данных rockdb.

Другой вариант — использовать инструмент sst_dump с аргументом --show_properties для получения количества записей, хотя результат будет для каждого файла. Например, следующая команда покажет свойства каждого файла SST в указанном каталоге rockdb:

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
...

В сочетании с некоторыми командами оболочки вы сможете получить общее количество записей:

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

И это будет генерировать следующий вывод:

total number of entries: 111507
person keelar    schedule 10.09.2014