我的项目有一个功能,允许关注/关注类似于许多社交网络的人。因为我可能会经常得到这些数字的计数,所以我认为最好为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就是这样运作的。如果你愿意,你可以有一个数组,但正如你所说,你有超过极限的风险,而且你有一个非常大的问题,这个问题比读写成本更难解决,也更昂贵。
是否使用集合或子集合完全取决于您,以及它如何最适合您的查询。由于我们不知道您的查询或您预期的安全规则,因此无法确定哪一个更好。选择一个能满足你需求的。