【问题标题】:HBase Row Key DesignHBase 行键设计
【发布时间】:2016-09-20 15:49:28
【问题描述】:

我正在使用 Hbase 和 phoenix 进行交互式分析,我正在尝试为物联网项目设计我的 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。

在列族中,我们将拥有传感器的值和元数据的倍数。

我的问题是这个 hbase 行键设计用于表示我们希望 ID 为 1 的集群的所有传感器都有效的请求?

我还想把 Sensor_ID、TimeStamp 放在键中,并将所有的根放在列族中,但这种设计我不确定它是否适合我的要求。

我对这个项目的第三个想法是结合 Neo4j 生根和 hbase 的数据。

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

【问题讨论】:

  • 您知道给定客户端可能拥有的最大项目/集群/传感器数量吗?
  • 每个传感器生成多少数据点?
  • @Gevorg 不,我没有想到任何最大数量,它是前 10 和前 60 传感器,因此每个传感器每天可能会生成大约 1440 个数据点,最近我试图查找时间序列像opentsdb这样非常适合hadoop生态系统的数据库,有什么建议吗?
  • 我认为你在正确的轨道上。确保深入了解数据是如何存储在 HBase 中的,以及 OpenTSDB 如何定义架构以解决时间序列数据域。阅读这两种技术的文档/手册是值得的。

标签: neo4j hbase phoenix nosql


【解决方案1】:

您似乎正在处理时间序列数据。将 HBase 与时间序列数据(或其他形式的单调递增键)一起使用的主要风险之一是 hotspotting。这是一种危险的情况,可能会出现并使您的集群表现为单台机器。

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

OpenTSDB 密钥具有以下结构:

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

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

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

附:我认为这个项目中没有 Neo4J 的空间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多