Firestore-一些关于事务和锁定的疑虑



我正在一个耦合系统上使用云函数,当用户验证他的邮件地址时,该系统会将优惠券分配给他。

对于我的设计,我有一个/优惠券系列,预装了很多优惠券。

用户通过调用HTTP firebase函数验证他的邮件地址,我想将优惠券分配给通过名为"的字段查询的从优惠券集合中挑选一个的用户;userId";优惠券收集。

查询示例:

const pickOne = () => {
return firestore
.collection('coupons')
.where('userId', "==", 'none')
.limit(1)
}

我知道Firestore交易。

我的想法(如果可能的话(是调用pickOne作为transaction get((函数的参数,并写入值";userId";上,然后关闭并提交事务。

我的疑问和锁定系统有关:是否可以避免并发用户拥有相同的优惠券?

是的,您可以在事务中执行这种类型的查询,以有效地为用户找到单个文档,并在其中写入用户的ID,并防止其在具有相同查询的其他事务中再次使用。它只适用于后端SDK(如nodejs(,而不适用于客户端SDK。我在其他项目中也做过类似的事情。

有关详细信息,请参阅API文档。

您唯一应该注意的是,在高写压力下,事务可能会由于重试次数过多而失败。在这种情况下,您必须在代码中显示错误或手动重试。

相关内容

  • 没有找到相关文章

最新更新