跟踪集合中文档的计数器变量的最佳方式



我的项目有一个功能,允许关注/关注类似于许多社交网络的人。因为我可能会经常得到这些数字的计数,所以我认为最好为follower/following计数创建一个单独的度量,这样我就不必为所有数字都.get((来获得计数。我目前正在3个选项中做出决定,以跟踪这个计数器变量。

选项1(保持计数器和收款分离(

[User Collection]           [Followers Collection]
(uid)                       (uid)
-username                   -uid_1
-follower_count             -uid_2

选项2(将计数器和数据放在单独的集合中,对数据进行子集合(

[User Collection]           [Followers Collection]
(uid)                       (uid)
-username                   -count
-[Followers]
-uid_1
-uid_2

选项3(将其全部保存在一个集合中,并使用数组在一次读取中获取所有数据+计数——担心这会导致文档超过1Mb限制(

[User Collection]
(uid)
-username
-following
-[uid_1, uid_2]                             

用这些方法做这件事有明显的问题吗?还是所有这些都会导致一天结束时相同的成本/查询时间?

任何时候,只要您有一个可以无限增长的数组,它可能都应该表示为子集合中的文档。Firestore就是这样运作的。如果你愿意,你可以有一个数组,但正如你所说,你有超过极限的风险,而且你有一个非常大的问题,这个问题比读写成本更难解决,也更昂贵。

是否使用集合或子集合完全取决于您,以及它如何最适合您的查询。由于我们不知道您的查询或您预期的安全规则,因此无法确定哪一个更好。选择一个能满足你需求的。

最新更新