<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    HBase的一些應用設計tip

    1,對于HBase的存儲設計,要考慮它的存儲結構是:rowkey+columnFamily:columnQualifier+timestamp(version)+value = KeyValue in HBase,一個KeyValue依次按照rowkey,columnkey和timestamp有序。一個rowkey加一個column信息定位了hbase表的一個邏輯的行結構。
    0XJJ{2%~G~[G]JBPMW}YE~A 

    2,從邏輯存儲結構到實際的物理存儲結構要經歷一個fold過程,所有的columnFamily下的內容被有序的合并,因為HBase把一個ColumnFamily存儲為一個StoreFile。

    3,把HBase的查詢等價為一個逐層過濾的行為,那么在設計存儲時就應該明白,使設計越趨向單一的keyvalue性能會越好;如果是因為復雜的業務邏輯導致查詢需要確定rowkey、column、timestamp,甚至更夸張的是用到了HBase的Filter在server端做value的處理,那么整個性能會非常低。 

    4,因此在表結構設計時,HBase里有tall narrow和flat wide兩種設計模式,前者行多列少,整個表結構高且窄;后者行少列多,表結構平且寬;但是由于HBase只能在行的邊界做split,因此如果選擇flat wide的結構,那么在特殊行變的超級大(超過file或region的上限)時,那么這種行為會導致compaction,而這樣做是要把row讀內存的~~因此,強烈推薦使用tall narrow模式設計表結構,這樣結構更趨近于keyvalue,性能更好。 

    5,一種優雅的行設計叫做partial row scan,我們一般rowkey會設計為<key1>-<key2>-<key3>...,每個key都是查詢條件,中間用某種分隔符分開,對于只想查key1的所有這樣的情況,在不使用filter的情況下(更高性能),我們可以為每個key設定一個起始和結束的值,比如key1作為開始,key1+1作為結束,這樣scan的時候可以通過設定start row和stop row就能查到所有的key1的value,同理迭代,每個子key都可以這樣被設計到rowkey中。 

    6,對于分頁查詢,推薦的設計方式也不是利用filter,而是在scan中通過offset和limit的設定來模擬類似RDBMS的分頁。具體過程就是首先定位start row,接著跳過offset行,讀取limit行,最后關閉scan,整個流程結束。 

    7,對于帶有時間范圍的查詢,一種設計是把時間放到一個key的位置,這樣設計有個弊端就是查詢時一定要先知道查詢哪個維度的時間范圍值,而不能直接通過時間查詢所有維度的值;另一種設計是把timestamp放到前面,同時利用hashcode或者MD5這樣的形式將其打散,這樣對于實時的時序數據,因為將其打散導致自動分到其他region可以提供更好的并發寫優勢。 

    8,對于讀寫的平衡,下面這張圖更好的說明了key的設計:salting等價于hash,promoted等價于在key中加入其他維度,而random就是MD這樣的形式了。
      VN{YX`@[2P9AQ[@(2U8N9{0

    9,還有一種高級的設計方式是利用column來當做RDBMS類似二級索引的應用設計,rowkey的存儲達到一定程度后,利用column的有序,完成類似索引的設計,比如,一個CF叫做data存放數據本身,ColumnQualifier是一個MD5形式的index,而value是實際的數據;再建一個CF叫做index存儲剛才的MD5,這個index的CF的ColumnQualifier是真正的索引字段(比如名字或者任意的表字段,這樣可以允許多個),而value是這個索引字段的MD5。每次查詢時就可以先在index里找到這個索引(查詢條件不同,選擇的索引字段不同),然后利用這個索引到data里找到數據,兩次查詢實現真正的復雜條件業務查詢。

    10,實現二級索引還有其他途徑,
    比如:
    1,客戶端控制,即一次讀取將所有數據取回,在客戶端做各種過濾操作,優點自然是控制力比較強,但是缺點在性能和一致性的保證上;
    2,Indexed-Transactional HBase,這是個開源項目,擴展了HBase,在客戶端和服務端加入了擴展實現了事務和二級索引;
    3,Indexed-HBase;
    4,Coprocessor。 

    11,HBase集成搜索的方式有多種:1,客戶端控制,同上;2,Lucene;3,HBasene,4,Coprocessor。 

    12,HBase集成事務的方式:1,ITHBase;2,ZooKeeper,通過分布式鎖。 

    13,timestamp雖然叫這個名字,但是完全可以存放任何內容來形成用戶自定義的版本信息。

    posted on 2013-01-02 23:09 paulwong 閱讀(1094) 評論(0)  編輯  收藏 所屬分類: 分布式HADOOP云計算HBASE

    主站蜘蛛池模板: 最近中文字幕mv免费高清在线| 四虎国产精品免费久久影院| 亚洲永久在线观看| 国产一区二区三区在线免费观看 | 亚洲国产成人久久99精品| 国产精品久久久久久久久久免费| 瑟瑟网站免费网站入口| 久久久亚洲精品无码| 日韩a在线观看免费观看| 无码人妻AV免费一区二区三区| 亚洲乱码中文字幕在线| 亚洲国产精品成人精品无码区 | 午夜精品射精入后重之免费观看| 亚洲xxxx18| 精品亚洲综合久久中文字幕| 在线免费视频一区| 高清一区二区三区免费视频| 精品亚洲国产成人av| 久久精品国产亚洲AV香蕉| 亚洲不卡AV影片在线播放| 无码人妻久久一区二区三区免费丨 | 免费日本黄色网址| 57pao一国产成永久免费| 九九视频高清视频免费观看| 亚洲性线免费观看视频成熟| 久久精品国产69国产精品亚洲| 欧洲美熟女乱又伦免费视频| 最近高清中文字幕免费| 国产在线观看免费av站| 风间由美在线亚洲一区| 国产精品亚洲片在线va| 日韩精品一区二区亚洲AV观看| 中文字幕亚洲综合久久男男| 日韩免费视频播放| 最新中文字幕电影免费观看| 在线观看免费av网站| 青青操在线免费观看| 一级午夜免费视频| 免费国产a理论片| 在线观看亚洲视频| 亚洲JLZZJLZZ少妇|