我正在使用LMDB++ (LMDB的C++包装器),得到了以下错误:
terminate called after throwing an instance of 'lmdb::map_full_error' what(): mdb_put: MDB_MAP_FULL: Environment mapsize limit reached
一些googling告诉我,默认的map_size在LMDB中设置得很低。我如何着手增加map_size?
发布于 2015-08-11 16:44:36
默认的LMDB映射大小是10 MiB,对于大多数用途来说确实太小了。
要使用C++包装器设置LMDB映射大小,您应该在创建LMDB环境之后并在打开环境或创建事务之前立即调用lmdb::env#set_mapsize()。
下面是一个将映射大小增加到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()的文档,以获得关于映射大小如何工作的权威单词。
https://stackoverflow.com/questions/31820976
复制相似问题