处理 10req/s 并保存到云存储 - 推荐方法?
Process 10req/s and save to cloud storage - recommended method?
我每秒有 10 个数据请求要保存,如下所示。 CloudRun 函数完成后,我需要保存此数据。 (我的基础架构在 google-cloud-platform
上)。数据将用作机器学习的数据集。
{
"text": "1k characters",
"text2": "1k characters",
"metadata1": "enum (100 vals)",
"metadata2": "number value"
}
我计划将其作为一个未等待的函数保存到 google-cloud-storage
在一个文件夹中 或 在基于 metadata1 enum
的文件夹中。哪一个比另一个好?
这条路合适吗?
我认为
中建议的 pubsub 有点矫枉过正
我可以向你推荐两种模式,但在这两种情况下你都需要存储消息:
- 要么使用 PubSub 来堆叠消息。然后,使用 Dataflow 读取 pubsub 并下沉到 Cloud Storage。或者使用按需服务(例如 Cloud 运行)来拉取您的 PubSub 订阅并写入一个包含所有已读取消息的文件(您可以使用 Cloud Scheduler 触发您的 Cloud 运行,例如每小时一次)
- 或者将消息存储在 BigQuery 中,然后定期执行查询导出到 GCS(同样使用 Cloud Scheduler + Cloud Functions/Run)。这是我的首选解决方案,因为也许有一天,您将不得不以不同的方式处理您的消息,并对它们进行 metrics/perform 分析。
@guillaume 的回答绝对是最好的,但为了便于实施,我决定直接将它们保存到 GCS。
const saveData = async ({ text, text2, enum, number }) => {
try {
const timestamp = new Date().getTime()
const folder = enum
const fileName = `${folder}/${enum}-${timestamp}.json`
const file = bucket.file(fileName)
const contents = JSON.stringify({ text, text2, enum, number })
return file.save(contents)
}
} catch (e) {
console.log(`Failed to save file, ${e.message}`)
}
}
它增加了一些延迟,但总体而言,与 pubsub 方法相比,我估计每月服务器成本约为 10 美元,在尝试确定成本时,每月大约 50-100 美元(或更多) , 很难确定。但它确实假定每条消息在 1MB 以下时为 1MB)。
Guillaume 提供的大查询方法 appeared to have no cost 因为每月 1TB 的传输数据是免费的。在这一点上我可能是错的。稍后我可能会切换到这个。
我每秒有 10 个数据请求要保存,如下所示。 CloudRun 函数完成后,我需要保存此数据。 (我的基础架构在 google-cloud-platform
上)。数据将用作机器学习的数据集。
{
"text": "1k characters",
"text2": "1k characters",
"metadata1": "enum (100 vals)",
"metadata2": "number value"
}
我计划将其作为一个未等待的函数保存到 google-cloud-storage
在一个文件夹中 或 在基于 metadata1 enum
的文件夹中。哪一个比另一个好?
这条路合适吗?
我认为
我可以向你推荐两种模式,但在这两种情况下你都需要存储消息:
- 要么使用 PubSub 来堆叠消息。然后,使用 Dataflow 读取 pubsub 并下沉到 Cloud Storage。或者使用按需服务(例如 Cloud 运行)来拉取您的 PubSub 订阅并写入一个包含所有已读取消息的文件(您可以使用 Cloud Scheduler 触发您的 Cloud 运行,例如每小时一次)
- 或者将消息存储在 BigQuery 中,然后定期执行查询导出到 GCS(同样使用 Cloud Scheduler + Cloud Functions/Run)。这是我的首选解决方案,因为也许有一天,您将不得不以不同的方式处理您的消息,并对它们进行 metrics/perform 分析。
@guillaume 的回答绝对是最好的,但为了便于实施,我决定直接将它们保存到 GCS。
const saveData = async ({ text, text2, enum, number }) => {
try {
const timestamp = new Date().getTime()
const folder = enum
const fileName = `${folder}/${enum}-${timestamp}.json`
const file = bucket.file(fileName)
const contents = JSON.stringify({ text, text2, enum, number })
return file.save(contents)
}
} catch (e) {
console.log(`Failed to save file, ${e.message}`)
}
}
它增加了一些延迟,但总体而言,与 pubsub 方法相比,我估计每月服务器成本约为 10 美元,在尝试确定成本时,每月大约 50-100 美元(或更多) , 很难确定。但它确实假定每条消息在 1MB 以下时为 1MB)。
Guillaume 提供的大查询方法 appeared to have no cost 因为每月 1TB 的传输数据是免费的。在这一点上我可能是错的。稍后我可能会切换到这个。