Как сделать пакетную запись как часть транзакции - PullRequest
1 голос
/ 06 апреля 2020

Я оказался в ситуации, когда я хочу выполнить некоторые операции с базой данных, которые должны быть обработаны в одной транзакции. Одна из этих операций вводит> 500 документов, поэтому выдает ошибку, потому что она достигает

максимум 500 записей разрешено на запрос

Чтобы обойти это, Вы можете использовать пакетные записи, но я не могу понять, как выполнять пакетные записи как часть транзакции. Кажется, что transaction.commit() - это не вещь, и в документах транзакции и пакетные записи представляются двумя отдельными понятиями.

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Вообще говоря, мы используем транзакции для получения согласованных данных. Рекомендация, которую вы получите:

вы можете использовать пакетные записи

Это по той же самой причине. К сожалению, вы не можете смешивать их. Вы должны выбрать один или другой. Реалистично c говоря, и пакет, и транзакция используются для обновлений atomi c.

Транзакция похожа на пакетную, и, как указано в документах :

Все операции выполнены успешно или ни одна из них не применяется.

Основное различие между пакетной записью и транзакцией заключается в том, что пакет просто записывает, а транзакция читает и сразу после нее пишет.

Таким образом, решение в вашем случае заключается в использовании Firestore пакетно-пишет для выполнения 500 операций одновременно.

0 голосов
/ 06 апреля 2020

Как вы, вероятно, прочитали в do c:

Объект Transaction, переданный в функцию updateFunction транзакции, предоставляет методы для чтения и записи данных в контекст транзакции.

и этот объект в клиентских SDK имеет только четыре метода: get(), set(), update() и delete(), которые все принимают один документ Firestore как параметр.

С помощью Node.js Server SDK для Google Cloud Firestore вы заметите, что существует дополнительный метод getAll(), который "извлекает несколько документов из Firestore. pessimisti c блокировка всех возвращенных документов ".


Таким образом, на момент написания нет возможности" смешать "транзакцию и пакетную запись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...