Пожарная транзакция в «каждом цикле» или цикл в транзакции - PullRequest
0 голосов
/ 10 октября 2019

У меня есть цикл, который добавляет данные в базу данных Firestore, используя транзакцию.

jQuery.each(objIN, function (key, value) {
    var product = products.doc(key);
    db.runTransaction(function (transaction) {
        return transaction.get(product).then(function (doc) {
            ...
            ...
            transaction.update(product, {
                productQTY: newProductQTY,
                [warehouseIN]: newSelectedWarehouseQTY

            });

        });

    }).then(function (newProductQTY) {
        console.log("New product qty ", newProductQTY);
    }).catch(function (err) {
        // This will be an "population is too big" error.
        console.error(err);
    });
})

Можно ли так делать или лучше помещать циклы внутри транзакции. Каков наилучший вариант для обновления firestore оптом?

1 Ответ

0 голосов
/ 10 октября 2019

Существуют два оператора массового обновления, которые поддерживает Firestore (транзакция и пакет), чтобы обеспечить согласованность данных в нескольких документах. При использовании массового обновления выигрыша в производительности нет. Фактически, если в обновлении нет необходимости согласованности между документами, часто быстрее запускать отдельные небольшие обновления, поскольку есть возможность распараллелить эти обновления (в коде на стороне клиента).

Итак: да, то, что вы делаете, хорошо. :)

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