lmdb: могу ли я получить доступ к различным именованным базам данных в одной транзакции?
Я хочу записать много данных в базу данных lmdb с несколькими именованными (под) базами данных. Я сталкиваюсь со следующей проблемой:
- Для записи в одну именованную базу данных мне нужно открыть транзакцию для этой именованной базы данных.
- Это подразумевает: Для записи в другую именованную базу данных мне нужно открыть другую транзакцию.
- Две транзакции записи в одной и той же основной базе данных не могут существовать одновременно.
- Это подразумевает: мне нужно фиксировать и закрывать транзакцию каждый раз, когда я хочу переключиться с записи в одну именованную базу данных на запись в другую именованную базу данных.
- Создание и фиксация транзакций записи - очень медленная операция.
Я бы предпочел оставить одну длительную транзакцию записи для всех операций записи и зафиксировать ее один раз - когда вся работа будет выполнена.
Возможно ли это с помощью lmdb (если да, в какой момент я допустил ошибку в своем анализе)?
1 ответ
Вы можете открыть столько именованных баз данных в одной транзакции записи, сколько захотите.
Так:
- Открытая запись транзакции
- При необходимости откройте именованные базы данных и напишите в них
- Зафиксируйте транзакцию
Пока вы принимаете во внимание, что вы можете иметь только одну транзакцию записи за раз (транзакции только для чтения - не проблема), и что ваши другие транзакции будут видеть результат вашей транзакции записи только после фиксации, вы может, конечно, иметь одну длительную транзакцию записи.
Вы ошибаетесь в своем анализе на этом этапе
- Это означает: для записи в другую названную базу данных мне нужно открыть другую транзакцию.
Один дескриптор транзакции можно использовать для открытия нескольких суббаз в среде lmdb.
Примечание: одна транзакция может открыть несколько баз данных. Ссылка