Облачная функция Firestore.транзакция против get () => update () - PullRequest
0 голосов
/ 26 октября 2018

У меня есть документ, содержащий поле, которое представляет собой массив целых чисел, этот документ создается один раз в день, 7 дней в неделю с помощью триггера onCreate().Мне нужно подсчитать вхождения каждого элемента в массиве.В другом приложении я сделал это с get() затем set() (или update() в этом отношении).Я запустлю цикл for в массиве и добавлю все обещания в массив обещаний, и в конце: Promise.all{promisesArray}.

Только что узнал о транзакциях, и он работает нормально для моего самого базового JavaScript.

Мой вопрос: какой из них мне следует использовать, какова польза от использования транзакции в моем случае, если таковая имеется?Документ создается администратором, а не конечным пользователем, это не значит, что он будет создан миллионами пользователей.

Ниже приведен код, который я использую для подсчета случаев:

// Ref.get() then Ref.update()
promisesArray.push(docRef.get()
    .then(doc => {
        return docRef.update('count', doc.data().count + 1);
    })).catch(error => {
    console.log("Error" + error);
});

// Using a Transaction
promisesArray.push(firestore.runTransaction(transaction => {
    return transaction.get(docRef)
        .then(doc => {
            return transaction.update(docRef, {
                count: doc.data().count + 1
            });
        });
}).catch(error => {
    console.log("Error" + error);
}));

1 Ответ

0 голосов
/ 26 октября 2018

Если вы знаете, что документ может быть написан только одной программой в любое время, вам не нужна транзакция.Целью транзакции является обработка ситуации, когда несколько пользователей / программ могут пытаться написать документ одновременно.Или вам нужно атомарно обновить пакет документов за одну операцию записи, чтобы обеспечить согласованность между всеми документами.

Если вы пишете только один документ в облачной функции во время onCreate, то вы, вероятно, неМне нужна транзакция.Если вам нужно, чтобы несколько документов появлялись в один и тот же момент времени в результате некоторых распространенных вычислений, вам, вероятно, нужна транзакция.

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