【发布时间】:2018-12-22 00:53:21
【问题描述】:
Bigtable 行键场景避免热点?
一家公司需要您在 Google Bigtable 中创建一个架构,以便对过去 2 年的记录进行历史分析。传入的每条记录每 15 分钟发送一次,并包含设备的唯一标识符和数据记录。最常见的查询是针对给定设备在给定日期的所有数据。您应该使用哪种架构?
- A.行键:date#device_id,列数据:data_point
- 乙。 Rowkey:日期,列数据:device_id,data_point
- C. Rowkey: device_id, Column data: date, data_point
- D. Rowkey: data_point, Column data: device_id, date
- E.行键:date#data_point,列数据:device_id
上面的最佳选择是什么?
【问题讨论】:
-
这是一道作业题吗?请参阅How do I ask and answer homework questions? 了解更多信息。如果是这样,请对其进行注释。你认为它应该是什么,为什么?您看过有关 Bigtable 架构设计的文档吗?
-
谢谢。是的,我知道大表文档中的规范。但是这个问题的答案选项令人困惑。
-
如果你已经阅读了模式设计文档,你应该能够从列表中消除一些明显不好的选择,留下一些,然后你可以从剩下的集合中决定哪个是最好的,给定您想要运行的最频繁的查询类型——对于每个模式和每个查询(这里只有 1 个这样的查询),考虑如何实现这样的查询,并查看哪个模式提供了这样一个查询的最有效的实现.希望这会有所帮助。
-
是的,它不能是A,B,E,因为它以Date开头,这可能导致字典排序填充每个节点。我在这里对 C 或 D 选项感到困惑。只是 deviceid 可能会导致日期和数据点出现多个版本的 Column 数据。将 data_point 作为行键,我不确定这是否真的可以查询。您能否提供 C 或 D 中哪个是最佳选择的输入。 [我知道 deviceid#date 的行键将是这里的最佳选择,但想从上面的可用选项中了解最佳选择]
-
Bigtable 具有内置的单元格版本控制:列中的每个值都有一个关联的 64 位时间戳,因此您可以在单行中为单列写入多个数据点,按时间键控.这有帮助吗?
标签: bigtable google-cloud-bigtable