1

每当我在rocksdb中为同一个键赋值时。值得到更新。但是通过以下方法 db.getLongProperty(columnFamily, "rocksdb.estimate-num-keys") 的计数会增加。为什么我会出现这种奇怪的行为?

4

1 回答 1

2

这是rocksdb中的预期行为。请注意,该属性是estimate-num-keys,这意味着它只会为您提供数据库中存在的键数的估计(不准确)。您可能必须full compaction在列族上运行 a 才能获得准确的键数。

引用维基,

问:为什么 GetIntProperty 只能返回 RocksDB 数据库中的估计键数?

答:在任何 LSM 数据库(如 RocksDB)中获取准确数量的键是一个具有挑战性的问题,因为它们具有重复的键和删除条目(即墓碑),需要完全压缩才能获得准确数量的键。此外,如果 RocksDB 数据库包含合并运算符,也会使估计的键数不太准确。

您还可以检查 Rocksdb 选项 -inplace_update_support如果它存在于 memtable 本身中,它将更新密钥,而不是再次写入它。

于 2020-05-04T10:28:22.740 回答