【问题标题】:Bigquery denomalizationBigquery 去特征化
【发布时间】:2016-10-20 19:03:02
【问题描述】:

在 Google Bigquery(或类似数据库)中,非规范化数据和不重复数据之间的适当平衡是什么?

例如,我们有带有列的table_1

  • 日期
  • 值A
  • 值 B

另一个table_2 有列

  • 日期
  • 值 B
  • 值 C

table_1 大约比table_2 大 10 000 倍,因此创建包含所有三列的表会复制大量数据。而table_2 用于其他一些情况,所以分开可能是有意义的

感谢您的任何见解

思考这个问题的最佳方式是什么?

【问题讨论】:

  • 您是否对这些进行了成本方面的比较?请记住,目前 20 美元等于 BigQuery 上的 1TB 数据。我觉得现在的存储比我们想象的要便宜,只是我们根据需要多次重复使用数据。
  • 与其说是成本问题,不如说是数据管理问题。你说得对,现在存储是如此便宜。我担心的是,很难从加载和维护 POV 中管理大量数据。

标签: google-bigquery


【解决方案1】:

除非对数据进行非规范化会导致存储成本大幅增加(这不太可能),否则最好将其完全非规范化。

Bigquery 可能会执行得更快,并且查询会更容易设置。尽量减少存储的数据量并没有什么好处,而且当您需要重新连接表时,您需要付出查询时间和查询成本。

如果您有一些大表和小表的混合,并且您并不总是需要参考大表进行查询,则将表分开可能会带来实际好处,并且可能会降低查询成本。

【讨论】:

    【解决方案2】:

    考虑到 table1 比 table2 大 10000 倍,我不会对数据进行非规范化。如果只使用表 2 中的数据运行查询,您将支付 10000 倍以上的费用。

    为了做出决定,我将分析将列 C 与 A 连接起来的查询的频率,以了解非规范化的成本是否得到回报。 BigQuery 中的联接很昂贵,但如果不经常发生,仍然可以负担得起。

    【讨论】:

      猜你喜欢
      • 2021-05-06
      • 1970-01-01
      • 2011-04-24
      • 2015-08-07
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-28
      相关资源
      最近更新 更多