我有一个用传统SQL编写的简单的概念验证应用程序。我需要将它扩展到更大的尺寸(可能是数万亿行,多太字节或可能是千兆字节)。我试图提出如何使用Google的Bigtable / BigQuery / Dataflow来完成定价模式。
根据我从Google的定价文件中收集的内容,Bigtable的价格是根据处理必要QPS所需的节点和所需的存储空间来定价,而BigQuery则按照每个查询的价格定价。大小
但是当您插入表中实际上需要查找同一个表时会发生什么?这是否意味着您必须考虑每个插入的额外成本因素?如果我的总列大小是1TB而且我必须在每个额外的插入之前在该列上执行SELECT
,那么每次插入操作的费用是5美元吗?我是否必须调整逻辑以适应此定价结构?就像将表格分成一组较小的表格一样?
非常感谢任何澄清,以及Bigtable / BigQuery / Dataflow的详细和详细定价示例的链接,而不是Google网站上提供的内容。
答案 0 :(得分:0)
关于BigQuery,您可以根据日期对数据进行分区。因此,如果您只需要查询最后几天的费用,而不是全桌费用。
另一方面,您需要重新考虑数据管理。选择仅附加和基于事件的数据流可以帮助您避免在同一个表上进行查找。
答案 1 :(得分:0)
因为每次插入操作我会收取5美元吗?
是的,每当您扫描该列时 - 除非您的结果可以缓存(请参阅query caching),否则您需要支付全栏的大小费用
我是否必须调整逻辑......?
是。
"将桌子分成一组较小的桌子" (使用Table wildcard functions进行分片)或Partitioning是您的选择
答案 2 :(得分:0)
我是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与我们的架构师和工程师交流,为您的特定用例确定正确的整体解决方案,因为可能存在如果我们可以更详细地讨论您的项目,我们可以进行其他优化。