c++ - LMDB 增加map_size

标签 c++ database lmdb

我正在使用 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 大小,请注意在整数文字上包含适当的类型后缀(ULULL),或者否则您可能会遇到静默整数溢出,并想知道为什么 map 大小没有增加到您的预期。

另请参阅 LMDB 底层 C 函数的文档 mdb_env_set_mapsize()有关 map 尺寸如何工作的权威说法。

关于c++ - LMDB 增加map_size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31820976/

相关文章:

c++ - 使用模板和基类实现灵活的数组成员

c++ - 如何将 gtk::label 与目录中文件的创建或抑制同步?

python - 如何在 Python 中管理并发 LMDB 写入?

mysql 不支持 Ruby on Rails

php - mysql历史数据和记录id

c++ - 查看LMDB的data.mdb文件的内容

c++ - Cocos2d-x setVisible 不起作用

c++ - 如何通过C++代码让主板发出蜂鸣声?

database - 哪个更影响 Access 数据库性能 : Thousands of tables or Millions of records?