Firestore 查询大型集合性能

Ale*_*len 3 google-cloud-firestore

我正在制作一个用户可以互相关注的应用程序。为了决定如何在 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)
.....
Run Code Online (Sandbox Code Playgroud)

所以我会有主要的集合关系,然后每个文档将代表一个用户,他将有两个集合 - 关注者和关注者,在这些集合中我将存储带有 id、姓名、电子邮件等数据的文档。然后当 user1 想要时看到他的关注者,我会在“relationships/userId_1/followers”下获取所有文档,如果他想查看他关注的人,我会在“relationships/userId_1/followers”下获取文档

我也想过这样做:

relationships(coll)
----{user5id_user4id}(document)
--------user1:"user5id" (field)
--------user2:"user4id" (field)
.........(other fields)
----{user4_user5}(document)
--------user1:"user4id" (field)
--------user2:"user5id" (field)
.........(other fields)
Run Code Online (Sandbox Code Playgroud)

我将有一个主要集合关系,其中每个文档代表一个以下关系,文档名称将是firstUserId_secondUSerId(意味着firstUserId跟随secondUserId),并且我还有两个字段user1和user2,它们将存储两个用户的id,其中user1跟随user2所以如果我是 {myUserId},我想获取所有我关注的人,我将对关系集合进行查询,其中 user1 = myUserId 如果我想获取所有关注我的人,我将对关系集合进行查询其中 user2 = myUserId 因为每个文档都表示关系 user1 跟随 user2。

所以我的问题是哪种方式查询数据会更有效。在第一种情况下,每个用户都会有他的关注者/关注者的集合,我只会获取文档,在第二种情况下,关系将有许多代表 user1->follows->user2 关系的文档。我知道我将按查询函数返回的文档数量付费,但是如果需要搜索大型集合,那么速度会多快。

Dou*_*son 8

集合大小与查询的性能或成本无关。两者完全由结果大小(文档数量)的大小决定。因此,查询 100 个文档中的 10 个的执行效果和成本与查询 100,000 个文档中的 10 个文档的执行和成本相同。10 的大小是这里唯一重要的事情。

另请参阅:查询随结果集的大小而不是数据集的大小而缩放