我们使用数据存储作为持久性后端在Google App Engine上运行应用程序 . 目前,应用程序主要具有“OLTP”功能和一些初步报告 . 在实施报告时,我们遇到使用数据存储区和GQL处理大量数据(数百万个对象)非常困难 . 为了使用适当的报告和商业智能功能增强我们的应用程序,我们认为最好设置ETL过程以将数据从Datastore移动到BigQuery .
最初我们考虑将ETL过程实现为App Engine cron作业,但看起来Dataflow也可用于此 . 我们有以下设置流程的要求
-
能够通过使用BigQuery的非流API将所有现有数据推送到BigQuery .
-
完成上述操作后,只要使用流API在Datastore到BigQuery中更新/创建任何新数据,就将其推送 .
我的问题是
-
Cloud Dataflow是否适合实施此管道?
-
我们能够推送现有数据吗?一些种类有数百万个对象 .
-
实施它的正确方法应该是什么?我们正在考虑两种方法 . First 方法是通过pub / sub,即现有数据创建一个cron作业并将所有数据推送到pub / sub . 对于任何新的更新,在DataStore中更新数据的同时将数据推送到pub / sub . Dataflow Pipeline将从pub / sub中选择它并将其推送到BigQuery . Second 方法是在Dataflow中创建一个批处理管道,它将查询DataStore并将任何新数据推送到BigQuery .
问题是这两种方法可行吗?哪一个更好的成本?有没有比上面两个更好的其他方式?
谢谢,
rizTaak
2 回答
另一种使用第三方解决方案将数据加载到Google BigQuery的方法 . 他们有很多here . 他们中的大多数是有偿的,但有免费的one数据加载频率有限 . 在这种情况下,您不需要编写任何代码 .
数据流绝对可以用于此目的 . 事实上,Dataflow的可扩展性应该使流程快速且相对容易 .
你的两种方法都应该有效 - 我会优先考虑使用批处理管道来移动现有数据,然后通过Cloud Pub / Sub处理新数据的流管道 . 除数据移动外,Dataflow还允许对数据本身执行任意分析/操作 .
也就是说,BigQuery和Datastore可以直接连接 . 例如,请参阅BigQuery文档中的Loading Data From Cloud Datastore .