代码之家  ›  专栏  ›  技术社区  ›  shrayus gupta

LMDB增加map_size

  •  2
  • shrayus gupta  · 技术社区  · 10 年前

    我在使用LMDB++(LMDB的C++包装器)时遇到了以下错误:

    terminate called after throwing an instance of 'lmdb::map_full_error' what(): mdb_put: MDB_MAP_FULL: Environment mapsize limit reached

    一些谷歌告诉我,LMDB中的默认map_size设置得很低。如何增加map_size?

    1 回复  |  直到 10 年前
        1
  •  5
  •   Arto Bendiken    10 年前

    默认的LMDB地图大小为10 MiB,这对于大多数用途来说确实太小了。

    使用 C++ wrapper ,你应该打电话 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() 关于地图大小如何工作的权威词汇。