gpt4 book ai didi

javascript - 来自 Google Storage 的流文件 -> 云功能 -> 存储速度非常慢或超时

转载 作者:行者123 更新时间:2023-12-02 21:00:11 25 4
gpt4 key购买 nike

我正在尝试通过我的 Cloud Function 将文件从 Google 存储桶流式传输到另一个存储桶中的新文件 - 我的实际用例是转换 csv 文件中的数据,但为了简单起见,我下面的示例删除了该部分。

我有两个桶<bucket-name><bucket-name>-copy

代码:


const util = require('util')
const stream = require('stream')
const pipeline = util.promisify(stream.pipeline);
const {Storage} = require('@google-cloud/storage')
const storage = new Storage()

exports.testStream = (event) => {

const file = event;
console.log(`Processing file: ${JSON.stringify(file)}`)
const startDate = Date.now()

async function run() {
await pipeline(
storage.bucket(file.bucket).file(file.name).createReadStream(),
storage.bucket(file.bucket+'-copy').file(file.name).createWriteStream({gzip: true})
)
console.log('Pipeline complete. Time:', Date.now() - startDate, 'ms')
}

return run().catch(console.error)

}

我将云函数部署到与存储桶相同的区域:gcloud 函数部署 testStream --runtime nodejs10 --region europe-west2 --trigger-resource <bucket-name> --trigger-event google.storage.object.finalize --内存=256MB

为了触发该函数,我将一个 100 行的小型 csv 文件复制到 src 存储桶:

gsutil cp 100Rows.txt gs://<bucket-name>

如果我在本地运行该函数,它会按预期立即执行,事实上,正如您所期望的那样,我可以在线性时间内流式传输 1M 行文件。然而,上面部署的云功能需要大约 45 秒来复制这个小文件,而较大的文件似乎永远无法完成。我还注意到管道成功日志位于函数执行ok日志。


2020-04-22 20:20:40.496 BST
testStream1142856940990219Function execution started
2020-04-22 20:20:40.554 BST Processing file: {"bucket":"my-bucket","name":"100Rows.txt"} //removed rest of object for brevity
2020-04-22 20:20:40.650 BST Function execution took 155 ms, finished with status: 'ok'
2020-04-22 20:21:33.841 BST Pipeline succeeded. Time: 53286 ms

关于我哪里出错或者这是我忽略的已知限制有什么想法吗? (我看了很多!)

谢谢

约翰

最佳答案

解决方案分为三个部分:

  1. 按照 Doug 的建议履行 promise
  2. 返回 promise
  3. 增加部署选项 --memory=2048MB,因为这意味着我们也使用一个合适大小的处理器 - 这是我没有意识到的 - 这会停止超时

我编辑了问题中的代码,但无论如何它又出现了:

const util = require('util')
const stream = require('stream')
const pipeline = util.promisify(stream.pipeline);
const {Storage} = require('@google-cloud/storage')
const storage = new Storage()

exports.testStream = (event) => {

const file = event;
console.log(`Processing file: ${JSON.stringify(file)}`)
const startDate = Date.now()

async function run() {
await pipeline(
storage.bucket(file.bucket).file(file.name).createReadStream(),
storage.bucket(file.bucket+'-copy').file(file.name).createWriteStream({gzip: true})
)
console.log('Pipeline complete. Time:', Date.now() - startDate, 'ms')
}

return run().catch(console.error)

}

部署到 gcp:

gcloud 函数部署 testStream --runtime nodejs10 --region europe-west2 --trigger-resource --trigger-event google.storage.object.finalize --memory=2048MB

关于javascript - 来自 Google Storage 的流文件 -> 云功能 -> 存储速度非常慢或超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61373836/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com