我正在制作一个用户可以互相关注的应用程序。为了决定如何在Firestore中对其建模,我想知道集合大小如何影响查询性能。 我首先想到要像这样:
relationships(coll.)
----{userId_1}(document)
--------following(coll)
------------{someId1}(document)
------------{someId2}(document)
.....
--------followers(coll)
------------{someId5}(document)
------------{someId7}(document)
.....
----{userId_2}(document)
--------following(coll)
------------{someId11}(document)
------------{someId24}(document)
.....
--------followers(coll)
------------{someId56}(document)
------------{someId72}(document)
.....
因此,我将具有主要的集合关系,然后每个文档将代表一个用户,他将具有两个集合-关注者和关注者,在这些集合中,我将存储具有ID,名称,电子邮件等数据的文档。 然后,当user1要查看他的关注者时,我将在Relationships / userId_1 / followers下获取所有文档,如果他想查看他的关注者,我将在Relationships / userId_1 / following下获取文档
我也考虑过这样做:
relationships(coll)
----{user5id_user4id}(document)
--------user1:"user5id" (field)
--------user2:"user4id" (field)
.........(other fields)
----{user4_user5}(document)
--------user1:"user4id" (field)
--------user2:"user5id" (field)
.........(other fields)
我将有一个主要的集合关系,其中每个文档将代表一个以下关系,文档名称将为firstUserId_secondUSerId(意味着firstUserId跟随secondUserId),并且我还将具有两个字段user1和user2,其中将存储两个用户的ID,其中user1跟随用户2 因此,如果我是{myUserId},并且希望得到所有关注的人,我将对关系收集进行查询,其中user1 = myUserId 如果我想得到所有跟随我的人,我将对关系收集进行查询,其中user2 = myUserId 因为每个文档都代表user1跟在user2之后。
所以我的问题是查询数据的哪种方式更有效。 在第一种情况下,每个用户都将具有其关注者/关注者的集合,而我只会得到这些文档,在第二种情况下,关系将具有许多表示user1-> follows-> user2关系的文档。 我知道查询函数返回的文档数将对我收取费用,但是如果需要搜索大量的集合,将会有多快。
答案 0 :(得分:1)
集合大小与查询的性能或成本无关。两者都完全取决于结果大小(文档数)的大小。因此,从100个文档中查询10个文档的性能和成本与从100,000个文档中查询10个文档相同。大小10是唯一重要的地方。
另请参阅:Queries scale with the size of your result set, not the size of your data set