2013-09-23 79 views
0

我是這個大數據世界的新手。作爲課程項目,我正在研究傳感器網絡,並希望將傳感器數據存儲在HBase上。目前數據存儲在MySQL數據庫中。我試圖將這些數據加載到HBase中。但數據增長如此之快,查詢速度非常緩慢。 這裏是MYSQL表架構:SensorLog(sensorID,userID,時間,日期)。 所以這張表保存了一個傳感器發射日誌。對於每個用戶(總計45個用戶),他的公寓內有25個運動傳感器。每當用戶在他的公寓中移動時,傳感器就會啓動,並且該事件將被記錄到該表中。主要問題是傳感器在特定的時間間隔內爲特定用戶開啓了哪些傳感器。
我想出了三個HBase架構,我只是想問你的意見。在這些模式中,我將時間表示爲一天中的秒數,即0-86400範圍內的整數。如何設計傳感器網絡的HBase模式?

Schema1:Rowkey:Date;列族:時間{cq:(t0-t86400); cv:(userID,sensorID)}

Schema2:Rowkey:(Date,userID);列族:時間{cq:(t0-t86400); cv:(sensorID)}

Schema3:Rowkey:(Date,userID); Column-Family:Time {cq:(s1-s25); cv:(time)}

請您告訴我哪個模式更好更高效嗎? 我很欣賞任何幫助提前。

+1

你在做什麼樣的查詢?獲得? MapReduce的? –

+1

你打算怎麼查詢?你知道你想要什麼特定的事件嗎? –

+0

我們基本上在尋找運動模式。所以目前MySQL查詢正在特定的時間間隔和日期內爲特定用戶查找傳感器。實際上我並不確定在HBase中哪種查詢策略更有效率(地圖縮小或獲取)。任何建議? – eli

回答

0

45人和25個傳感器幾乎看起來不像你想要存儲在HBase中的東西。

如果您非常喜歡使用HBase,那麼關鍵設計應該由您的讀寫模式驅動。 例如假設每個用戶只得到幾個測量的第二和用戶的數量會影響行鍵用戶id,時間戳和傳感器ID的複合鍵似乎是有道理的,其中值將是讀

最後的負荷,您可能想看看OpenTSDB這是開源的,建立在HBase基礎之上,並且構建用於存儲大規模的時間序列測量。你可以看到它的模式here

+0

感謝您的意見。系統每個用戶平均每5秒記錄一次事件,並且自2005年以來我們正在捕獲數據!所以你可以想象得到的數據真的很大。但是,查詢總是用戶特定的,我的意思是所有的查詢都有userID作爲條件。 – eli

+0

事件產生了多少數據? –

+0

我提到的關鍵將有效地檢索用戶的數據 - 但是如果你正在尋找運動模式,你可能需要考慮將數據存儲在圖形數據庫中,比如titan(https://github.com/thinkaurelius/titan/wiki)或neo4J(http://www.neo4j.org/)或將數據存儲在Hadoop(而不是Hbase)中並使用Apache Giraph http://giraph.apache.org/ –