避免热点的 Bigtable 行键方案?
Bigtable row key scenario to avoid hotspotting?
避免热点的 Bigtable 行键方案?
一家公司需要您在 Google Bigtable 中创建一个模式,以允许对过去 2 年的记录进行历史分析。收到的每条记录每 15 分钟发送一次,其中包含设备的唯一标识符和数据记录。最常见的查询是查询给定设备在给定日期的所有数据。您应该使用哪种模式?
- 一个。行键:日期#device_id,列数据:data_point
- 乙。 Rowkey: date, Column data: device_id, data_point
- C.行键:device_id,列数据:日期,data_point
- D.行键:data_point,列数据:device_id,日期
- E.行键:日期#data_point,列数据:device_id
上面的最佳选择是什么?
根据 Bigtable schema documentation:
Rows are sorted lexicographically by row key.
这意味着为了避免热点,常见查询应该 return 行结果是顺序的。
本质上,您想要查询具有给定日期和设备 ID 的行。 Google Cloud Bigtable 允许您通过特定行键前缀查询行。由于最常见的是查询给定设备和日期的所有数据,因此设备和日期需要是行前缀查询的一部分,并且必须是行键中的前两个条目。
你有2种解决方案。
Big Table 使用 rowkeys 强制组织 about
创建 Lexigoraphy 字典
1 - 在每个 rowkey(前缀)之前添加一个字母以强制 Big Table 创建一个词典编纂索引,将您的行分布在字母表中,并避免在 i/o 期间发生冲突。这种技术称为 Salted Table.
例如
123
456
789
101112
131415
a123
a456
b789
b101112
c131415
2- 您可以使用 MD5 哈希,避免在 hasing 之前重复前缀,这样可以保证前缀的多样性,这样 Big Table 就可以将行键分布到实例的磁盘上。
避免热点的 Bigtable 行键方案?
一家公司需要您在 Google Bigtable 中创建一个模式,以允许对过去 2 年的记录进行历史分析。收到的每条记录每 15 分钟发送一次,其中包含设备的唯一标识符和数据记录。最常见的查询是查询给定设备在给定日期的所有数据。您应该使用哪种模式?
- 一个。行键:日期#device_id,列数据:data_point
- 乙。 Rowkey: date, Column data: device_id, data_point
- C.行键:device_id,列数据:日期,data_point
- D.行键:data_point,列数据:device_id,日期
- E.行键:日期#data_point,列数据:device_id
上面的最佳选择是什么?
根据 Bigtable schema documentation:
Rows are sorted lexicographically by row key.
这意味着为了避免热点,常见查询应该 return 行结果是顺序的。
本质上,您想要查询具有给定日期和设备 ID 的行。 Google Cloud Bigtable 允许您通过特定行键前缀查询行。由于最常见的是查询给定设备和日期的所有数据,因此设备和日期需要是行前缀查询的一部分,并且必须是行键中的前两个条目。
你有2种解决方案。 Big Table 使用 rowkeys 强制组织 about
创建 Lexigoraphy 字典1 - 在每个 rowkey(前缀)之前添加一个字母以强制 Big Table 创建一个词典编纂索引,将您的行分布在字母表中,并避免在 i/o 期间发生冲突。这种技术称为 Salted Table.
例如
123 456 789 101112 131415
a123 a456 b789 b101112 c131415
2- 您可以使用 MD5 哈希,避免在 hasing 之前重复前缀,这样可以保证前缀的多样性,这样 Big Table 就可以将行键分布到实例的磁盘上。