【发布时间】:2016-10-13 19:57:53
【问题描述】:
我注意到,我们在 Google BigQuery 上的项目计费主要由资源成本 StreamingBytes(占总成本的 90%)支配。这是因为我们使用insertAll() 方法一次流式传输一条记录。事实上,每天插入的数据量在 100GB 左右,但我们收取大约 10 倍(~1TB)的费用,因为 BigQuery 认为每行最小为 1KB,并且我们推送了许多小尺寸的行。
更改表的架构以使它们更“水平”将是降低成本的解决方案,但对于我们的管道设计方式来说并不方便。
相反,我们想利用这样一个事实,即从文件(POST 请求)或从 Google Cloud Storage 将数据加载到 BigQuery 是免费的,而且我们不需要立即访问数据。我们想要创建一个服务来“缓冲”来自不同机器(尤其是 Celery 工作人员)的行,并通过从文件加载定期将成批的行加载到 BigQuery。
第一个问题:是否已经有一项服务可以做到这一点?
在实现方面,我们考虑使用关系数据库(即 PostgreSQL)来存储缓冲数据,以便我们可以利用它处理并发事务的方式。对于这种用例来说,内存存储(如 Redis)太昂贵了。你能想出更好的解决方案吗?
我应该将数据存储在缓冲服务的什么位置?
【问题讨论】:
标签: postgresql google-bigquery buffer bigdata