2012-02-14 104 views
2

從RDBMS背景來看,我需要一點幫助/建議來爲以下用例設計Hbase架構。Hbase架構設計建議

這是一個使用hadoop生成應用程序的報告。現在,我們需要根據他的電子郵件ID跟蹤特定用戶的所有以前的報告生成歷史記錄。所以,數據需要被持久化,電子郵件ID,報告名稱,開始日期,結束日期,狀態。我計劃,以保持電子郵件ID作爲行鍵和其他實體爲列, EMAILID(行密鑰) - (列)應用程序的名字:所以reportName,APPNAME:的startDate,應用程序的名字:結束日期,應用程序的名字:狀態

但問題是,同一個用戶可以針對不同的日期範圍運行相同的報告。所以它會覆蓋appName:reportName和appName:status列。由於我是NoSQL世界的新手,我不知道如何解決這個問題。 有人可以建議我爲這個需求設計模式的理想方式嗎?

任何幫助將不勝感激。

感謝

+0

對於HBase,您打算用於查詢數據的模式通常比存儲的特定數據更重要。你計劃通過用戶ID進行查詢嗎?按報告ID?都?另外,您似乎需要存儲用戶運行報表的時間戳,對嗎? – 2012-02-14 05:13:08

+0

我打算通過用戶ID進行查詢。它會是正確的嗎?或者哪一個是最好的方法?我接受任何建議。是的,我還需要存儲時間戳。謝謝。 – Raj 2012-02-14 05:20:41

回答

1

根據您的預計查詢模式,這裏是我建議:

RowKey         | Column Family (appName)     | 
[email protected] HH:MM:SSS | reportName | status | startDate | endDate | 

這樣的設計爲您提供了一些優勢。首先,您可以在特定日期範圍內快速查詢(使用掃描)特定用戶的所有行。其次,通過在rowkey中的時間戳之前使用用戶的ID來避免寫入熱點。

每次用戶觸發生成報表時,您都可以向該模式寫入一行,而且您不必擔心覆蓋列(除非用戶在同一個數據庫的1/10中生成兩個報表第二)。