Firestore 在云函数内写入比本地运行函数慢得多

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

我有一个 firebase 函数,可以生成一些数据并将其存储到 firestore 数据库中。这些文件通常约为 20 个。我并行地写它们,看起来像这样:

const proms = (routines.map((routine: any) =>
    [
        admin.firestore().collection("Routines").doc(routine.id).set(JSON.parse(JSON.stringify(routine)), { merge: true }),
        admin.firestore().collection("Routines").doc(routine.id).collection("Exercises").doc("Exercises").set({ exercises: JSON.parse(JSON.stringify(exercises)) }, { merge: true })
    ]
));

return Promise.all(
    proms.reduce((acc, val) => acc.concat(val), []) ?? []
);

当我在本地运行我的函数(使用 firebase 模拟器)但使用实际的远程 firestore 数据库时,该函数在 500-1000 毫秒内完成,但当我部署我的函数时,需要 7-10 秒(使用完全相同的 firestore 数据库)。

这种差异怎么可能?为什么我的 firestore 在我的 firebase 函数中写入这么慢?

firebase google-cloud-firestore google-cloud-functions
1个回答
0
投票

首先,将模拟器的性能与实际云服务的性能进行比较并不是一个公平的主张。模拟器只不过是云服务行为的非常简单的近似,并且不具有任何相同的可扩展性或性能特征。这是在完全不同的硬件上运行的完全不同的代码。

在您的问题中,您没有说明如何对这段代码进行基准测试,所以我将猜测并说您正在观察 Cloud Functions 中“冷启动”的效果。这是一个众所周知且“有据可查”的问题,我不会在这里重复任何细节 - 您可以在网络上搜索“Cloud Functions 冷启动”以了解更多信息。 我的建议是,如果您有兴趣了解仅文档写入的行为而不是整个 Cloud Functions 系统,则编写几行代码来进行基准测试并仅记录这些写入而不记录其他内容。一般来说,我希望完全在 Google Cloud Platform 内进行的读写速度比来自外部(包括您的个人计算机)的读写速度更快。但您需要这些特定的基准来确定观察这一点。

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