Почему база данных 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.