Можно ли эффективно получить количество пар ключ-значение, хранящихся в хранилище ключ-значение RocksDB?
Я просмотрел вики и пока не нашел ничего, что обсуждало бы эту тему. Возможна ли вообще такая операция?
Можно ли эффективно получить количество пар ключ-значение, хранящихся в хранилище ключ-значение RocksDB?
Я просмотрел вики и пока не нашел ничего, что обсуждало бы эту тему. Возможна ли вообще такая операция?
Точного подсчета нет. Но в RocksDB 3.4, который был недавно выпущен, он предоставляет способ получить оценку количества ключей, вы можете попробовать его.
https://github.com/facebook/rocksdb/releases
С точки зрения кода вы можете использовать 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