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

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

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

    Change Dir

    先知cd——熱愛生活是一切藝術(shù)的開始

    統(tǒng)計(jì)

    留言簿(18)

    積分與排名

    “牛”們的博客

    各個公司技術(shù)

    我的鏈接

    淘寶技術(shù)

    閱讀排行榜

    評論排行榜

    HBase的一些應(yīng)用設(shè)計(jì)tip

    1,對于HBase的存儲設(shè)計(jì),要考慮它的存儲結(jié)構(gòu)是:rowkey+columnFamily:columnQualifier+timestamp(version)+value = KeyValue in HBase,一個KeyValue依次按照rowkey,columnkey和timestamp有序。一個rowkey加一個column信息定位了hbase表的一個邏輯的行結(jié)構(gòu)。

    0XJJ{2%~G~[G]JBPMW}YE~A

    2,從邏輯存儲結(jié)構(gòu)到實(shí)際的物理存儲結(jié)構(gòu)要經(jīng)歷一個fold過程,所有的columnFamily下的內(nèi)容被有序的合并,因?yàn)镠Base把一個ColumnFamily存儲為一個StoreFile。

    3,把HBase的查詢等價(jià)為一個逐層過濾的行為,那么在設(shè)計(jì)存儲時(shí)就應(yīng)該明白,使設(shè)計(jì)越趨向單一的keyvalue性能會越好;如果是因?yàn)閺?fù)雜的業(yè)務(wù)邏輯導(dǎo)致查詢需要確定rowkey、column、timestamp,甚至更夸張的是用到了HBase的Filter在server端做value的處理,那么整個性能會非常低。

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

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

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

    7,對于帶有時(shí)間范圍的查詢,一種設(shè)計(jì)是把時(shí)間放到一個key的位置,這樣設(shè)計(jì)有個弊端就是查詢時(shí)一定要先知道查詢哪個維度的時(shí)間范圍值,而不能直接通過時(shí)間查詢所有維度的值;另一種設(shè)計(jì)是把timestamp放到前面,同時(shí)利用hashcode或者M(jìn)D5這樣的形式將其打散,這樣對于實(shí)時(shí)的時(shí)序數(shù)據(jù),因?yàn)閷⑵浯蛏?dǎo)致自動分到其他region可以提供更好的并發(fā)寫優(yōu)勢。

    8,對于讀寫的平衡,下面這張圖更好的說明了key的設(shè)計(jì):salting等價(jià)于hash,promoted等價(jià)于在key中加入其他維度,而random就是MD這樣的形式了。

    VN{YX`@[2P9AQ[@(2U8N9{0

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

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

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

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

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

    posted on 2013-01-02 19:00 changedi 閱讀(3706) 評論(1)  編輯  收藏 所屬分類: Java技術(shù)

    評論

    # re: HBase的一些應(yīng)用設(shè)計(jì)tip 2013-01-05 11:46 升降平臺車

    呵呵就是這樣的問題  回復(fù)  更多評論   

    主站蜘蛛池模板: 亚洲AV永久青草无码精品| 在线观看亚洲网站| 114级毛片免费观看| 亚洲性线免费观看视频成熟| 久久久久久久久亚洲| 在线精品亚洲一区二区| 男女免费观看在线爽爽爽视频| 国产精品va无码免费麻豆| 亚洲国产精品无码久久久不卡 | 亚洲av日韩av欧v在线天堂| 亚洲精品无码你懂的网站| 国产亚洲精品免费| 亚洲国产婷婷香蕉久久久久久| 亚洲最大在线视频| 在线观看的免费网站| 亚洲AV第一成肉网| 伊在人亚洲香蕉精品区麻豆| 久99久无码精品视频免费播放| 国产精品久久永久免费| 亚洲乱码在线观看| 热re99久久6国产精品免费| 亚洲狠狠ady亚洲精品大秀| 成年性生交大片免费看 | 九月婷婷亚洲综合在线| 亚洲免费一区二区| 亚洲天天做日日做天天欢毛片| 一区二区三区免费看| 亚洲精品无码MV在线观看| 美美女高清毛片视频黄的一免费| 四虎1515hh永久久免费| 亚洲乱码中文字幕在线| 亚洲精品无码av天堂| 亚洲av永久无码天堂网| 毛片大全免费观看| 亚洲第一成年人网站| 日韩精品免费电影| 大地资源在线资源免费观看| 日本大片在线看黄a∨免费| 久久精品无码专区免费| 99热亚洲色精品国产88| 久久久久亚洲AV无码专区网站|