Firebase函数运行速度非常慢



我编写了一个firebase函数,该函数使用存储触发器为上传的csv文件填充firestore数据库。我使用和npm包csvtojson来完成从csv到json的转换。问题是函数运行速度非常慢。准确地说,数据需要很长时间才能反映在消防仓库中。有些情况下它根本没有反映出来。功能如下。有没有办法让这更快?

exports.fillDatabaseCSV = functions.storage
.object()
.onFinalize(async (object) => {
try {
// File and directory paths.
const filePath = object.name;
const contentType = object.contentType;
const tempLocalFile = path.join(os.tmpdir(), filePath);
const tempLocalDir = path.dirname(tempLocalFile);
const fileBasename = path.basename(filePath);
// Exit if this is triggered on a file that is not an image.
if (contentType !== "text/csv") {
return console.log("This is not a csv file");
}
// Cloud Storage files.
const bucket = admin.storage().bucket(object.bucket);
const file = bucket.file(filePath);
// Create the temp directory where the storage file will be downloaded.
await mkdirp(tempLocalDir);
// Download file from bucket.
await file.download({ destination: tempLocalFile });
console.log("The csv file has been downloaded to", tempLocalFile);
//uses csvtojson
const jsonArray = await csv().fromFile(tempLocalFile);
let firestorePromise = [];
jsonArray.forEach(async (item) => {
let user = await admin.auth().createUser({
email: item.email,
password: item.password,
displayName: item.displayName,
});
firestorePromise.push(
admin.firestore().collection("users").doc(user.toJSON().uid).set({
email: item.email,
displayName: item.displayName,
role: item.role,
})
);
if (item.role !== "normal") {
let claims = {};
claims[item.role] = true;
firestorePromise.push(
admin.auth().setCustomUserClaims(user.toJSON().uid, claims)
);
}
});
await Promise.all(firestorePromise);
//delete temp and file itself
fs.unlinkSync(tempLocalFile);
await file.delete();
return null;
} catch (error) {
console.log(error);
}
});

您的功能依赖于Firestore、云存储和Firebase Auth的操作。从一般意义上讲,产品和API总是会做它们所做的事情,并且不能加快速度。

Firestore被限制为每个集合每秒500次写入;其中文档在索引字段中包含顺序值";。你可能遇到了这个极限。这是一个硬性限制,不能增加。如果这是限制因素,那么最好考虑最佳实践文档中的一些建议,包括文档中有问题字段的索引豁免。

相关内容

  • 没有找到相关文章

最新更新