当我将最大数据库大小设置为例如5G时,在Windows上最终的db文件大小将变为5G,即使我只插入一小段数据。但是在linux上工作正常,最终的db大小与我插入的数据量有关。
这是我用来设置最大数据库大小的api
rc = ::mdb_env_set_mapsize(env, 5 * 1024 * 1024 * 1024);
Windows和Linux也是如此。我是否需要为Windows做一些不同的事情?
答案 0 :(得分:4)
内存映射文件在Windows上的工作原理 - 如果你想要一个大小为xxGB的地图,Windows要求文件的大小为xxGB。如果文件最初小于指定的大小,Windows会增加文件本身;没有办法解决这个问题。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa366542%28v=vs.85%29.aspx
NTFS可以支持稀疏文件,但在测试中我们发现Windows稀疏文件支持明显慢于普通文件,因此LMDB不能使用它。