我正在使用Firestore+Cloud Function进行一个项目;学分";余额将在许多场合更新。
对于主余额的每次更新,我们都会在单独的集合中维护一个单独的分类账,其中包含所有变动的详细信息(日期、金额等(。
代码库中有几个区域与平衡进行交互。
我正在考虑使用Firestore后台函数重试,以在每次更新余额时更新我的分类账,主要是为了避免整个代码库中的逻辑重复。
然而,权衡的结果是,在一个事务中可以做的事情现在需要两个:A( 更新余额的事务(从代码库中的任何位置(B( CF的另一笔交易,将详细信息记录到分类账
这是个坏主意吗(如果CF配置为重试(?
谢谢,
如果我正确理解了你的问题,你不需要使用两个事务。您可以很好地在同一事务中执行两次写入(一次更新和一次创建(,作为原子操作。
JS SDK的一些内容如下:
const balanceDocRef1 = doc(db, 'balances', '....');
const historyDocRef = doc(db, 'history', '....');
try {
await runTransaction(db, async (transaction) => {
const balanceDoc = await transaction.get(balanceDocRef1);
const newBalance = balanceDoc.data().balance + ....;
transaction
.update(balanceDocRef1, { balance: newBalance })
.set(historyDocRef, { amount: '...', date: '...' });
});
console.log('Transaction successfully committed!');
} catch (e) {
console.log('Transaction failed: ', e);
}