如何优化我的 Cloud Function 以更有效地响应 Firestore 文档状态更改?

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

如何优化我的 Cloud Function 以更有效地响应 Firestore 文档状态更改?有没有办法使这个过程由事件驱动而不是使用定期检查?我正在寻找一种方法,最大限度地减少 Firestore 读/写并减少与轮询相关的延迟和成本。 想象一下,我启动一个程序并启动两个进程:

  1. 第一个进程不断检查文档的状态是否发生变化;如果是,则停止第二个进程。
  2. 第二个进程启动逻辑。

这是下面的示例:

// Firestore Trigger to monitor document changes
exports.monitorDocument = functions.firestore
    .document('myCollection/myDocument')
    .onUpdate((change, context) => {
        // Check the updated document status
        const newValue = change.after.data();
        const oldValue = change.before.data();

        if (newValue.status !== oldValue.status) {
            console.log('Document status changed');
            // My logic
        }
    });

// Trigger to start the routine and manage the flow
exports.startRoutine = functions.https.onRequest(async (req, res) => {
    const docRef = admin.firestore().collection('myCollection').doc('myDocument');

    // Routine
    try {
        const doc = await docRef.get();
        if (doc.exists && doc.data().status === 'active') {

            // My logic

            // After the routine, check the document again before moving to 'Execution'
            const updatedDoc = await docRef.get();
            if (updatedDoc.data().status === 'active') {
                console.log('Proceeding to execution');
                // Next logic
            } else {
                console.log('Status changed, halting execution');
            }
        }
    } catch (error) {
        console.log('Error:', error);
    }

    res.send('Process completed');
});

任何使用其他逻辑、Firestore 触发器或其他 Google Cloud 服务来管理此类工作流程的见解或示例将不胜感激。

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

有没有办法让这个过程由事件驱动而不是使用定期检查?

Firebase 的云函数确实是事件驱动的,并且始终会响应 Firebase 产品中发生的事件而触发,例如 Firebase 身份验证Cloud Firestore实时数据库Cloud Storage

我正在寻找一种方法,最大限度地减少 Firestore 读/写并减少与轮询相关的延迟和成本。

Firebase 的云函数不会进行轮询,除非您在其中编写进行轮询的代码。

看到你的代码,我可以说第一个函数将在更新匹配文档时触发,而第二个函数将在通过 HTTP 显式调用时触发。

说到速度,我认为您很可能正在经历所谓的功能冷启动。欲了解更多信息,请参阅下面的资源:

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