почему rocksdb не кэширует пару ключ-значение напрямую вместо блока?

#rocksdb

#rocksdb

Вопрос:

В Rocksdb есть LRU для кэширования блоков. Но почему он не кэширует пару ключ-значение напрямую, чтобы ускорить чтение одного ключа? Для получения ключа с помощью блочного кэша нужно найти блок (O (1)), а затем, возможно, выполнить двоичный поиск внутри блока, чтобы найти ключ. Но если кэшировать ключи напрямую, можно получить ключ за O (1) раз.

Ответ №1:

Легче справиться с недействительностью блока, чем с недействительностью ключа. По истечении срока действия блока может быть затронуто много совмещенных ключей, поэтому вам нужно удалить и добавить эти новые ключи в кеш.

В то время как при блочном подходе это единственная запись для замены.

Кроме того, имейте в виду тот факт, что rocksdb упорядочен, и многие операции будут вставлять / удалять / обновлять ключи, которые будут совмещены.