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