Bigtable docs警告单行增加行键,如时间戳。
这种情况怎么样:
2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4
)这是否会导致问题,或者一旦Bigtable意识到大多数读/写在24小时内的同一日期,Bigtable会在当前日期有效地拆分节点吗?
我需要查询日期,所以看起来它或者是开头的分片标识符(例如A#2017-01-01#563d7104-f976-40a2-b0d5-a1b6083c73f4
)。分片标识符使查询更复杂,因此我只想在需要时使用它。
答案 0 :(得分:3)
通常,为行键添加日期或时间戳前缀是Bigtable中的反模式,因为在每个新的一天,所有新的读写操作都将转到一个新的平板电脑,这将成为Bigtable集群的热点。
理想情况下,您应将日期或时间戳放在行密钥的末尾,并使用主要标识符(例如用户帐户的哈希值或设备ID)作为前缀。
这假设您只在Bigtable中进行随机读写,并且您不需要扫描整天的数据(日期前缀允许您这样做),或者如果您需要扫描日期范围(查找从日期A到日期B的所有数据)。
如果您的用例主要是基于日期的完整扫描,那么带有日期分区表的BigQuery可能是更好的方法。如果您只需要随机读取和随机写入,那么最好将日期作为后缀。
此外,如果您发送给Bigtable的请求数量相对较少 - 例如,数百或者低单位数千位请求/秒,您可以使用日期前缀,它可以正常工作,但是如果您决定大幅度扩展,请小心,因为您使用此架构设计无法完成数十万个请求/秒。
如果您可以提供有关您的用例的更多说明(请参阅问题评论),这也有助于指导答案。