Почему база данных LMDB принимает больше, чем фактический размер данных?

Я положил около 11К ключей и значений в базу данных LMDB. Размер файла базы данных LMDB стал 21 МБ.

Для тех же данных leveldb занимает только 8 Мб (с быстрым сжатием).

LMDB env info,

VERSION=3
format=bytevalue
type=btree
mapsize=1073741824
maxreaders=126
db_pagesize=4096

Чтобы проверить, почему размер файла LMDB больше, я перебрал все ключи и значения в базе данных. Общий размер всех ключей и значений составляет 10 МБ.

Но фактический размер файла составляет 21 МБ. Оставшийся размер файла 11Mb (21Mb - 10Mb) используется для каких целей???!!.

Если я сожму данные перед положением операции, только 2Mb уменьшится

Почему размер файла базы данных LMDB превышает фактический размер данных?

Есть ли способ уменьшить это?

1 ответ

База данных больше, чем исходный файл, потому что lmdb требуется выполнить некоторую загрузку, чтобы сохранить сортировку данных. Кроме того, есть издержки, потому что даже если ваша запись (ключ + значение), скажем, 1 КБ, lmdb выделяет фиксированный размер пространства для их хранения. Я не знаю фактическую стоимость. Но эти накладные расходы всегда ожидаемы.

Сжатие плохо работает на небольших записях.

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

Другие вопросы по тегам