我正在使用 LMDB++(LMDB 的 C++ 包装器),但收到此错误:
抛出“lmdb::map_full_error”实例后调用终止
什么():mdb_put:MDB_MAP_FULL:达到环境 map 大小限制
一些谷歌搜索告诉我,LMDB 中的默认 map_size 设置得很低。我该如何增加map_size?
最佳答案
默认的 LMDB 映射大小为 10 MiB,这对于大多数用途来说确实太小了。
使用 C++ wrapper 设置 LMDB 映射大小,您应该在创建 LMDB 环境之后、打开环境或创建事务之前立即调用 lmdb::env#set_mapsize()
。
下面是一个将 map 大小增加到 1 GiB 的基本示例:
/* Create and open the LMDB environment: */
auto env = lmdb::env::create();
env.set_mapsize(1UL * 1024UL * 1024UL * 1024UL);
env.open("./example.mdb", 0, 0664);
如果您要计算如上例所示的大 map 大小,请注意在整数文字上包含适当的类型后缀(UL
或 ULL
),或者否则您可能会遇到静默整数溢出,并想知道为什么 map 大小没有增加到您的预期。
另请参阅 LMDB 底层 C 函数的文档 mdb_env_set_mapsize()
有关 map 尺寸如何工作的权威说法。
关于c++ - LMDB 增加map_size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31820976/