Я работал с LMDB ++ (оболочка C ++ для LMDB), и я получил эту ошибку:
terminate called after throwing an instance of 'lmdb::map_full_error'
what(): mdb_put: MDB_MAP_FULL: Environment mapsize limit reached
Некоторый поиск в Google сказал мне, что значение map_size по умолчанию установлено в LMDB. Как мне увеличить размер map_size?
Размер карты LMDB по умолчанию составляет 10 МБ, что на самом деле слишком мало для большинства применений.
Чтобы установить размер карты LMDB с помощью C ++ обертка, ты должен позвонить lmdb::env#set_mapsize()
сразу после создания среды LMDB и до открытия среды или создания транзакции.
Вот базовый пример, который увеличивает размер карты до 1 ГиБ:
/* 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
) на целочисленных литералах, иначе вы можете столкнуться с молчаливым переполнением целых чисел, и вам будет интересно, почему размер карты не увеличился до ожидаемого.
Смотрите также документацию для базовой функции C LMDB mdb_env_set_mapsize()
для авторитетного слова о том, как работает размер карты.