我正在开发一个应用程序,需要定期(每秒)在Firestore的字段中写入新的时间戳,此写入应在文档的特定属性等于true时执行,否则应停止定期执行-我该如何执行?
s4chpxco1#
我能提供的最简单的解决方案是使用云任务。当用户创建会话时,创建一个专用的任务队列,速率限制为每秒1个,并在队列中放置一堆任务(例如每小时3600个任务)。该任务将触发一个HTTP端点(通常是云函数或云运行端点),该端点将递增计数器。我的主要问题是关于firestore的选择,据我所知,如果你有10个用户并行,你有10个计数器,你在firestore中写10次同样的东西,不是很有效。我有两个主张:1.你可以使用一个计数器,并有几个用户对象使用相同的倒计时?1.您是否考虑过使用Cloud Memorystore内存数据库来执行每个用户的时间戳写入,并仅将结果保存在Firestore文档中?
abithluo2#
正如您在文档中看到的here,scheduled Cloud Functions的最大执行频率是每分钟执行一次。因为你需要更高的频率,你不能只使用云函数来满足你的要求,你需要使用另一种方法。
e3bfsja23#
您可以通过执行以下操作来解决此问题1.创建每分钟运行一次的云函数1.添加4个计时器,每15秒执行一次注意:根据你的逻辑,这可能会花费你...不要这样做,而不了解你的使用成本将是什么,不要忘记它。我不承担任何责任的服务器着火与此有关。
export const my15SecondTimer = functions.pubsub .schedule("* * * * *") .onRun(async (context) => { // Some logic (1) setTimeout(async () => { // Some logic (2) }, 15000); setTimeout(async () => { // Some logic (3) }, 3000); setTimeout(async () => { // Some logic (4) }, 4500); });
3条答案
按热度按时间s4chpxco1#
我能提供的最简单的解决方案是使用云任务。当用户创建会话时,创建一个专用的任务队列,速率限制为每秒1个,并在队列中放置一堆任务(例如每小时3600个任务)。
该任务将触发一个HTTP端点(通常是云函数或云运行端点),该端点将递增计数器。
我的主要问题是关于firestore的选择,据我所知,如果你有10个用户并行,你有10个计数器,你在firestore中写10次同样的东西,不是很有效。
我有两个主张:
1.你可以使用一个计数器,并有几个用户对象使用相同的倒计时?
1.您是否考虑过使用Cloud Memorystore内存数据库来执行每个用户的时间戳写入,并仅将结果保存在Firestore文档中?
abithluo2#
正如您在文档中看到的here,scheduled Cloud Functions的最大执行频率是每分钟执行一次。
因为你需要更高的频率,你不能只使用云函数来满足你的要求,你需要使用另一种方法。
e3bfsja23#
您可以通过执行以下操作来解决此问题
1.创建每分钟运行一次的云函数
1.添加4个计时器,每15秒执行一次
注意:根据你的逻辑,这可能会花费你...不要这样做,而不了解你的使用成本将是什么,不要忘记它。我不承担任何责任的服务器着火与此有关。