【问题标题】:Bigtable row key - start with date only?Bigtable 行键 - 仅以日期开头?
【发布时间】:2017-05-30 14:40:54
【问题描述】:

Bigtable 文档警告不要单调增加行键,例如时间戳。

这种情况怎么办:

  • 行键以日期开头,以随机 GUID 结尾(例如2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4
  • 在 24 小时内,大多数情况下,写入和读取的日期相同

这是否会导致问题,或者一旦 Bigtable 意识到大多数读取/写入在同一日期持续 24 小时,它会在当前日期有效地拆分节点吗?

我需要查询日期,所以它似乎是这个或开头的分片标识符(例如A#2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4)。分片标识符使查询更加复杂,所以我只想在需要时使用它。

【问题讨论】:

  • 您的用例是什么?您需要扫描顺序行,还是只进行随机点读/写?
  • 我的用例是很多具有相同日期戳的写入(24 小时内相同的日期戳)——日期相同,但日期之后的 GUID 每次写入都会不同.然后我对同一日期的所有行进行扫描。使用 Dataflow 进行写入和读取。
  • 我还想知道我是否可以将日期放在行键的末尾并使用*#2017-01-01 之类的通配符执行 RowKeyFilter。这样,写入将分散在平板电脑上,但我不确定查询的效率如何。
  • 如果你总是存储基于日期的数据,并且你不需要随机读取,但总是想在一整天内读取整个数据集,你最好使用日期分区表使用 BigQuery 而不是 Bigtable。此外,如果您将日期放在行键的末尾(使用您的 *#2017-01-01 示例),则需要对 Bigtable 进行全表扫描,因此效率不高。我认为按日期划分的 BigQuery 表更适合这种特定用例,因为您希望始终通过 Dataflow 扫描一整天的数据,而不是访问特定行。
  • 非常感谢!

标签: google-cloud-bigtable


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

一般来说,在行键前加上日期或时间戳是 Bigtable 中的一种反模式,因为在每个新的一天,所有新的读取和写入都将转到一个新的平板电脑,这将成为 Bigtable 集群的热点.

理想情况下,您应该将日期或时间戳放在行键的末尾,并使用主标识符(例如用户帐户的哈希或设备 ID)作为前缀。

这假设您只在 Bigtable 中进行随机读取和写入,并且您不需要扫描一整天的数据(日期前缀允许您这样做),或者如果您需要扫描一个日期范围(查找从日期 A 到日期 B 的所有数据)。

如果您的用例主要是基于日期的完整扫描,那么带有日期分区表的 BigQuery 可能是更好的方法。如果您只需要随机读取和随机写入,则最好将日期作为后缀。

此外,如果您发送到 Bigtable 的请求数量相对较少——例如,数百或低个位数的数千个请求/秒,您可以使用日期前缀,它会正常工作,但如果您决定大幅扩大规模,请小心,因为使用此架构设计,您将无法每秒处理数十万个请求。

如果您可以对您的用例提供更多说明(请参阅有问题的评论),这也将有助于指导答案。

【讨论】:

    猜你喜欢
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多