Firebase / firestore中的复杂数据结构

时间:2018-07-31 23:02:29

标签: firebase firebase-realtime-database google-cloud-firestore google-cloud-functions

我需要一种最优的方法来在Firestore中存储很多单个字段。这是问题所在:

我从某些api获取json数据。它包含用户列表。我需要告诉这些用户是否活跃,即过去n天内一直在线。

我无法从Firestore的api查询列表中的每个用户,因为该列表中可能有成千上万的用户,因此成千上万的查询和读取,这太昂贵了。

据我所知,在Firestore中无法将列表用作查询的地图,因此这不是一种选择。

我最初做的是通过一个云功能,大概每小时一次找到所有活动用户,然后将它们放置在结构中的Firebase实时数据库中:

activeUsers{
   uid1: true
   uid2: true
   uid2: true
   etc...
 }

每次我需要检查哪些用户处于活动状态时,我都会在activeUsers下获得所有字段(该字段最多限制为100,000个字段,大约3到5 mb。

现在我将使用它作为我的最终机制,但是我才意识到Firebase会对使用的带宽量(而不是读取次数)收费。因此,每当用户提出此请求时,一遍又一遍地执行此操作可能会变得非常昂贵。而且我无法从firebase数据库查询每个结果,因为虽然它不对每次读取收费(我认为),但是执行成千上万的查询会非常慢。

现在,我决定将Cloud Firestore用作我的最终希望,因为它主要负责读写次数,而不是下载和上传数据。我将再次使用云功能来每小时检查一次活动用户,并且我将尝试找出在一些文档中存储该数据的最佳方法。我当时在考虑所有活跃用户每个文档10,000个字段,然后当一个用户需要吸引活跃用户时,他们将获得所有文档(  10(如果有100,000个活动用户),并映射这些客户端以过滤活动用户。

所以我真的有2个问题。 1,如果我这样做,将数据存储在firestore中的最佳方法是什么,这是我建议的方法吗? 2,是否有一种更好的方法可以根据api返回的列表对活动用户执行此检查?我有错吗?

2 个答案:

答案 0 :(得分:1)

您可以使用Firebase存储将所有用户存储在一个文本文件中,然后每次下载该文本文件吗?

答案 1 :(得分:0)

嗯,这是三岁了,但我会在这里回答。 您所做的工作效率不高,也不是一个好方法。我会做如下:

  • 为所有活跃用户创建一个单独的集合。

  • 并将所有活动用户的唯一字段(例如 ID)存储在那里。

  • 然后查询该集合。需要时更新该集合。