Firebase:对大型数据集的查询

Firebase:对大型数据集的查询,firebase,Firebase,我正在使用Firebase存储用户配置文件。我试图在每个用户配置文件中放入最少的数据量(遵循文档中关于结构化数据的建议的良好实践),但由于我有超过220K个用户配置文件,在下载所有用户配置文件时,它仍然代表150MB。 当然,它会越来越大,因为我打算拥有更多的用户:) 我无法再查询这些用户配置文件,因为每次我这样做时,我都会达到100%的数据库I/O容量,因此当前使用该应用程序的用户执行的一些其他请求最终都会出错 < P>我知道,在使用查询时,FixBasy需要考虑列表中的所有数据,并从磁盘读取

我正在使用Firebase存储用户配置文件。我试图在每个用户配置文件中放入最少的数据量(遵循文档中关于结构化数据的建议的良好实践),但由于我有超过220K个用户配置文件,在下载所有用户配置文件时,它仍然代表150MB。 当然,它会越来越大,因为我打算拥有更多的用户:)

我无法再查询这些用户配置文件,因为每次我这样做时,我都会达到100%的数据库I/O容量,因此当前使用该应用程序的用户执行的一些其他请求最终都会出错

< P>我知道,在使用查询时,FixBasy需要考虑列表中的所有数据,并从磁盘读取所有数据。150MB的数据似乎太多了

那么,在达到100%的数据库I/O容量之前,是否存在实际限制?在这种情况下,Firebase查询到底有什么用处?
如果我只是有少量数据,我并不需要查询,我可以轻松下载所有数据。但是现在我有很多数据,我不能再使用查询了,当我最需要它们的时候…

这里的核心问题不是查询或数据的大小,而是当数据不经常被查询时将其加热到内存(即从磁盘加载)所需的时间。这可能只是一个开发问题,因为在生产中,此查询可能是更常用的资产

但是,如果目标是提高初始负载的性能,那么这里唯一合理的答案就是查询更少的数据。150MB是重要的。尝试通过无线网络在计算机之间复制一个150MB的文件,您会对通过internet发送该文件或从文件服务器将其加载到内存有一些了解

这里的很多内容取决于用例,您没有包括用例

假设您有相当标准的搜索条件(例如,您搜索电子邮件地址),您可以单独存储电子邮件地址,以减少查询的数据集

/search_by_email/$user_id/<email address>
/search\u by\u email/$user\u id/
现在,不是每个记录50k,而是每个记录只有存储电子邮件地址的字节数——这是一个要加热到内存中的小得多的负载


假设您正在寻找强大的搜索功能,最好的答案是使用真正的搜索引擎。例如,启用并导出到BigQuery,或使用ElasticSearch(请参见示例)。

能否举例说明您如何构建数据以及正在进行的查询?请记住,当您查询节点时,它还需要从该节点的子节点中提取所有数据。您没有提到这只发生在初始索引或我们在支持中介绍的任何其他主题中。这些都是影响结果的重要因素。此外,用例和约束对于确定特定答案非常有用。有关支持始终从用例开始的论点,请参见。