2015-11-03 202 views
3

当我将最大数据库大小设置为例如5G时,最终的db文件大小将变为5G,即使我只插入一小块数据。但在Linux上它工作正常,最终的数据库大小与我插入的数据量有关。LMDB数据库最大窗口大小

这是我用来设置最大分贝大小

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

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

回答

3

这就是内存映射文件在Windows上的工作方式 - 如果您需要大小为xxGB的映射,Windows需要该文件的大小为xxGB。如果文件最初小于指定的大小,则Windows会增长文件本身;这是没有办法的。

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

NTFS支持稀疏文件,但在测试中我们发现的Windows稀疏文件支持比普通文件显著慢,所以LMDB不使用它。

+0

那么当我不知道会有多少数据时,在Windows上推荐使用lmdb的方法是什么? – ren

+1

这整个问题现在已经过时,从ITS#8324开始http://www.openldap.org/its/index.cgi/Software%20Enhancements?id=8324 事实证明,使用底层NT API而不是WIN32 API,映射文件可以逐步增长。因此,原有的LMDB建议现在适用 - 最初使用尽可能大的地图,并且忘记它。 – hyc

+0

@hyc:你可以在这里帮忙吗(http://stackoverflow.com/questions/37720718/values-that-c​​an-be-stored-in-lmdb) – Jackzz