Bigtable行键方案可避免热点?

时间:2018-12-22 00:53:22

标签: bigtable google-cloud-bigtable

Bigtable行键方案可以避免热点?

公司需要您在Google Bigtable中创建一个架构,以便对过去两年的记录进行历史分析。每个进入的记录每15分钟发送一次,其中包含设备的唯一标识符和数据记录。最常见的查询是针对给定设备在给定日期的所有数据。您应该使用哪种架构?

  • A。 Rowkey:date#device_id,列数据:data_point
  • B。 Rowkey:日期,列数据:device_id,data_point
  • C。行键:device_id,列数据:日期,数据点
  • D。行键:data_point,列数据:device_id,日期
  • E。 Rowkey:date#data_point,列数据:device_id

上面最好的选择是什么?

2 个答案:

答案 0 :(得分:2)

根据Bigtable schema documentation

  

行按行键按字典顺序排序。

这意味着,为了避免出现热点,常见查询应按顺序返回行结果。

基本上,您想查询具有给定日期和设备ID的行。 Google Cloud Bigtable可让您按特定的行键前缀查询行。由于最常见的查询是给定设备和日期的所有数据,因此设备和数据必须是行前缀查询的一部分,并且必须是行键中的前两个条目。

答案 1 :(得分:0)

您有两种解决方案。 Big Table 使用 rowkeys 来制作一个 Lexigoraphy 字典

1 - 在每个行键(前缀)之前添加一个字母,以强制大表制作词典索引,将您的行分布在字母表字母中,并避免在 i/o 期间发生冲突。这种技术称为盐渍表。

例如

123 456 789 101112 131415

a123 a456 b789 b101112 c131415

2- 您可以使用 MD5 哈希,避免在使用之前重复前缀,这样可以保证各种前缀,这样大表将行键分布在实例的磁盘上。