实时传感器数据的大表行键设计



您的公司正在将实时传感器数据从工厂车间流式传输到Bigtable,他们发现性能极差。应该如何重新设计行键,以提高Bigtable在填充实时仪表板的查询中的性能?

a) Use a row key of the form <timestamp>
b) Use a row key of the form <sensorid>
c) Use a row key of the form <timestamp>#<sensorid>
d) Use a row key of the form >#<sensorid>#<timestamp>

根据文档,在这种情况下,理想的行键是什么?我认为它应该是sensid和timestamp的一个行键,但我看到一些在线文章只提到了上面作业问题的"timestamp"。请帮忙。

关于上述具体用例,我有以下相互矛盾的理论:-由于行是按字典顺序排序的,所以只使用时间戳作为行键不仅明智。(From Doc-不建议将时间戳本身用作行键,因为大多数写入都会推送到单个节点上。)-在这个用例中,由于需求是一个实时仪表板,这也可能意味着所有传感数据只能存储一个时间戳,因此可以仅基于时间戳进行实时查询。

请在这个用例中帮助获得理想的行键。

问题是,它没有指定实时仪表板显示的查询,也没有太多关于性能的信息。请参阅时间序列数据文档的模式设计,其中包含一些示例场景。如果您只有时间戳作为密钥,您可能会受到热点问题的影响。理想的密钥是##(选项D),但它总是取决于问题中不太清楚的用例。

根据Bigtable模式设计文档:

  • "不建议将时间戳本身用作行键,因为大多数写入都会推送到单个节点上"。所以这不包括选项A
  • "出于同样的原因,避免在行键的开头放置时间戳。"选项C

此外,页面上显示"此数据的行键可以将机器的标识符与数据的时间戳组合在一起(例如,machine_4223421#1425330757685)。"。这使我们选择选项D作为最佳选项。

理论上,备选方案B也是有效的,但备选方案D似乎更好。

最新更新