hbase行键设计

3b6akqbq  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(483)

我正在使用hbase和phoenix进行Interactive分析,我正在尝试为iot项目设计我的hbase行键,但我不确定我是否做得对。
我的数据库可以表示为:

Client--->Project ----> Cluster1 ---> Cluster 2 ----> Sensor1
Client--->Project ----> Building ----> Sensor2
Client--->Project ----> Cluster1 ---> Building ----> Sensor3

我所做的是一个复合主键(客户机id、项目id、集群id、建筑id、传感器id)

(1,1,1#2,0,1)
(1,1,0,1,2)
(1,1,1,1,3)

我们可以用一个分隔符#1#2#454等指定多个集群或建筑,如果没有节点,则插入0。
在columns系列中,我们将得到传感器的值和多个元数据。
我的问题是,这个hbase行键设计对于一个请求来说是有效的,这个请求说我们希望集群的所有传感器都具有id 1?
我还想把sensor\u id,timestamp放在键中,把所有的根放在列族中,但是我不确定这个设计是否适合我的要求。
我对这个项目的第三个想法是将neo4j与hbase结合起来进行根处理和数据处理。
有没有人有过类似问题的经验来指导我设计这个数据库的最佳方法?

gijlo24d

gijlo24d1#

似乎你在处理时间序列数据。将hbase用于时间序列数据(或其他形式的单调递增键)的主要风险之一是热点。这是一个危险的场景,可能会出现并使您的集群表现为一台机器。
您应该考虑在hbase之上使用opentsdb,因为它很好地解决了这个问题。最重要的一点是要了解它是如何设计hbase模式/键的。请注意,时间戳不在键的前导部分,它假定有许多不同的 metric_uid >>>从属节点和区域服务器的数量(这对于平衡的集群是必不可少的)。
opentsdb密钥具有以下结构:

<metric_uid><timestamp><tagk1><tagv1>[...<tagkN><tagvN>]

根据您的具体用例,您应该设计您的 metric_uid 以及标签。标签将在数据聚合中发挥重要作用。
注意:从v2.0开始,opentsdb引入了树的概念,这对“导航”传感器读数和促进聚合非常有帮助。我对它们不太熟悉,但我假设您可以创建一个层次结构来帮助确定哪些传感器与哪个客户机、项目、集群、建筑等相关联。。。
p、 我认为在这个项目中没有neo4j的空间。

相关问题