google-cloud-firestore - 大型集合性能的 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)
.....
所以我会有主要的集合关系,然后每个文档将代表一个用户,他将有两个集合 - 关注和关注者,在这些集合中,我将存储带有 id、name、email 等数据的文档。然后当 user1 想要看到他的追随者,我会得到关系/userId_1/followers下的所有文件,如果他想看看他关注的人,我会得到关系/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 跟随 user2 所以如果我是 {myUserId},我想获取我关注的所有人我会查询关系集合 where user1 = myUserId 如果我想获取所有关注我的人,我会查询关系集合其中 user2 = myUserId 因为每个文档代表关系 user1 跟随 user2。
所以我的问题是哪种方式查询数据更有效。在第一种情况下,每个用户都会收集他的追随者/关注者,我只会得到文件,在第二种情况下,关系将有许多代表 user1->follows->user2 关系的文件。我知道我会按查询函数返回的文档数量来计费,但是如果需要搜索大型集合,它会有多快。
解决方案
集合大小与查询的性能或成本无关。两者都完全取决于结果大小(文档数)的大小。因此,查询 100 个文档中的 10 个文档的执行和成本与查询 100,000 个文档中的 10 个文档相同。10 的大小是这里唯一重要的东西。
推荐阅读
- apache-spark-sql - 总计计数列与总计
- docker - Docker:在网络上强制内部容器通信
- html - 我的 html 页面中的图像被推离中心的问题
- ios - Swift:未调用 Twilio 委托函数
- python - 如何将数据插入 MongoDB(Python、Pymongo)
- postgresql - 错误:[PostgreSQL 错误] 无法检索 PostgreSQL server_version_num:传输端点未连接
- firebase - Flutter Firebase 身份验证新更新
- ios - 我可以将 info.plist 视为资产吗?
- javascript - JavaScript:在重复项中写入数组 localStorage 结果 - 为什么?
- python - 无法将变量添加到表中