3

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

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

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

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

4

1 回答 1

4

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

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

NTFS 可以支持稀疏文件,但是在测试中我们发现 Windows 对稀疏文件的支持明显比普通文件慢,所以 LMDB 没有使用它。

于 2015-11-06T16:56:39.370 回答