【问题标题】:Bigtable/BigQuery pricing when inserts depend on lookups插入时的 Bigtable/BigQuery 定价取决于查找
【发布时间】:2017-04-17 11:15:57
【问题描述】:

我有一个用传统 SQL 编写的简单概念验证应用程序。我需要将其扩展到更大的大小(可能有数万亿行、数 TB 或 PB 大小)。我正在尝试提出如何使用 Google 的 Bigtable/BigQuery/Dataflow 完成此操作的定价模型。

根据我从 Google 的定价文档中收集到的信息,Bigtable 是根据处理必要的 QPS 所需的节点和所需的存储来定价的,而 BigQuery 是根据每个查询的大小来定价的。

但是当您插入到表中时实际上需要查找同一个表时会发生什么?这是否意味着您必须在每个刀片中考虑额外的成本因素?如果我的总列大小为 1TB,并且我必须在每次额外插入之前对该列执行SELECT,那么每次插入操作是否会收取 5 美元的费用?我是否必须调整我的逻辑以适应这种定价结构?比如把桌子分成一组小桌子等等?

非常感谢您提供任何澄清,以及指向 Bigtable/BigQuery/Dataflow 定价示例的链接,而不是 Google 网站上提供的内容。

【问题讨论】:

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


    【解决方案1】:

    我是 Google Cloud Bigtable 的产品经理。

    如果不深入了解用例,很难给出详细的答案。例如,当您需要在进行插入之前进行查找时,查询的复杂性是多少?它是一个任意的 SQL 查询,还是可以通过主键查找来解决?数据集有多大?

    如果您只需要通过键进行查找,那么您可以使用Bigtable(与 HBase 一样,只有一个键:行键),并且每个行键查找速度很快并且确实不需要扫描整个列。

    如果您需要复杂的查找,您可以使用:

    • Google BigQuery,但请注意,根据this answer,对列的每次查找都是一次完整扫描,尽管如another answer 中建议的那样,如果有帮助,您可以对数据进行分区以扫描更少的数据

    • Google Cloud Datastore,这是一个文档数据库(类似于 MongoDB),允许您在某些字段上设置索引,因此您可以根据这些属性进行搜索

    • Google Cloud SQL,这是 MySQL 的托管服务,但虽然它可以扩展到 TB,但它不能扩展到 PB,因此这取决于您在插入之前需要查询的数据集有多大

    最后,如果您的用例进入 PB 范围,我强烈建议您发送电子邮件至 get in touch with Google Cloud Platform folks 并与我们的架构师和工程师交谈,为您的特定用例确定正确的整体解决方案,因为可能还有其他优化如果我们能更详细地讨论您的项目,我们就能做到。

    【讨论】:

      【解决方案2】:

      关于 BigQuery,您可以按天对数据进行分区。因此,如果您只需要查询最后几天的费用,那么费用将是针对该日期的,而不是针对整个表格的。

      另一方面,您需要重新考虑数据管理。选择仅追加和基于事件的数据流可以帮助您避免在同一张表上进行查找。

      【讨论】:

        【解决方案3】:

        因此每次插入操作会向我收取 5 美元吗?

        是的,任何时候您扫描该列 - 除非您的结果是可缓存的(见 query caching),否则您将需要为整个列的大小付费,这很可能不是您的情况

        我必须调整我的逻辑吗...?

        是的。
        “将表分解为一组较小的表”(使用 Table wildcard functions 进行分片)或 Partitioning 是适合您的方式

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-03
          • 1970-01-01
          • 2018-12-11
          • 1970-01-01
          • 2018-05-31
          • 2017-01-01
          • 1970-01-01
          • 2020-05-26
          相关资源
          最近更新 更多