Windows 的 LMDB 数据库最大大小

888*_*box 3 linux windows lmdb

当我将最大数据库大小设置为例如5G时,在Windows上,即使我只插入一小段数据,最终的数据库文件大小也会变成5G。但在linux上它工作得很好,最终的数据库大小与我插入的数据量有关。

这是我用来设置最大数据库大小的 api

rc = ::mdb_env_set_mapsize(env, 5 * 1024 * 1024 * 1024);

Windows 和 Linux 都一样。我需要为 Windows 做一些不同的事情吗?

hyc*_*hyc 5

这就是内存映射文件在 Windows 上的工作方式 - 如果您想要大小为 xxGB 的映射,Windows 要求文件大小为 xxGB。如果文件最初小于指定大小,Windows 会自行增长文件;这是没有办法解决的。

https://msdn.microsoft.com/en-us/library/windows/desktop/aa366542%28v=vs.85%29.aspx

NTFS可以支持稀疏文件,但在测试中我们发现Windows稀疏文件支持明显慢于普通文件,因此LMDB不使用它。

  • 整个问题现在已经过时了,截至 ITS#8324 http://www.openldap.org/its/index.cgi/Software%20Enhancements?id=8324 事实证明,使用底层 NT API 而不是 WIN32 API,映射文件可以逐渐增长。因此,最初的 LMDB 建议现在适用 - 最初使用尽可能大的地图大小,然后忘记它。 (3认同)