可以对低容量的 firestore 集合执行完整的集合扫描吗?

Is it ok to perform a full collection scan on a low volume firestore collection?

我的移动应用程序的后端是一些小的 firebase/google 云函数,它们在我的 firestore 数据库上执行各种 CRUD 操作。我遇到了一个问题,我需要每天更新一个集合中的所有文档。我有一个 cron 作业,它每天在指定时间触发该功能。为了避免进行完整的集合扫描,我尝试了一些 hacky 方法来解决无法像使用 AWS lambda 那样自调用函数的问题。最终这些都没有用。由于我不希望有大量数据(每个文档最多约 8 个字符串字段;预计最多 10,000 个文档),我在想也许完整的集合扫描实际上不会那么昂贵。有没有人有过在 firestore 上进行完整 table 扫描的经验,性能如何?

I have an expiration status field and I need this to be updated [daily] as the value of it is based on the date.

与其每天扫描整个集合,不如考虑使用 Cloud Task 在每个文档过期时准确触发每个文档。随着时间的推移,这可能会更有效,因为它会根据到期文档的数量而不是文档总数进行缩放。有关通过 Cloud Tasks 触发单个文档的示例,请参阅 Doug 的博客 post:How to schedule a Cloud Function to run in the future with Cloud Tasks (to build a Firestore document TTL).


即使您像现在这样继续执行此任务,您也不需要进行完整的 table 扫描。相反,您应该能够 use a query 基于当前日期和文档中确定它们是否过期的字段。这意味着您正在加载数据的子集。

最后,如果您需要处理的文档数量会继续增加,请实施 cursor based pagination 以便分批处理所有文档 - 而不要 运行随着文档数量的增加,内存不足。