Bigtable/BigQuery 插入取决于查找时的定价

Bigtable/BigQuery pricing when inserts depend on lookups

我有一个用传统 SQL 编写的简单 proof-of-concept 应用程序。我需要将其扩展到更大的大小(可能是数万亿行、数 TB 或可能是 PB 大小)。我正在尝试提出如何使用 Google 的 Bigtable/BigQuery/Dataflow.

来完成此操作的定价模型

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

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

非常感谢任何澄清,以及指向 Bigtable/BigQuery/Dataflow 比 Google 网站上提供的更详细和更详细的定价示例的链接。

关于 BigQuery,您可以根据日期对数据进行分区。因此,如果您只需要查询最后几天的费用,那么费用将按此计算,而不是完整 table.

另一方面,您需要重新考虑您的数据管理。选择仅附加和基于事件的数据流可以帮助您避免查找相同的 table.

will I be charged for each insert operation as a consequence?

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

Do I have to adjust my logic ... ?

是的。
"breaking the table into a set of smaller tables"(使用 Table wildcard functions) or Partitioning 进行分片是适合您的方法

我是 Google Cloud Bigtable 的产品经理。

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

如果你只需要通过键查找,那么你可以使用Bigtable(它和HBase一样,只有一个键:行键),并且每次通过行键查找速度快,不需要扫描整列。

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

  • Google BigQuery, but note that each lookup on a column is a full scan as per , though as suggested in ,如果有帮助,可以对数据进行分区以扫描更少的数据

  • Google Cloud Datastore是一个文档数据库(和MongoDB一样),允许你在一些字段上设置索引,这样你就可以根据这些属性

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

最后,如果您的用例进入 PB 范围,我强烈建议您 get in touch with Google Cloud Platform folks 并与我们的架构师和工程师交谈,以确定适合您的特定用例的整体解决方案,因为如果我们可以更详细地讨论您的项目,我们可能会进行其他优化。