rowkey設(shè)計不合理怎么解決 hbase聚合原理?
hbase聚合原理?1、存儲引擎HBase是Google的BigTable的開源實現(xiàn),底層存儲引擎是實現(xiàn)LSM-Tree數(shù)據(jù)結(jié)構(gòu)啊,設(shè)計的。中寫入數(shù)據(jù)時會先寫WAL日志,再將數(shù)據(jù)在寫寫緩存MemSto
hbase聚合原理?
1、存儲引擎
HBase是Google的BigTable的開源實現(xiàn),底層存儲引擎是實現(xiàn)LSM-Tree數(shù)據(jù)結(jié)構(gòu)啊,設(shè)計的。中寫入數(shù)據(jù)時會先寫WAL日志,再將數(shù)據(jù)在寫寫緩存MemStore中,等寫緩存達到是有規(guī)模后或滿足其他觸發(fā)條件才會flush刷寫完磁盤,這樣的話就將磁盤必掉寫變成了順序?qū)?,提高了寫性能。在這一刻刷寫磁盤都會生成新的HFile文件
2、數(shù)據(jù)模型
關(guān)與HBase的數(shù)據(jù)模型,和關(guān)系型數(shù)據(jù)類似于,包括命名空間(namespace)、表、行、列、列族、列標(biāo)準(zhǔn)限制符、單元格(cell)、時間戳等,具體詳細概念比較比較好理解就不是太多回答了。而HBase在不好算存儲數(shù)據(jù)的時候是以更加有序KV的形式組織的。
3、列族式存儲
HBase并并非行式存儲,也也不是已經(jīng)的列式存儲,只是再朝列族的列族式存儲。前面也說起了,HBase的每一列數(shù)據(jù)在底層大都以KV形式儲存的,而對于一行數(shù)據(jù),同樣的列族的不同列的數(shù)據(jù)是順序相鄰貯存的,這種模式雖然是行式存儲;而如果一個列族下只能一個列的話,那就是一種列式存儲。而我們也算HBase是一種列族式存儲。
4、關(guān)于索引
默認(rèn)情況下HBase只對rowkey做了單列索引,所以我HBase能按照rowkey進行高效率的單點可以查詢及小范圍掃描。HBase索引我還是也很單個體的,通過非rowkey列網(wǎng)上查詢性能比較低,除非對非Rowkey列做二級索引,不然的話不建議依據(jù)非rowkey列做網(wǎng)上查詢。
HBase的Rowkey設(shè)計的3個原則?
一、rowkey長度原則
rowkey是一個二進制碼流,是可以為任意字符串,最大長度為64kb,實踐應(yīng)用中好象為10-100bytes,它以byte[]形式保存,像是修改成定長。
好象越短越好,別將近16個字節(jié),注意一點原因如下:
1、目前操作系統(tǒng)大都64位系統(tǒng),內(nèi)存8字節(jié)角點,再控制在16字節(jié),8字節(jié)的整數(shù)倍利用了操作系統(tǒng)的適宜特性。
2、hbase將部分?jǐn)?shù)據(jù)加載到內(nèi)存當(dāng)中,假如rowkey過長,內(nèi)存的快速有效利用率變會下降。
二、rowkey散列原則
假如rowkey遵循時間戳的遞增,最好別將時間放在旁邊二進制碼的前面,建議將rowkey的高位字節(jié)區(qū)分散列字段處理,由程序隨即生成。低位放時間字段,這樣將增強數(shù)據(jù)均衡分布的位置,那里regionServer負(fù)載均衡的幾率。
要是不并且散列如何處理,首字段然后在用時間信息,所有該時段的數(shù)據(jù)都將集中到一個regionServer當(dāng)中,這樣的當(dāng)檢索到數(shù)據(jù)時,負(fù)載會聚集到極個別regionServer上,倒致熱點問題,會減低網(wǎng)上查詢效率。
三、rowkey任何原則
必須在設(shè)計上保證其唯一性,rowkey是明確的字典順序排序存儲位置的,因此,設(shè)計rowkey的時候,要充分利用好這個排序的特點,將偶爾會讀取文件的數(shù)據(jù)存儲到一塊,將最近可能會被ftp連接的數(shù)據(jù)扔到一塊??墒沁@里的量又不能太大,如果不是太大需要拆分到多個節(jié)點上去。
所以才良好素質(zhì)的rowkey設(shè)計,應(yīng)當(dāng)由遵循三大原則,但是能讓數(shù)據(jù)收攏,最大限度地盡量減少社會熱點問題。本節(jié)介紹幾種常用的rowkey設(shè)計方法,以供同學(xué)們怎么學(xué)習(xí)。