避免热点的 Bigtable 行键方案?

Bigtable row key scenario to avoid hotspotting?

避免热点的 Bigtable 行键方案?

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

上面的最佳选择是什么?

根据 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 就可以将行键分布到实例的磁盘上。