LMDB увеличить map_size

Я работал с 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?

2

Решение

Размер карты 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() для авторитетного слова о том, как работает размер карты.

4

Другие решения


По вопросам рекламы [email protected]