【发布时间】:2019-01-08 10:22:58
【问题描述】:
我需要一种最佳方式来在 Firestore 中存储大量单独的字段。问题来了:
我从一些 api 获取 json 数据。它包含一个用户列表。我需要知道这些用户是否活跃,即过去 n 天内是否在线。
我无法从 api 中针对 firestore 查询列表中的每个用户,因为该列表中可能有数十万用户,因此有数十万次查询和读取,这太昂贵了。
据我所知,没有办法使用列表作为地图进行查询,所以这不是一个选项。
我最初做的是让一个云功能通过并可能每小时一次找到所有活动用户,并将它们放置在结构中的 firebase 实时数据库中:
activeUsers{
uid1: true
uid2: true
uid2: true
etc...
}
每次我需要检查哪些用户处于活动状态时,我都会获取 activeUsers 下的所有字段(限制为最多 100,000 个字段,大约 3~5 mb。
现在我打算使用它作为我的最终机制,但我刚刚意识到 Firebase 对使用的带宽量收费,而不是读取次数。因此,每当用户提出此请求时,一遍又一遍地执行此操作可能会变得非常昂贵。而且我无法从 firebase 数据库中查询每一个结果,因为虽然它不按读取收费(我认为),但执行数十万个查询会非常慢。
现在我决定使用 Cloud Firestore 作为我最后的希望,因为它主要针对读取和写入次数收费,而不是下载和上传数据。我将再次使用云功能每小时检查一次活跃用户,并尝试找出将这些数据存储在几个文档中的最佳方式。我在想每个文档有 10,000 个字段以及所有活动用户,然后当用户需要获取活动用户时,他们会获取所有文档(将是 如果总活跃用户数为 100,000,则为 10)并映射这些客户端以过滤活跃用户。
所以我真的有两个问题。 1,如果我这样做,将数据存储在firestore中的最佳方式是什么,是我建议的方式吗? 2,是否有更好的方法来针对从 api 返回的列表执行活动用户的检查?难道我都搞错了吗?
【问题讨论】:
-
没人有答案吗?
标签: firebase firebase-realtime-database google-cloud-firestore google-cloud-functions