代码之家  ›  专栏  ›  技术社区  ›  youareawaitress

如何保持大的唯一计数?

  •  0
  • youareawaitress  · 技术社区  · 6 年前

    我想保留一个用户ID的运行计数(在许多文档中),并且我不知道在FireStore的1 mib文档限制下实现它的最佳方法。理想情况下,我希望将每个唯一的用户ID存储在一个数组中,并以这种方式获取计数。这使得任务是等幂的(1)每个用户只能从数组中添加和删除自己的ID,(2)获得准确的计数和获得数组的计数一样容易。但是,数组的大小受到文档大小限制的限制,文档的大小也很小。

    另一种选择是保留一个计数器,每个用户都可以从中进行加法或减法运算。如果用户想将自己添加到集合中,客户机将首先获取counter属性的当前值并将其添加到集合中。虽然这解决了文件大小问题,但任务不是等幂的。客户端检索属性的当前值并设置该值所需的时间足以让另一个用户通过更快的连接执行相同的操作,同时拥有足够多的用户,这似乎不太可靠。

    最好的第三种选择是什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Doug Stevenson    6 年前

    如果有多个客户端正在写入同一文档,则应使用 transaction 以确保写入内容一致且不相互干扰。