我注意到我们在Google BigQuery上的项目结算主要是资源StreamingBytes
的费用(占总费用的90%)。这是因为我们使用insertAll()
方法一次流式传输一条记录。事实上,每天插入的数据大约为100GB,但我们收取的费用约为10倍(~1TB),因为BigQuery认为每行最小为1KB,我们推送的行数很小。
更改表的架构以使它们更“水平”将是降低成本的解决方案,但是对于我们的管道设计方式将不方便。
相反,我们希望利用以下事实:从文件(POST请求)或Google云端存储加载数据到BigQuery是免费的,我们不需要立即访问数据。我们想要创建一个“缓冲”来自不同机器(特别是Celery工作者)的行的服务,并通过从文件加载来定期将批量行加载到BigQuery。
第一个问题:是否有一项服务已经相同?
在实现方面,我们考虑使用关系数据库(即PostgreSQL)来存储缓冲数据,以便我们可以利用它处理并发事务的方式。内存存储(如Redis)对于这种用例来说太昂贵了。你能想到一个更好的解决方案吗?
我应该在缓冲区服务中将数据存储在哪里?
答案 0 :(得分:2)
听起来你想做的事情非常适合Apache Beam / Google Cloud Dataflow。 Beam非常适合于获取PCollections记录并将它们附加到BigQuery表。例如,请参阅Apache Beam github repo中的此示例: https://github.com/apache/incubator-beam/blob/python-sdk/sdks/python/apache_beam/examples/cookbook/bigquery_schema.py
答案 1 :(得分:0)
适合您个案的解决方案是一种名为Alooma的工具。
它可以读取文件中的所有数据并将其从Google云端存储存储桶复制到BigQuery中。您不需要为此解决方案创建缓冲服务,您的数据将直接加载到BigQuery
https://www.alooma.com/integrations/to/bigquery
您可以使用Tar或GZip打包和压缩Google云端存储分区中的文件,并且每行可以包含一个事件,一个JSON对象或一组JSON对象。
有关如何将Google云端存储连接到BigQuery的更多信息,请查看此内容:
https://support.alooma.com/hc/en-us/articles/115001940489-Google-Cloud-Storage-integration
完全披露:我曾在Alooma担任软件工程师