【问题标题】:When use Google Bigquery in Google Dataflow在 Google Dataflow 中使用 Google Bigquery 时
【发布时间】:2018-12-05 15:07:48
【问题描述】:

在用 python 测试和开发了一些 Google Dataflow 模板几天后,我在质疑自己是否适合使用 BigQuery。


为什么会有这种想法?


  • BigQuery 专注于在线分析处理 (OLAP) BigQuery 可能不像在线事务处理 (OLTP) 最好的选择。

    即使知道这一点,我还是决定使用 BQ,因为它与 Google Dataflow 的兼容性更好。


  • 在开发了 Python 数据流模板的第一个版本并尝试使用一些数据后,效果很好。使用此管道的流式处理或批处理执行我没有任何特殊问题。

    当我尝试使用像 OLTP 这样的 BQ 时,问题就开始了。由于我的用例,在这里我发现了一些问题:在某些情况下,我不能使用批量更新,我必须使用单行突变,所以我必须使用 DML 语句来执行此任务。结果是执行时间开始随着数百个单行突变而显着增加。


  • 即使我假设时间会增加,我发现在 BQ 中,每天每个表只能使用 1,000 次更新。 (更多quotes)


替代品

我不确定应该使用哪些其他服务来代替 BigQuery:

  • Cloud SQL 是 Google 的 OLTP 数据库。这可能适合我的用例,但是:如果我尝试分析数据,Cloud SQL 的工作速度是否与 BQ 一样快?我将拥有许多具有数百万行的表,例如,由于处理时间长,使用 Microsfot Sql Server 对我来说是不够的。

  • Cloud SQL 如何与 apache 梁和管道一起工作?

  • 使用 Cloud SQL 并每天将数据迁移到 BigQuery 以避免在 BQ 中发生单行突变?

  • 在这种情况下,哪种服务最适合使用?

【问题讨论】:

    标签: google-bigquery google-cloud-dataflow google-cloud-sql


    【解决方案1】:

    Cloud SQL 如何与 apache 梁和管道一起工作?

    最终转换的 o/p 将是一个集合而不是一个字符串,将集合写入 cloudsql 可能会出现过载、高延迟。您可以在处理单个元素的#pardo 函数中使用 MySqlDb.connect [TableRow] [不是一个好的做法]。

    每天使用 Cloud SQL 并将数据迁移到 BigQuery 以避免在 BQ 中发生单行突变?

    您可以编写一个 python 脚本,将 cloudsql 表中的数据导出到 GCS 或 LocalStorage[您的脚本计划运行的地方],然后上传回 BQ。

    但您必须确定 NULL 值。当您将数据导出为文件时,表中的 Null 值将被替换为 ['N] 导致上传到 BQ 时不适当的行值计数。 这一切都可以通过单个 python 脚本完成。

    在这种情况下,哪种服务最适合使用?

    【讨论】:

      【解决方案2】:

      我会避免将 BigQuery 用于事务性工作负载,因为它对于更新操作往往效率很低。同样,Cloud SQL 适用于事务性工作负载,但适用于分析性工作负载。

      如果您需要一个既能处理更新又能处理分析工作负载的数据库,我建议您研究一下BigTable。您可以阅读有关如何为 GCP here 选择存储选项的信息。

      如您所说,另一种选择是在 Cloud SQL 中完成所有事务性工作,然后每天一次左右将其同步到 BigQuery 并在那里进行分析工作,例如 WePay 使用工作流 like that

      要解决您的其他问题,是的,Dataflow 可以毫无问题地与 Cloud SQL 一起使用 connecting normally,只需确保使用 connection pooling 以避免连接不足。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-02
        • 2019-05-14
        • 2018-07-29
        • 2019-12-26
        • 2019-04-22
        • 1970-01-01
        相关资源
        最近更新 更多