gpt4 book ai didi

google-cloud-firestore - 基于不存在文档的 Firestore 事务(集合级别锁定不可用)

转载 作者:行者123 更新时间:2023-12-02 02:43:06 25 4
gpt4 key购买 nike

基于 this所以回答我开始知道 firestore 在事务中没有集合级别锁定。就我而言,在写入集合之前,我必须确保用户集合中的用户名字段是唯一的。为此,我编写了一个执行此操作的事务:

  1. 对 users 集合执行查询以检查是否存在 username=something 的文档
  2. 如果确实存在,则失败并从交易中返回错误
  3. 如果它不存在,只需为我要更新/创建的用户 ID 运行写入操作。

现在这里的问题是,如果两个客户端同时尝试运行此事务,则两个客户端都可能查询集合,并且由于集合未锁定,一个客户端可能会插入/更新集合中的文档,而另一个客户端将看不到它。

我的假设是否正确?如果是,那么如何处理这种情况?

最佳答案

您尝试执行的操作实际上不可能以原子方式执行,因为无法在无法使用 ID 识别的文档上安全地进行交易。这里的问题是,只有您可以get() 要添加或修改的特定文档时,事务才“安全”。由于您无法使用文档中的字段值get() 文档,因此您不知所措。

如果您想确保 Firestore 中任何内容的唯一性,则需要将该唯一性编码到文档 ID 本身中。在最简单的情况下,您可以使用用户名作为新集合中文档的 ID。如果这样做,您的事务可以简单地通过用户名get() 所需的文档,检查它是否存在,如果不存在则写入文档。否则,交易可能会失败。

请记住,因为有 limitations为了在 Firestore 中记录 ID,如果您的用户名可能违反规则,您可能需要对该用户名进行转义或编码。

关于google-cloud-firestore - 基于不存在文档的 Firestore 事务(集合级别锁定不可用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63250390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com