firebase最佳实践,以防止在firestore中重复支出.(修改文档或字段时锁定文档或字段)



假设我有一个Employees的集合和一个Departments的集合。我还设置了云功能,以便在创建或删除员工时更新部门中的员工数。

import * as functions from "firebase-functions";
import admin = require("firebase-admin");

export const handleEmployeeDeletion = functions.firestore
.document('Employee/{employeeId}')
.onDelete((snapshot, context) => {
const departmentRef = admin.firestore()
.collection("Department").doc(snapshot.data.departmentId);
return departmentRef.update({
employeesCount: admin.firestore.FieldValue.increment(-1)
})
})

如果同时删除两个员工文档,会发生什么情况?只要我使用firestore.FieldValue.increment,而不是将当前值读取到云函数的RAM,然后从那里写入更新的(可能过时的(值,我就可以安全地避免双重支出吗?

如果需要对字段进行的更改涉及更多的计算,而不是简单地递增,那该怎么办?如何在确保在读取字段的相同旧值后,多个会话不会同时修改同一字段的情况下进行更改?

如果同时删除两个员工文档会发生什么?

函数被调用两次,这意味着该值会减少两次。这也意味着你必须为两次写作付费。

只要我在使用消防用品,我就可以安全地避免双重消费吗。FieldValue.increment,而不是将当前值读取到云函数的RAM中,然后从那里写入更新的(可能过时的(值?

如果使用增量,则保存两次读取。因为如果你想先读它们,然后递增,你必须支付两次读和两次写的费用。

如果需要对字段进行的更改涉及到比简单地递增更多的计算,那该怎么办?如何在确保在读取字段的相同旧值后,多个会话不会同时修改同一字段的情况下进行更改?

在这种情况下,您需要使用一个事务,它可以确保您始终拥有一致的数据,无论执行多少并发增量操作。

相关内容

  • 没有找到相关文章

最新更新