我想知道是否有可能检测到某个线程已经在运行Cloud Functions,并且如果可能的话还可以检测它是否正在运行特定ID的数据。我想我可以将一个变量存储在Firebase数据库中的ID的firebase内存中,该函数正在从数据库运行,并在函数运行完毕后删除该变量,但关注的是对数据库的两次写入随后又非常迅速地发生,导致初始线程无法在第二个线程检查变量是否存在之前足够快地写入内存,尤其是在来自firebase线程的冷启动时 - 在我的理解中是可变量的任何一个线程可能首先旋转的时间。
我的用例是:
让我们说实时数据库的写入发生在客户端,导致云函数的触发器运行处理程序。这个处理程序的工作是遍历并使用客户端刚刚写入的记录快照,并使用循环将解析快照中的每个记录,完成后删除它们。处理程序运行良好,直到在处理程序的作业完成之前将另一条记录写入数据库中的同一组记录,这会导致第二个处理程序线程旋转,并开始在同一组中的记录中移动记录,这将导致记录重复两次,并可能导致数据处理两次。
对于我的特定情况,我有其他解决方案,我可以使用它,但它只涉及允许每条记录像正常情况一样触发一个单独的线程。
提前致谢!
答案 0 :(得分:1)
无法跟踪正在运行的实例"内存中"对于云函数,因为每个函数调用可能在完全不同的虚拟基础上运行。相反,你最想在这里做的是在某些情况下保持某种锁定。 Firebase实时数据库using a transaction。所以你要做的事情是:
这将阻止两个函数同时处理同一个文件。但是,这意味着在路径被锁定时执行的任何函数都将被丢弃(这可能是您想要的,也可能不是。)