2015-11-03 3 views
3

Когда я устанавливаю максимальный размер db, который должен быть, например, 5G, в окнах окончательный размер файла db станет 5G, даже я вставляю только одну небольшую часть данных. Но на linux он отлично работает, последний размер db связан с тем, сколько данных я вставляю.LMDB максимальный размер базы данных для окон

Вот апи я использовал, чтобы установить максимально допустимый размер БД

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

Same для Windows и Linux. Нужно ли мне делать что-то другое для окон?

ответ

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

Итак, какой будет рекомендуемый способ использования lmdb для окон, когда я не знаю, сколько данных будет? – ren

+1

Весь этот вопрос сейчас устарел, как и ITS # 8324 http://www.openldap.org/its/index.cgi/Software%20Enhancements?id=8324 Оказывается, что использование базового API NT вместо WIN32 API, отображаемые файлы могут быть постепенно увеличены. Таким образом, теперь применяется исходный совет LMDB - сначала используйте как можно больше карт, насколько возможно, и забудьте об этом. – hyc

+0

@hyc: не могли бы вы помочь здесь (http://stackoverflow.com/questions/37720718/values-that-can-be-stored-in-lmdb) – Jackzz

Смежные вопросы