存儲在HBase中的數(shù)據(jù):
(1) HBase唯一索引 primary row key
(2) 全表掃描 scan
(3) 二級索引(輔助索引)
通過列或表達式作為備用rowkey, 實現(xiàn)點查找和范圍掃描
covered indexes : 覆蓋索引
- 只需找到索引即可,無需返回主表,節(jié)省讀取時間開銷
- 只需將我們關(guān)心的數(shù)據(jù)綁定在索引行中即可
(select列和where列)
create index my_index on my_table(v1,v2)include(v3)
Functional indexes : 函數(shù)索引 (4.3以上引入)
- 在表達式上建立索引
- 查詢使用該表達式時 , 索引可用于檢索結(jié)果
create index upper_name_index on emp(upper(first_name||''||last_name))
select emp_id from emp where upper(first_name||''||last_name)
Global Indexes : 全局索引
適用于多讀少寫場景
通過單獨HBase表存儲數(shù)據(jù)表的索引數(shù)據(jù)
索引數(shù)據(jù)&主表數(shù)據(jù) :
當寫入數(shù)據(jù)到主表時,索引數(shù)據(jù)會被同步到索引表中
索引表中主鍵是索引列和數(shù)據(jù)表主鍵的組合值
include列存儲到索引表的普通列中,查詢性能更高效
只需查詢一次索引表就能獲得數(shù)據(jù),不用回查主表使用row_timstamp特性不能使用全局索引
合理設(shè)計數(shù)據(jù)表主鍵規(guī)避建過多索引表
order by groupBy可以使用全局索引
對索引表適當使用加鹽特性提高性能
Local Indexes : 本地索引
- 適用于寫多讀少,空間有限場景
- Phoenix查詢時自動選擇是否使用本地索引
- 使用本地索引,避免進行寫操作帶來的網(wǎng)絡(luò)開銷
- 索引表和表數(shù)據(jù)存放相同服務(wù)器中
- 查詢字段不完全是索引字段也會被使用
本地索引與全局索引區(qū)別 : - 所有本地索引都單獨存儲在同一張共享表中。
- 無法預(yù)先確定region位置 , 讀數(shù)據(jù)會檢查每個region , 讀性能開銷大
Index Population : 異步索引
默認創(chuàng)建索引,會在create index調(diào)用期間同步填充索引
Phoenix 4.5開始支持DDL語句支持ASYNC,異步完成索引填充
create index async_index on my_schema.my_table(v)ASYNC
通過HBase命令行單獨啟動填充索引表mr作業(yè)
-
當mr作業(yè)完成時,才會激活索引并開始查詢中使用
$ {HBASE_HOME} / bin / hbase org.apache.phoenix.mapreduce.index.IndexTool --schema MY_SCHEMA --data-table MY_TABLE --index-table ASYNC_IDX --output-path ASYNC_IDX_HFILES
Index Usage:索引用法
除非查詢中引用的所有列都包含在索引中,否則不會使用全局索引
通過在索引中包含v2列創(chuàng)建覆蓋索引
create index my_index on my_table(v1) include(v2)
提示查詢強制使用索引
select /* + index(my_table my_index)*/ v2 from my_table where v1=‘foo'
-
創(chuàng)建本地索引
create local index my_index on my_table(v1)
Index Removal : 移除索引
`drop index my_index on my_table`
-
數(shù)據(jù)表中刪除索引列,會自動刪除索引(含覆蓋索引)
Index Properties : 索引屬性
create index可以傳遞屬性應(yīng)用于基礎(chǔ)HBase表
對其進行加鹽操作:
create index my_index on my_table(v2 desc,v1) include(v3)
salt_buckets=10,data_block_encoding=‘NONE'
主表被加鹽,索引表以相同方式自動為全局索引加鹽
相對于主表與索引表大小,索引MAX_FILESIZE向下調(diào)整
-
本地索引不允許salt_buckets
Consistency Guarantees : 一致性保證
索引更新與HBase提供的相同強一致性保證同步
索引存儲與數(shù)據(jù)表不同的表中 : 表的屬性和索引的類型
服務(wù)器端崩潰導(dǎo)致提交失敗,表和索引之間一致性有所不同
Transactional Tables : 交易表
Immutable Tables : 不可變表
非事務(wù)性 , 不可變表的索引沒有適當?shù)臋C制來自動處理提交失敗。
保持表和索引之間的一致性留給客戶端來處理。
因為更新是冪等的,所以最簡單的解決方案是讓客戶端繼續(xù)重試一批突變,
直到它們成功為止
Mutable Tables : 可變表