【问题标题】:BigTable data schema designBigTable 数据架构设计
【发布时间】:2022-11-04 12:55:38
【问题描述】:

我正在学习 BigTable,并尝试为它设计一个好的架构

用户将有一个 ID(唯一),及时该用户将收到许多事件(这些事件没有 ID,只有时间戳是唯一的)。另外我想使用 bigTable 垃圾回收来使事件过期。

我将使用并且将来不会更改的查询:

1/ getAllEventsByUserId(按时间戳排序事件)

2/ getEventDetailByUserIdAndTimestamp

我对行键感到困惑。我应该将 user_id 作为行键还是 user_id#timestmap

根据我所知道的,仅使用 user_id 可以获得很好的查询 1 性能,但我不知道它是否对查询 2 不利。如果 user_id#timestamp 则查询 2 非常好,但查询 1 必须扫描会耗费大量资源的模式

【问题讨论】:

    标签: nosql google-cloud-bigtable bigtable


    【解决方案1】:

    each row key must be uniqueuser_id 不能是您的行键。因此,您应该改用user_id#timestmap

    【讨论】:

      【解决方案2】:

      您希望每个用户有多少事件?如果要将给定用户的所有事件写入一行,您认为一行可以有多大?

      如果每行小于 100 MB(行可以更大但不推荐),您可以将 userid 作为键并为每个事件使用时间戳,因为在 Bigtable 中,每个单元格都由 3 个标识符定义,rowkey + column(family+qualifier)和时间戳。时间戳还按时间倒序排序,以便更快地获取一行中最近的 N 项,并可用于垃圾收集。

      【讨论】:

        猜你喜欢
        • 2010-12-02
        • 2020-09-20
        • 1970-01-01
        • 2021-09-27
        • 2016-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多