如何为传感器网络设计 HBase 架构?
Posted
技术标签:
【中文标题】如何为传感器网络设计 HBase 架构?【英文标题】:how to design HBase schema for sensor network? 【发布时间】:2013-09-23 01:41:27 【问题描述】:我是这个大数据世界的新手。作为一个课程项目,我正在研究传感器网络,并希望将传感器数据存储在 HBase 上。目前数据存储在 mysql 数据库中。我正在尝试将此数据加载到 HBase 中。但是数据增长得如此之快,并且查询变得非常缓慢。 这是 MYSQL 表模式:SensorLog(sensorID, userID,time,date)。 所以这个表保存了一个传感器触发日志。对于每个用户(总共 45 个用户),他的公寓里有 25 个运动传感器。每次用户在他的公寓中移动时,都会触发一个传感器,并且此事件将记录到此表中。主要问题是在特定时间间隔和日期内为特定用户触发了哪些传感器。 我想出了三个HBase 模式,我只是想问问你对它们的看法。在这些模式中,我将时间表示为一天中的秒数,即 0-86400 范围内的整数。
Schema1:行键:日期;列族:时间 cq:(t0-t86400);简历:(用户ID,传感器ID)
Schema2: Rowkey: (Date,userID);列族:时间 cq:(t0-t86400);简历:(传感器ID)
Schema3: Rowkey: (Date,userID);列族:时间 cq:(s1-s25);简历:(时间)
能否请您告诉我哪种架构更好、更高效? 感谢您提前提供任何帮助。
【问题讨论】:
你在做什么查询?得到? mapreduce? 你查询的怎么样了?你知道你想要什么具体的活动吗? 我们基本上是在寻找运动模式。所以目前 MySQL 查询正在寻找在特定时间间隔和日期为特定用户触发的传感器。我实际上不确定在 HBase 中哪种查询策略更有效(地图减少或获取)。有什么推荐吗? 【参考方案1】:45 个人和 25 个传感器看起来不像是你想要存储在 HBase 中的东西。
如果您仍然热衷于使用 HBase,那么关键设计应该由您的读写模式驱动。 例如,假设每个用户每秒只能进行几次测量,并且用户数量会影响负载,那么行键 userId、时间戳和传感器 ID 的复合键似乎是有意义的,其中值是读数
最后,您可能想查看OpenTSDB,它是开源的,基于 HBase 构建,用于大规模存储时间序列测量。你可以看到它的架构here
【讨论】:
感谢您的 cmets。系统平均每 5 秒为每个用户记录一次事件,我们正在捕获自 2005 年以来的数据!所以你可以想象得到的数据真的很大。但是,查询始终是特定于用户的,我的意思是所有查询都以用户 ID 作为条件。 一个事件会产生多少数据? 我提到的键可以有效地检索用户的数据 - 但如果您正在寻找运动模式,您可能需要考虑将数据存储在图形数据库中,如 titan (github.com/thinkaurelius/titan/wiki) 或 neo4J ( neo4j.org) 或将数据存储在 Hadoop(不是 Hbase)中并使用 Apache Giraph giraph.apache.org 这里是一个例子。假设客厅里有 4 个传感器(A、B、C、D)来捕捉房间四个角度的运动。今天上午 8:00 到 8:03,根据传感器序列的运动模式为:(A,8:00),(A,8:01),(B,8:02),(C, 8:03)。现在的问题是,与今天大致相同或接近的时间间隔相比,过去哪一天的运动模式最相似?首先要知道一个距离度量,我们想出了一个。第二个问题是我们如何有效地扫描传感器时间序列的历史来得到答案?感谢您的帮助:) 我不明白图表在这里有什么帮助?!你能解释一下吗?感谢您的帮助。以上是关于如何为传感器网络设计 HBase 架构?的主要内容,如果未能解决你的问题,请参考以下文章