2015-11-03 205 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