我正在使用 LMDB++(LMDB 的 C++ 包装器),我收到了这个错误:
terminate called after throwing an instance of 'lmdb::map_full_error'
what(): mdb_put: MDB_MAP_FULL: Environment mapsize limit reached
一些谷歌搜索告诉我,默认 map_size 在 LMDB 中设置得较低。我该如何增加map_size?
默认的 LMDB 映射大小为 10 MiB,对于大多数用途来说确实太小了。
要使用C++ 包装器设置 LMDB 映射大小,您应该lmdb::env#set_mapsize()
在创建 LMDB 环境之后、打开环境或创建事务之前立即调用。
这是一个将地图大小增加到 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);
如果您像上面的示例一样计算较大的映射大小,请注意在整数文字中包含适当的类型后缀(UL
或ULL
),否则您可能会遇到无声整数溢出,并且想知道为什么映射大小没有增加到你所期望的。
另请参阅 LMDB 底层 C 函数的文档,mdb_env_set_mapsize()
了解有关地图大小如何工作的权威词汇。