如何最好地缓存 bigquery table 以快速查找单个行?
How best cache bigquery table for fast lookup of individual row?
我在 bigquery 中有一个原始数据 table,它有数亿行。我 运行 每 24 小时执行一次计划查询以生成一些聚合结果 table 在 3300 万行 (6gb) 的标记中,但可能会缓慢增长到大约其当前大小的两倍。
我需要一种方法在单独的事件驱动管道中通过 id 快速访问查找聚合 table 一次获取一行。即一个进程被通知 A 刚刚采取了行动,我们从聚合中知道这个人的历史是什么 table?
显然 bigquery 是生成聚合的正确工具 table,但不是快速查找的正确工具。所以我需要将它偏移到像 firestore 这样的辅助数据存储。但这样做的最佳流程是什么?
我可以设想几个策略:
1) 安排将 agg table 转储到 GCS。启动数据流作业以将 gcs 转储的内容流式传输到 pubsub。创建一个无服务器函数来监听 pubsub 主题并将行插入 firestore。
2) 计算引擎上的一个长 运行ning 脚本,它直接从 BQ 流式传输 table 和 运行s 插入。 (似乎比策略 1 慢)
3) 安排将 agg table 转储到 GCS。以可以通过 gcloud beta firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/
直接导入到 firestore 的方式进行格式化
4) 也许是某种直接针对 bigquery 执行查找的数据流作业 table?以前没有玩过这种方法。不知道成本/性能如何。
5) 我没有考虑过的其他选项?
理想的解决方案是允许我在几毫秒内快速访问一个聚合行,这将允许我将数据附加到实时事件。
在我应该遵循的策略中是否有明显的最佳赢家?
请记住,您还可以按 ID 对 table 进行 CLUSTER - 使您的查找查询更快,消耗的数据更少。不过,他们仍然需要一秒以上才能 运行。
您还可以设置从 BigQuery 到 CloudSQL 的导出,以获得亚秒级结果:
请记住,现在 BigQuery 可以直接从 CloudSQL 中读取,如果您希望它成为 "hot-data" 的真实来源:
我在 bigquery 中有一个原始数据 table,它有数亿行。我 运行 每 24 小时执行一次计划查询以生成一些聚合结果 table 在 3300 万行 (6gb) 的标记中,但可能会缓慢增长到大约其当前大小的两倍。
我需要一种方法在单独的事件驱动管道中通过 id 快速访问查找聚合 table 一次获取一行。即一个进程被通知 A 刚刚采取了行动,我们从聚合中知道这个人的历史是什么 table?
显然 bigquery 是生成聚合的正确工具 table,但不是快速查找的正确工具。所以我需要将它偏移到像 firestore 这样的辅助数据存储。但这样做的最佳流程是什么?
我可以设想几个策略:
1) 安排将 agg table 转储到 GCS。启动数据流作业以将 gcs 转储的内容流式传输到 pubsub。创建一个无服务器函数来监听 pubsub 主题并将行插入 firestore。
2) 计算引擎上的一个长 运行ning 脚本,它直接从 BQ 流式传输 table 和 运行s 插入。 (似乎比策略 1 慢)
3) 安排将 agg table 转储到 GCS。以可以通过 gcloud beta firestore import gs://[BUCKET_NAME]/[EXPORT_PREFIX]/
4) 也许是某种直接针对 bigquery 执行查找的数据流作业 table?以前没有玩过这种方法。不知道成本/性能如何。
5) 我没有考虑过的其他选项?
理想的解决方案是允许我在几毫秒内快速访问一个聚合行,这将允许我将数据附加到实时事件。
在我应该遵循的策略中是否有明显的最佳赢家?
请记住,您还可以按 ID 对 table 进行 CLUSTER - 使您的查找查询更快,消耗的数据更少。不过,他们仍然需要一秒以上才能 运行。
您还可以设置从 BigQuery 到 CloudSQL 的导出,以获得亚秒级结果:
请记住,现在 BigQuery 可以直接从 CloudSQL 中读取,如果您希望它成为 "hot-data" 的真实来源: