Hbase二級索引怎么實現(xiàn)

本篇內(nèi)容主要講解“Hbase二級索引怎么實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Hbase二級索引怎么實現(xiàn)”吧!

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、成都做網(wǎng)站、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出玉田免費(fèi)做網(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è)務(wù)中需要通過多個維度快速查詢數(shù)據(jù). 例如查詢用戶的時候可能需要通過用戶名,姓名,郵箱,手機(jī)號查詢,但是把這種多維度的查詢字段都放到rowkey中,顯然是不可能的(靈活性不高,roekey的長度也是有限制的),因此二級索引的應(yīng)用場景就應(yīng)運(yùn)而生,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會選擇索引表來降低查詢消耗的時間。在默認(rèn)情況下如果想查詢的字段不是索引字段的話索引表不會被使用,也就是說不會帶來查詢速度的提升。

  • Local indexing 本地索引,適用于寫多的場景

與Global indexing一樣,Phoenix會自動判定在進(jìn)行查詢的時候是否使用索引。使用Local indexing時,索引數(shù)據(jù)和數(shù)據(jù)表的數(shù)據(jù)存放在相同的服務(wù)器中,這樣避免了在寫操作的時候往不同服務(wù)器的索引表中寫索引帶來的額外開銷。使用Local indexing的時候即使查詢的字段不是索引字段索引表也會被使用,這會帶來查詢速度的提升,這點跟Global indexing不同。對于Local Indexing,一個數(shù)據(jù)表的所有索引數(shù)據(jù)都存儲在一個單一的獨(dú)立的可共享的表中。

  • immutable indexing 不可變索引,適用于數(shù)據(jù)只增加不更新,而且按時間順序先后循序存儲.

不可變索引的存儲方式是write one,append only。當(dāng)在Phoenix使用create table語句時指定IMMUTABLE_ROWS = true表示該表上創(chuàng)建的索引將被設(shè)置為不可變索引。Phoenix默認(rèn)情況下如果在create table時不指定IMMUTABLE_ROW = true時,表示該表為mutable。不可變索引分為Global immutable index和Local immutable index兩種。

  • mutable indexing 可變索引,適用于數(shù)據(jù)有增刪的的場景

Phoenix默認(rèn)情況下創(chuàng)建的索引是可變索引,除非指定 IMMUTABLE_ROW=true

開啟Hbase對二級索引的支持

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>

user表創(chuàng)建索引

>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

user表刪除索引

> drop index user_name on user;

實戰(zhàn)

  • create index user_name on user; //默認(rèn)可變索引

//創(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 //相當(dāng)于一個聯(lián)合索引

> create index user_name1 on user1(name) include(pass);
//只有當(dāng)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名>)*/,通過這種方式強(qiáng)制使用索引。

> select /*+ index(user1,USER_NAME) */ pass from user1 where name='xxx';
//1.如果pass是索引那么從索引表查詢.
//2.如果pass不是索引,那么會進(jìn)行全表掃描會很慢.

重建索引

> alter index USER_NAME on user1 rebuild;

索引性能調(diào)優(yōu)

1. index.builder.threads.max 
創(chuàng)建索引時,使用的最大線程數(shù)。 
默認(rèn)值: 10。

2. index.builder.threads.keepalivetime 
創(chuàng)建索引的創(chuàng)建線程池中線程的存活時間,單位:秒。 
默認(rèn)值: 60

3. index.writer.threads.max 
寫索引表數(shù)據(jù)的寫線程池的最大線程數(shù)。 
更新索引表可以用的最大線程數(shù),也就是同時可以更新多少張索引表,數(shù)量最好和索引表的數(shù)量一致。 
默認(rèn)值: 10

4. index.writer.threads.keepalivetime 
索引寫線程池中,線程的存活時間,單位:秒。
默認(rèn)值:60
 

5. hbase.htable.threads.max 
每一張索引表可用于寫的線程數(shù)。 
默認(rèn)值: 2,147,483,647

6. hbase.htable.threads.keepalivetime 
索引表線程池中線程的存活時間,單位:秒。 
默認(rèn)值: 60

7. index.tablefactory.cache.size 
允許緩存的索引表的數(shù)量。 
增加此值,可以在寫索引表時不用每次都去重復(fù)的創(chuàng)建htable,這個值越大,內(nèi)存消耗越多。 
默認(rèn)值: 10

8. org.apache.phoenix.regionserver.index.handler.count 
處理全局索引寫請求時,可以使用的線程數(shù)。 
默認(rèn)值: 30

到此,相信大家對“Hbase二級索引怎么實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

當(dāng)前文章:Hbase二級索引怎么實現(xiàn)
本文地址:http://muchs.cn/article22/iiddcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)企業(yè)建站、面包屑導(dǎo)航、外貿(mào)網(wǎng)站建設(shè)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站