lmdb: могу ли я получить доступ к различным именованным базам данных в одной транзакции?

Я хочу записать много данных в базу данных lmdb с несколькими именованными (под) базами данных. Я сталкиваюсь со следующей проблемой:

  • Для записи в одну именованную базу данных мне нужно открыть транзакцию для этой именованной базы данных.
  • Это подразумевает: Для записи в другую именованную базу данных мне нужно открыть другую транзакцию.
  • Две транзакции записи в одной и той же основной базе данных не могут существовать одновременно.
  • Это подразумевает: мне нужно фиксировать и закрывать транзакцию каждый раз, когда я хочу переключиться с записи в одну именованную базу данных на запись в другую именованную базу данных.
  • Создание и фиксация транзакций записи - очень медленная операция.

Я бы предпочел оставить одну длительную транзакцию записи для всех операций записи и зафиксировать ее один раз - когда вся работа будет выполнена.

Возможно ли это с помощью lmdb (если да, в какой момент я допустил ошибку в своем анализе)?

1 ответ

Вы можете открыть столько именованных баз данных в одной транзакции записи, сколько захотите.

Так:

  • Открытая запись транзакции
  • При необходимости откройте именованные базы данных и напишите в них
  • Зафиксируйте транзакцию

Пока вы принимаете во внимание, что вы можете иметь только одну транзакцию записи за раз (транзакции только для чтения - не проблема), и что ваши другие транзакции будут видеть результат вашей транзакции записи только после фиксации, вы может, конечно, иметь одну длительную транзакцию записи.

Вы ошибаетесь в своем анализе на этом этапе

  • Это означает: для записи в другую названную базу данных мне нужно открыть другую транзакцию.

Один дескриптор транзакции можно использовать для открытия нескольких суббаз в среде lmdb.

Примечание: одна транзакция может открыть несколько баз данных. Ссылка

Другие вопросы по тегам