首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除Firestore中的非常大的集合

删除Firestore中的非常大的集合
EN

Stack Overflow用户
提问于 2018-08-18 10:19:25
回答 1查看 1.3K关注 0票数 2

我需要删除Firestore中非常大的集合。

最初,我使用了客户端批处理删除,但是当文档更改时,我开始用注释阻止这种删除。

不建议从iOS客户端删除集合。 不建议从Web客户端删除集合。 不建议从Android客户端删除集合。 https://firebase.google.com/docs/firestore/manage-data/delete-data?authuser=0

我切换到了文档中推荐的云功能。云函数在删除文档时触发,然后删除子集合中的所有文档,如"NODE.JS“一节中的上述链接所建议的那样。

我现在遇到的问题是,云功能似乎能够每秒钟管理大约300个删除项。如果云功能的最大运行时间为9分钟,我可以以这种方式管理多达162000的删除。但是我想删除的集合目前包含237560个文档,这使得云功能超时的时间缩短了一半。

我不能用父文档上的onDelete触发器再次触发云函数,因为这个已经被删除了(这触发了函数的初始调用)。

因此,我的问题是:在Firestore中删除大型集合的推荐方法是什么?根据文档,它不是客户端,而是服务器端,但是推荐的解决方案不适合大型集合。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-08-18 13:48:31

当您有太多可以在单个云函数执行中执行的乱七八糟的工作时,您将需要找到一种方法来分割跨多个调用的工作,或者在第一个调用之后在后续调用中继续该工作。这不是小事一桩,你必须把一些想法和工作投入到为你的特定情况构建最好的解决方案上。

对于切分解决方案,您必须弄清楚如何提前将文档删除,并让您的主函数启动从属函数(可能通过pubsub),将参数传递给它以确定要删除的碎片。例如,您可以启动一个函数,其唯一目的是删除以'a‘开头的文档。另一个有'b‘等,查询它们,然后删除它们。

对于一个连续的解决方案,您可以从一开始就开始删除文档,在超时之前尽可能地执行,记住您停止的位置,然后启动一个从属函数来获取前面停止的位置。

您应该能够使用这些策略中的一种来限制每个函数完成的工作量,但是实现细节完全取决于您。

如果由于某种原因,这些策略都不可行,那么您将不得不管理自己的服务器(可能通过App )和消息(通过pubsub)来执行单个单元的长期运行的工作,以响应云功能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51907549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档