2010-05-11 126 views
1

從SQL Server背景來看,我是HBase的新手,但該技術看起來非常適合我們正在做的事情,成本絕對正確!HBase模式幫助

我需要保持日誌條目列表通常我會在RDBS創建爲:

創建表的日誌 ( 用戶ID INT,SITEID INT,頁VARCHAR(50),日期SMALLDATETIME )

其中一個用戶可能在這個簡單的表中有0或1000行。典型的查詢是查找一個用戶的所有行或一個站點上的一個用戶的所有行。

這是怎麼翻譯成HBase中沒有「行鍵」並且相同的(SiteID,Page)可能會出現很多次的「映射」。我的第一個想法是UserID是一個行鍵,但我仍然不明白「列族」和其他術語,足以理解如何設置表來保存這個數據,其中一個UserID可以有很多(SiteID,Page ,日期)「行」。

任何方向感謝!

回答

0

一種方法是使複合排鍵調出你的用戶ID的+ SITEID

設置表,以保持你想爲一個給定的頁面然而,許多日誌條目,以及您的數據每次存儲爲新版本(如有必要,手動設置時間戳)。

由於HBase爲每個單元維護時間戳,因此訪問時間不需要單獨的列。

你會因此有一個表的內容類似

Row    Page 

user1:site1  www.example.com/[email protected] 
       www.example.com/[email protected] 
       www.example.com/[email protected] 
       www.example.com/[email protected] 

user1:site2  blahblah 

user2:site1  etc... 

要對付你的兩個例子請求:

爲了找到所有用戶行,你會做一個掃描(一定要設置MAXVERSION)從userx:0到userx + 1:0,然後解析出每個結果行的站點ID

要獲取特定用戶/站點的所有頁面,只需執行從userx:sitex到userx:sitex + 1 。最後我檢查了你不能在get上設置maxVersions,所以這不是一個選項。

簡而言之,列族表示您想要一起存儲的數據組...... 想必您會經常同時從它們讀取數據。將列放置在不同的系列中會導致數據被單獨存儲,因此當您只需要一列時,讀取速度會更快,但您需要讀取2個不同的位置以獲取這兩列。

當然,根據您的其他需求,您可能需要採取不同的方法。我強烈建議閱讀大表格紙以更好地理解HBase的結構(因爲它基於bigtable)。

爲了更好地理解HBase的內部,Lars George's blog也很棒。

1

我的建議是給你的用戶ID作爲Rowkey,給任何單個列家庭爲給多列家庭不必要的,只會增加採取尋求的時間,並給網站ID |日期作爲列預選賽這樣它始終是唯一的,並且該限定符的值將是您的頁面

RowKey Qualifier      Value 

001 C:site001|25/01/2013:6:17:17 www.example123.com/home 
001 C:site001|25/01/2013:6:17:18 www.example123.com/about 
001 C:site002|25/01/2013:6:30:17 www.example1123.com/ 
001 C:site003|25/01/2013:6:32:18 www.example1123.com/contact 
002 C:site001|25/01/2013:2:22:17 www.example123.com/home 
003 C:site001|25/01/2013:3:12:18 www.example123.com/about 
003 C:site003|25/01/2013:5:30:17 www.example1223.com/ 
003 C:site004|25/01/2013:6:32:18 www.exampleABC.com/contact 

`

希望工程!

1

Initialy只是把它看成

  • RowKey:預選賽:值,

代表 - 12_Aug_2013_00:00:* - 溫度 = 24, - 溼度 = 15, - FileghtsDelayed = 17

  • RowKey:預選賽:值,
  • 12_Aug_2013_00:00:溫度:24
  • 12_Aug_2013_00:00:溼度:15

現在,看起來更深邃,什麼如果我們可以將限定詞分組到列家庭中。

例如:

  • 讓基,溫度圖,溼度,AirPresureWeatherDetails
  • 允許組,組* No_FileghtsDelayed *,* No_FlightsCancelled *,作爲eventsConts

  • 我們有WeatherDetails,& eventsConts,作爲欄f amilies

我們 - Date_Hour:WeatherDetails:EventDetails: 例如,用於記錄可以表示爲

  • 12_Aug_2013_00 12_Auguest_2013 FirstHour數據:00WeatherDetails - 溫度 = 24,WeatherDetails - 溼度 = 15,事件Conts - FileghtsDelayed = 17

這種分組是優化讀取操作。