2016-09-20 91 views
0

我正在使用Hbase与phoenix进行交互式分析,我试图设计一个IOT项目的hbase行键,但我不确定我是否做得对。HBase行关键设计

我的数据库可以表示成这样的:

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.

而在第e列族中,我们将具有传感器的值和倍数meta_data。

我的问题是这个hbase行的关键设计的请求,说我们希望所有传感器的ID为1的集群是有效的?

我想也只是把密钥的Sensor_ID,TimeStamp,并把所有的根系列,但这个设计我不知道它很适合我的要求。

我对这个项目的第三个想法是将neo4j用于数据的生根和hbase。

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

+0

您是否知道给定客户可能拥有的项目/群集/传感器的最大数量? – Gevorg

+0

每个传感器产生多少个数据点? – Gevorg

+0

@Gevorg不,我没有任何最大的数字,它是一个top10和top60传感器,所以它每天可以产生大约1440个数据点/传感器,最近我试图查找时间序列数据库,很适合在hadoop生态系统像opentsdb,有什么建议吗? – azelix

回答

1

看来你正在处理时间序列数据。使用HBase与时间序列数据(或其他形式的单调递增键)的主要风险一旦为hotspotting。这是可能发生的危险情况,并使您的群集表现为一台机器。

你应该考虑在HBase之上的OpenTSDB,因为它很好地解决了这个问题。要理解的最重要的一件事是如何工程师HBase schema/key。请注意,时间戳不在密钥的前面,它假设从节点和区域服务器的数量不同(这对于平衡群集是必不可少的)。

的OpenTSDB键具有以下结构:

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

根据您的具体使用情况,你应该工程师的metric_uid适当的(可能是复合键唯一一个传感器读数)以及标签。标签将在数据聚合中发挥重要作用。

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

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