本篇內(nèi)容主要講解“Hbase二級索引怎么實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Hbase二級索引怎么實現(xiàn)”吧!
公司主營業(yè)務:成都網(wǎng)站設計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出玉田免費做網(wǎng)站回饋大家。
apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz
hadoop-2.9.2.tar.gz
hbase-2.0.5-bin.tar.gz
Hbase中通過非rowkey查詢數(shù)據(jù)查詢速度會很慢
在Hbase中要想精確查詢一條數(shù)據(jù)所以必須使用rowkey,如果不通過rowkey查詢數(shù)據(jù),就必須逐行逐列的比較(即全表掃描),效率很低. 實際業(yè)務中需要通過多個維度快速查詢數(shù)據(jù). 例如查詢用戶的時候可能需要通過用戶名,姓名,郵箱,手機號查詢,但是把這種多維度的查詢字段都放到rowkey中,顯然是不可能的(靈活性不高,roekey的長度也是有限制的),因此二級索引的應用場景就應運而生,Phoenix已經(jīng)提供了對HBase的二級索引支持支持。
Global indexing 全局索引,適用于讀多寫少的場景
使用Global indexing在寫數(shù)據(jù)的時候開銷很大,因為所有對數(shù)據(jù)表的更新操作(DELETE, UPSERT VALUES and UPSERT SELECT),都會引起索引表的更新,而索引表是分布在不同的數(shù)據(jù)節(jié)點上的,跨節(jié)點的數(shù)據(jù)傳輸帶來了較大的性能消耗。在讀數(shù)據(jù)的時候Phoenix會選擇索引表來降低查詢消耗的時間。在默認情況下如果想查詢的字段不是索引字段的話索引表不會被使用,也就是說不會帶來查詢速度的提升。
Local indexing 本地索引,適用于寫多的場景
與Global indexing一樣,Phoenix會自動判定在進行查詢的時候是否使用索引。使用Local indexing時,索引數(shù)據(jù)和數(shù)據(jù)表的數(shù)據(jù)存放在相同的服務器中,這樣避免了在寫操作的時候往不同服務器的索引表中寫索引帶來的額外開銷。使用Local indexing的時候即使查詢的字段不是索引字段索引表也會被使用,這會帶來查詢速度的提升,這點跟Global indexing不同。對于Local Indexing,一個數(shù)據(jù)表的所有索引數(shù)據(jù)都存儲在一個單一的獨立的可共享的表中。
immutable indexing 不可變索引,適用于數(shù)據(jù)只增加不更新,而且按時間順序先后循序存儲.
不可變索引的存儲方式是write one,append only。當在Phoenix使用create table語句時指定IMMUTABLE_ROWS = true表示該表上創(chuàng)建的索引將被設置為不可變索引。Phoenix默認情況下如果在create table時不指定IMMUTABLE_ROW = true時,表示該表為mutable。不可變索引分為Global immutable index和Local immutable index兩種。
mutable indexing 可變索引,適用于數(shù)據(jù)有增刪的的場景
Phoenix默認情況下創(chuàng)建的索引是可變索引,除非指定 IMMUTABLE_ROW=true
vim vim hbase-2.3.1/conf/hbase-site.xml
<property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property>
>create table user1( id varchar(10) primary key, f.name varchar(100), f.pass varchar(100), f.grp varchar(10), f.type varchar(5), f.types varchar(2), f.code varchar(10), f.uname varchar(20), f.email varchar(20), f.factory varchar(10), f.depart varchar(10), f.region varchar(10) )column_encoded_bytes=0; > create index user_name on user(name); //查詢索引 > !indexes user
> drop index user_name on user;
create index user_name on user; //默認可變索引
//創(chuàng)建索引 > create index user_name on user; //*這樣查詢是不會走索引的 > select * from user where name='rumenz'; > explain select * from user where name='rumenz'; //FULL SCAN OVER USER SERVER FILTER BY F.NAME = //查詢字段和索引字段保持一致就可以用到索引 > select name from user where name='rumenz'; > explain select name from user where name='rumenz'; //CLIENT 1-CHUNK PARALLEL 1-WAY ROUND ROBIN RANGE SCAN OVER USER_NAME SERVER FILTER BY FIRST KEY ONLY
create local index user_name on user1(name); //創(chuàng)建本地索引
//*這樣查詢就會走索引 > select * from user where name='rumenz'; > explain select * from user where name='rumenz'; //使用到了索引 //ROUND ROBIN RANGE SCAN OVER USER1
converted index //相當于一個聯(lián)合索引
> create index user_name1 on user1(name) include(pass); //只有當name,pass在查詢字段出現(xiàn)時,才會用到索引:比如 //select name from user1 where name=''或者 pass=''; //select pass from user1 where name=''或者 pass=''; //select name,pass from user1 where name=''或者 pass='';
在select和column_name之間加上/*+ Index(<表名> <index名>)*/
,通過這種方式強制使用索引。
> select /*+ index(user1,USER_NAME) */ pass from user1 where name='xxx'; //1.如果pass是索引那么從索引表查詢. //2.如果pass不是索引,那么會進行全表掃描會很慢.
> alter index USER_NAME on user1 rebuild;
1. index.builder.threads.max 創(chuàng)建索引時,使用的最大線程數(shù)。 默認值: 10。 2. index.builder.threads.keepalivetime 創(chuàng)建索引的創(chuàng)建線程池中線程的存活時間,單位:秒。 默認值: 60 3. index.writer.threads.max 寫索引表數(shù)據(jù)的寫線程池的最大線程數(shù)。 更新索引表可以用的最大線程數(shù),也就是同時可以更新多少張索引表,數(shù)量最好和索引表的數(shù)量一致。 默認值: 10 4. index.writer.threads.keepalivetime 索引寫線程池中,線程的存活時間,單位:秒。 默認值:60 5. hbase.htable.threads.max 每一張索引表可用于寫的線程數(shù)。 默認值: 2,147,483,647 6. hbase.htable.threads.keepalivetime 索引表線程池中線程的存活時間,單位:秒。 默認值: 60 7. index.tablefactory.cache.size 允許緩存的索引表的數(shù)量。 增加此值,可以在寫索引表時不用每次都去重復的創(chuàng)建htable,這個值越大,內(nèi)存消耗越多。 默認值: 10 8. org.apache.phoenix.regionserver.index.handler.count 處理全局索引寫請求時,可以使用的線程數(shù)。 默認值: 30
到此,相信大家對“Hbase二級索引怎么實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
當前文章:Hbase二級索引怎么實現(xiàn)
本文地址:http://bm7419.com/article22/iiddcc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供手機網(wǎng)站建設、品牌網(wǎng)站建設、企業(yè)建站、面包屑導航、外貿(mào)網(wǎng)站建設、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)