4

我在 LMDB 数据库中放置了大约 11K 键和值。LMDB 数据库文件大小变为 21Mb。

对于相同的数据,leveldb 仅占用 8Mb(快速压缩)。

LMDB 环境信息,

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

为了检查为什么 LMDB 文件大小更大,我遍历了数据库中的所有键和值。所有键和值的总大小为 10Mb。

但文件的实际大小为 21Mb。剩余的文件大小为 11Mb (21Mb - 10Mb) 用于什么目的???!!。

如果我在 put 操作之前压缩数据,只有 2Mb 减少了

为什么 LMDB 数据库文件大小大于实际数据大小?

有什么办法缩小吗?

4

1 回答 1

0

数据库比原始文件大,因为 lmdb 需要做一些簿记以保持数据排序。此外,还有开销,因为即使您的记录(键 + 值)是 1kb lmdb 也会分配固定大小的空间来存储它们。我不知道实际价值。但这种开销总是意料之中的。

压缩在小型记录上效果不佳。

lmdb 不支持前缀或块压缩。你最好的选择是使用一个键值对存储,比如wiredtiger

于 2018-11-04T12:19:52.547 回答