【问题标题】:How to design Bigtable Key如何设计 Bigtable Key
【发布时间】:2019-05-05 23:07:24
【问题描述】:

我会在 Bigtable 中创建我的最佳密钥。我知道关键设计对于查询速度和优化至关重要。我的案例与来自网络机器的时间序列信息有关。这是一张又高又窄的桌子,有 3 列:idinfodatetime

我最常见的查询是获取每个 id 每天的所有信息。

应该如何设计密钥以获得最佳性能? id#date?

【问题讨论】:

    标签: performance google-cloud-platform google-cloud-bigtable


    【解决方案1】:
    推荐的答案 Google Cloud

    披露:我负责 Google Cloud Bigtable 的产品管理。

    我的案例与来自网络机器的时间序列信息有关。这是一张又高又窄的表格,有 3 列:id、info 和 datetime。

    鉴于 id 在行键中,我不确定您是否需要单独的 id 列。

    同样,您能否澄清一下为什么需要将datetime 作为单独的列?请注意,Cloud Bigtable 中的每个值都有一个关联的时间戳,因此您无需将单独的日期/时间存储在单独的列中。

    我最常见的查询是获取每个 id 每天的所有信息。

    应该如何设计密钥以获得最佳性能? id#date?

    我的建议是按照您的建议:id#date 作为行键,并将该日期的所有数据存储在一行中,使用每个单元格值的时间戳来区分它,这样您就可以获得每次读数的确切时间戳。

    如上所述,我认为您可以同时删除 iddatetime 列,并仅使用表格的单个列来完成此用例。

    祝你的项目好运;请告诉我们进展如何!

    【讨论】:

    • 假设我使用id#date 作为行键。而hoursWorked 作为另一个唯一的列。我可以很容易地得到“某一天的工作小时数”。我怎样才能满足未来的要求,例如“过去 7 天/30 天/生命周期内的工作小时数”并控制延迟和性能?任何有关实施这些场景的建议将不胜感激。
    • @tezz – 你问的问题与我回答的问题不同;请创建一个新问题。评论是为了澄清现有答案,而不是为了跟进/附加问题或对话。如果需要,您可以参考此问题或通过您问题中的链接获取上下文的答案。谢谢,一切顺利!
    【解决方案2】:

    这是一个复杂的话题,取决于您期望接收的数据量、id 的结构、id 的数量等。

    Cloud Bigtable 文档有一页详细介绍了这一点:

    https://cloud.google.com/bigtable/docs/schema-design-time-series

    这可能比这里提供的要好。

    应该如何设计密钥以获得最佳性能? id#date?

    假设您有很多机器,并且它们的 id 相当不同(因此它们不是热点),那么可能是 id#date#time。可以使用范围查询id和日期,效率应该很高。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-04
      • 2010-09-09
      • 2010-12-02
      • 2021-07-28
      • 2021-09-27
      • 2020-10-18
      • 2020-09-26
      • 1970-01-01
      相关资源
      最近更新 更多