Существует ли ограничение для суб-баз данных в LMDB?
Публикация здесь, так как я не смог найти форумы для хранилища ключей lmdb.
Есть ли ограничение для суб-баз данных? Какое разумное количество суб-баз данных одновременно открыто?
Я хотел бы иметь ~200 баз данных, что кажется большим и ясно указывает на то, что моя модель неверна. Я предполагаю, что мог бы переделать и встроить идентификатор каждого БД в сам ключ и сохранить только один БД, но тогда у меня есть более длинные ключи, а также я не могу удалить базу данных, если это необходимо.
Мне интересно, если LMDB уже использует какие-то внутренние префиксы для ключей. Любые предложения, как решить эту проблему приветствуются.
2 ответа
Вместо того, чтобы каждый раз вызывать mdb_dbi_open, сохраняйте собственную карту с именами базы данных для дескрипторов базы данных, возвращаемых из mdb_dbi_open. Повторно используйте эти дескрипторы для жизни вашей программы. Это позволит вам иметь несколько баз данных в среде и предотвратить накладные расходы с помощью mdb_dbi_open.
Если вы читаете документацию для mdb_env_set_maxdbs.
В настоящее время умеренное количество слотов дешевое, но огромное количество становится дорогим: 7-120 слов на транзакцию, и каждый mdb_dbi_open() выполняет линейный поиск открытых слотов.
http://symas.com/mdb/doc/group__mdb.html
Лучший способ узнать это - проверить производительность вызова функции mdb_dbi_open, чтобы убедиться в ее приемлемости.