HBase行密钥设计

时间:2016-09-20 15:49:29

标签: neo4j hbase phoenix nosql

我使用Hbase和phoenix进行交互式分析,我试图为我的hot项目设计一个iot项目,但我不确定我是否正在进行右。

我的数据库可以表示为:

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

我所做的是(Client_ID,Project_ID,Cluster_ID,Building_iD,SensorID)的复合主键

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

我们可以使用分离器#1#2#454等指定多个群集或构建 如果我们没有节点,我们会插入0。

在列系列中,我们将获得传感器的值并将meta_data倍增。

我的问题是这个hbase行密钥设计是否为我们希望ID为1的集群的所有传感器都有效的请求?

我还想把Sensor_ID,TimeStamp放在密钥中并将所有root权限放在列系列中,但是这个设计我不确定它是否适合我的请求。

我对这个项目的第三个想法是将neo4j与数据的生根和hbase结合起来。

任何人都有类似问题的经验来指导我设计这个数据库的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

您似乎正在处理时间序列数据。使用HBase与时间序列数据(或其他形式的单调增加密钥)的主要风险是hotspotting。这是可能出现的危险情况,使您的集群表现为单个计算机。

你应该在HBase之上考虑OpenTSDB因为它很好地解决了这个问题。最重要的是要了解它如何设计HBase schema/key。请注意,时间戳不在密钥的前导部分,并且它假定了一些不同的metric_uid>>>从节点和区域服务器的数量(这对于平衡群集至关重要)。

OpenTSDB密钥具有以下结构:

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

根据您的具体使用情况,您应该适当地设计metric_uid(可能是传感器读数独有的复合键)以及标签。标签将在数据聚合中发挥重要作用。

注意:从v2.0开始,OpenTSDB引入了Trees的概念,这对于导航&#39;非常有帮助。您的传感器读数并促进聚合。我不太熟悉它们,但我认为你可以创建一个层次结构来帮助确定哪些传感器与哪个客户端,项目,集群,构建等相关联......

P.S。我不认为Neo4J在这个项目中有空间。