Как правильно установить TTL на Rocks DB? - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь использовать Rocks DB с TTL.То, как я инициализирую db, выглядит следующим образом: options.setCreateIfMissing(true).setWriteBufferSize(8 * SizeUnit.KB) .setMaxWriteBufferNumber(3) .setCompressionType(CompressionType.LZ4_COMPRESSION).setKeepLogFileNum(1); db = TtlDB.open(options, this.dbpath, 10, false);

Я установил TTL на 10 секунд.Но пары ключ-значение не удаляются через 10 секунд.Что здесь происходит?

1 Ответ

0 голосов
/ 12 декабря 2018

Это по замыслу:

Этот API должен использоваться для открытия БД, когда введенные значения ключа предназначены для удаления из БД в нестрогом интервале времени 'ttl', поэтому, это гарантирует, что введенные значения ключа будут оставаться в БД в течение как минимум времени ttl, и БД будет прилагать усилия для удаления значений ключа как можно скорее после ttl секунд их вставки

- со страницы RocksDB Wiki на TTL.

Это означает, что значения удаляются только во время сжатия, а устаревание не проверяется во время чтения.

Одна из хороших особенностей RocksDB заключается в том, что их источник вполне читабелен.Файлы, которые вы хотели бы посмотреть, это header и source для TtlDb.В заголовке вы найдете сжатие, которое удаляет устаревшие значения (Filter -подряд сжатия хорошо документирован в его заголовок ).В источнике TtlDb вы сами убедитесь, что Get не выполняет никаких проверок, является ли значение устаревшим.Он просто удаляет временную метку (которая просто добавляется к значению при вставке).

...