Bigtable 行键 - 仅从日期开始?
Bigtable row key - start with date only?
Bigtable 文档警告不要单调递增的行键,例如时间戳。
这种情况怎么办:
- 行键以日期开头,以随机 GUID 结尾(例如
2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4
)
- 在 24 小时内,写入和读取的日期大部分相同
这是否会导致问题,或者一旦 Bigtable 意识到大多数 reads/writes 在 24 小时内处于同一日期,Bigtable 是否会在当前日期有效地拆分节点?
我需要查询日期,因此开头似乎是这个或分片标识符(例如 A#2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4
)。分片标识符使查询更加复杂,所以我只想在需要时使用它。
一般来说,在行键前加上日期或时间戳是 Bigtable 中的反模式,因为在每一天,所有新的读取和写入都会转到一个新的 tablet,这将成为Bigtable 集群。
理想情况下,您应该将日期或时间戳放在行键的末尾,并使用主标识符(例如用户帐户的哈希值或设备 ID)作为前缀。
这假设您只在 Bigtable 中进行随机读写,并且您不需要扫描一整天的数据(日期前缀允许您这样做),或者如果您需要扫描一个日期范围(查找从日期 A 到日期 B 的所有数据)。
如果您的用例主要是基于日期的完整扫描,带有日期分区表的 BigQuery 可能是更好的方法。如果您只需要随机读取和随机写入,您最好将日期作为后缀。
此外,如果您发送到 Bigtable 的请求数量相对较少 — 例如,数百个或低个位数的数千 requests/sec,您可以使用日期前缀,它将工作正常,但如果您决定显着扩大规模,请小心,因为您将无法使用此架构设计完成数十万 requests/sec。
如果您可以就您的用例提供更多说明(请参阅有问题的评论),这也有助于指导答案。
Bigtable 文档警告不要单调递增的行键,例如时间戳。
这种情况怎么办:
- 行键以日期开头,以随机 GUID 结尾(例如
2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4
) - 在 24 小时内,写入和读取的日期大部分相同
这是否会导致问题,或者一旦 Bigtable 意识到大多数 reads/writes 在 24 小时内处于同一日期,Bigtable 是否会在当前日期有效地拆分节点?
我需要查询日期,因此开头似乎是这个或分片标识符(例如 A#2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4
)。分片标识符使查询更加复杂,所以我只想在需要时使用它。
一般来说,在行键前加上日期或时间戳是 Bigtable 中的反模式,因为在每一天,所有新的读取和写入都会转到一个新的 tablet,这将成为Bigtable 集群。
理想情况下,您应该将日期或时间戳放在行键的末尾,并使用主标识符(例如用户帐户的哈希值或设备 ID)作为前缀。
这假设您只在 Bigtable 中进行随机读写,并且您不需要扫描一整天的数据(日期前缀允许您这样做),或者如果您需要扫描一个日期范围(查找从日期 A 到日期 B 的所有数据)。
如果您的用例主要是基于日期的完整扫描,带有日期分区表的 BigQuery 可能是更好的方法。如果您只需要随机读取和随机写入,您最好将日期作为后缀。
此外,如果您发送到 Bigtable 的请求数量相对较少 — 例如,数百个或低个位数的数千 requests/sec,您可以使用日期前缀,它将工作正常,但如果您决定显着扩大规模,请小心,因为您将无法使用此架构设计完成数十万 requests/sec。
如果您可以就您的用例提供更多说明(请参阅有问题的评论),这也有助于指导答案。