做etl,設計hbase有段時間了,雖然還是很不成熟,但是有點小小經驗,做個筆記
hbase暫不談他負載均衡,容災效能這堆,只說他在應用上的一些小小經驗作為第一節
先談談rowkey cf cq的設計
keyvalue的結構是
-------------
----
--------key---
--------
--------
------------
--------
key length
value length
row length
rowcolumn
family length
column
family
column
qualifer
time stamp
key type
value
hbase的儲存資料結構是基於b+tree的lsm tree
所以設計好rowkey cf cq是提高hbase查詢速度的關鍵,尤其是rowkey,因為如果一次匹配只在rowkey就可以字首匹配出,則將省略了遍歷了巨大的cq。
rowkey
在工作中的物理模型,通常現在考慮建立在哪個維度上,因為通常會對這個維度進行操作,如對資訊中人這個維度進行建模,就需要將人的唯一標識放在rowkey中(有時維度的標識不會只有乙個名詞性屬性,如地理位置:經度+維度)。
之後需要考慮對於這個物理模型中的通用屬性,如時間戳,資料來源型別等這種通用屬性,也需要拼接在rowkey中,舉個例子人id_long.max-time_sourceid這樣的乙個rowkey,就可以在人這個維度上,找到時間段time上執行資料來源sourceid的記錄了。
cf對於hbase的cf,個人不太建議使用,首先hbase的cf不是很成熟,在region split和file split的時候,多個cf的效果都不好;而且在設計上,cf的確在理論上可以在乙個表建立多個維度,但是多個cf在實際中的優點暫時沒有看出來(可能是因為工作侷限性所導致)
cq對於cq,因為是b+tree的最後一層,而且hbase這個列式儲存不對key進行壓縮(很可惜,可能不想違背列式儲存資料只在最後資料獲取才解壓的原則),所以首先不建議把cq設計的過長。cq也是支援字首匹配的,而且因為hbase是列式儲存,非結構化得資料,所以cq上可以有value這樣的值,在反向索引中,會經常這樣設計。
反向索引
hbase是列式儲存,所以沒有索引這樣的東西。但是要是想通過hbase表中列的值,獲得rowkey,那麼就需要反向索引了,反向索引一般rowkey就是查詢內容如手機號值,或查詢型別_查詢內容,cq為主表rowkey,value可以設定為一些權重,時間戳等附加資訊,或是主表rowkey中一些常用資訊,如人的姓名,這樣就可以減少一次查詢
統計資料探勘中,關聯和統計恐怕是各佔半壁江山,比起關聯,統計還是比較簡單的。
統計是按照新的維度,對現有的資訊進行分類,並獲得所要的維度屬性,如次數,top等等。
設計的物理模型為:rowkey:yyyymmdd_long.max-count_人id cq:人屬性型別 value: 人屬性值
在統計時,只需要對人+天這兩個維度做分類,同時需要sourceid為某某**,做求和計算,就可以得出count值,在最後儲存時,儲存成物理模型的樣子就可以了。
下一節的物理模型想談談建模
第一節綜述
shader是什麼?shader是著色器。渲染流水線的概念?渲染流水線的工作任務在於由乙個三維場景出發,生成一張二維影象。渲染流程分為3個階段 應用階段 幾何階段 光柵化階段。1 應用階段 由cpu負責實現,由開發者主導。最重要的輸出是渲染所需的幾何資訊,即渲染圖元。這些渲染圖元傳遞給幾何階段。2 ...
第一節 熱機
一.熱機 內燃機是熱機的一種,以汽油或柴油為燃料 二.汽油機 練1.三.柴油機 練2.從能量轉化的角度看,一台四衝程內燃機在乙個迴圈中 1 哪個衝程存在著化學能轉化為內能的過程?2 哪個衝程存在著內能轉化為機械能的過程?3 哪個衝程具有很明顯的機械能轉化為內能的過程?練3.關於單缸四衝程內燃機,下列...
第一節 linux c編譯
在linux中開發c或c 程式的步驟 先用vim編輯c或c 程式 c儲存為.c c 儲存為.cc 或.cpp檔案 對於.c格式的c檔案,可以採用gcc或g 編譯 對於 cc cpp格式的c 檔案,應該採用g 進行編譯 gcc編譯過程 gcc所支援字尾名 預處理階段 對包含的標頭檔案 include ...