在大型 Firestore 文档上使用 select() 查询与在多个文档之间拆分数据有何影响?

问题描述 投票:0回答:1

我希望在 Firestore 中存储大量分箱时间序列数据。每个键都是标记该分箱周期开始的时间戳(例如“1716505200”)。

我希望能够有效地检索数据,同时最大限度地减少我执行的文档读取次数。我发现您可以使用 Node.js SDK 中的 select() 来应用字段掩码。由于我知道数据库中的每个键(因为分箱过程总是定期进行),我想我可以使用 select() 来获取特定时间范围内的一组键。

这引出了我的问题 - 在单个文档 (1MiB) 中放置接近最大数量的数据点并使用 select() 获取其中的某些部分有什么缺点?据我了解,与在较小的文档之间分割数据相比,这将最大限度地减少读取次数,并且不会产生任何进一步的成本。我认为潜在的缺点是对性能的影响。是否有任何关于使用 select() 与完整抓取多个文档的效率的信息?另外,我关于选择不会产生进一步费用的说法是否错误?

我目前采用的方法是每个文档存储 24 小时的数据。目前这工作正常,但我意识到如果我采用“单文档”方法,我可以节省多少阅读量。

node.js google-cloud-platform google-cloud-firestore
1个回答
0
投票

在单个文档 (1MiB) 中放置接近最大数量的数据点并使用 select() 获取其中的某些部分有缺点吗?

除了阅读文档所消耗的带宽之外,拥有接近 1 MiB 的文档没有任何缺点。由于您计划使用

select()
并仅获取您感兴趣的字段,因此根本没有任何缺点。

据我了解,与在较小文档之间分割数据相比,这将最大限度地减少读取次数,并且不会产生任何进一步的成本。

是的,这是正确的。您只需支付一次读取文档的读取操作以及读取这些字段所消耗的带宽。

我认为潜在的缺点是对性能的影响。

我没有发现您的方法存在性能问题。

另外,我关于选择不产生进一步费用的说法是否正确?

是的,你错了。

如果您想监控 Firestore 文档的大小,您还可以使用名为 Firestore 文档大小 的 Firebase 扩展,其中:

每次在指定的 Firestore 集合中添加/更新新文档时,都会在指定的实时数据库位置创建键值对。

© www.soinside.com 2019 - 2024. All rights reserved.