Apache Doris的Bitmap索引和BloomFilter索引使用及注意事項(xiàng)
1. Bitmap索引的使用
1.1 Bitmap索引介紹
bitmap index是一種位圖索引,是一種快速數(shù)據(jù)結(jié)構(gòu),能夠加快查詢(xún)速度
1.2 Bitmap索引使用的注意事項(xiàng)
使用限制:
- 目前索引僅支持bitmap類(lèi)型的索引
- bitmap索引僅在單列上創(chuàng)建
- bitmap索引能夠應(yīng)用在Duplicate、Uniq數(shù)據(jù)模型的所有列和Aggregate模型的key列上
- bitmap索引僅在Segment V2儲(chǔ)存格式下生效。當(dāng)創(chuàng)建index時(shí),表的存儲(chǔ)格式將默認(rèn)轉(zhuǎn)換為V2格式
bitmap索引支持的數(shù)據(jù)類(lèi)型:
- TINYINT
- SMALLINT
- INT
- UNSIGNEDINT
- BIGINT
- CHAR
- VARCHAR
- DATE
- DATETIME
- LARGEINT
- DECIMAL
- BOOL
1.3 Bitmap索引的使用
創(chuàng)建索引
mysql> create index if not exists click_bitmap_index on test_db.click (user_id) using bitmap comment 'bitmap index test'; Query OK, 0 rows affected (0.05 sec) mysql>
查看索引
mysql> show index from test_db.click; +-------------------------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +-------------------------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------------+ | default_cluster:test_db.click | | click_bitmap_index | | user_id | | | | | | BITMAP | bitmap index test | +-------------------------------+------------+--------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+-------------------+ 1 row in set (0.04 sec) mysql>
刪除索引
mysql> drop index if exists click_bitmap_index on test_db.click; Query OK, 0 rows affected (0.03 sec) mysql>
2. BloomFilter索引
2.1 BloomFilter索引介紹
是一種多哈希函數(shù)映射的快速查找算法,本質(zhì)上是一種位圖結(jié)構(gòu)。通常應(yīng)用在一些需要快速判斷某個(gè)元素是否屬于集合,但是并不嚴(yán)格要求100%正確的場(chǎng)合,因?yàn)锽loomFilter會(huì)告訴調(diào)用者一個(gè)元素存在或不存在一個(gè)集合。但存在不一定準(zhǔn)確
2.2 BloomFilter原理
實(shí)際上是由一個(gè)超長(zhǎng)的二進(jìn)制位數(shù)組和一系列的哈希函數(shù)組成。二進(jìn)制位數(shù)組初始全部為0,當(dāng)給定一個(gè)元素時(shí),這個(gè)元素會(huì)被一系列哈希函數(shù)計(jì)算映射出一系列的值,所有的值在位數(shù)組的偏移量處置為1。而對(duì)于一個(gè)待查詢(xún)的元素,也會(huì)用相同的哈希函數(shù)映射到位數(shù)組上,只要有一個(gè)哈希函數(shù)映射沒(méi)有命中之前的元素的偏移量,則不存在于集合中
下圖所示出一個(gè)m=18, k=3(m是該Bit數(shù)組的大小,k是Hash函數(shù)的個(gè)數(shù))的Bloom Filter示例。集合中的x、y、z三個(gè)元素通過(guò)3個(gè)不同的哈希函數(shù)散列到位數(shù)組中。當(dāng)查詢(xún)?cè)豾時(shí),通過(guò)Hash函數(shù)計(jì)算之后因?yàn)橛幸粋€(gè)比特為0,因此w不在該集合中
BloomFilter索引也是以Block為粒度創(chuàng)建的。每個(gè)Block中,指定列的值作為一個(gè)集合生成一個(gè)BloomFilter索引條目,用于在查詢(xún)是快速過(guò)濾不滿(mǎn)足條件的數(shù)據(jù)
2.3 BloomFilter索引的使用
創(chuàng)建表使用BloomFilter索引
mysql> create table order_tb( -> user_id bigint, -> order_date date, -> city varchar(32), -> url varchar(512) -> ) distributed by hash(user_id, city) buckets 8 -> properties( -> 'bloom_filter_columns'='user_id,order_date' -> ); Query OK, 0 rows affected (0.07 sec) mysql>
查看BloomFilter索引
mysql> show create table order_tb;
刪除BloomFilter索引
mysql> alter table test_db.order_tb set ('bloom_filter_columns' = ''); Query OK, 0 rows affected (0.05 sec) mysql>
修改BloomFilter索引
mysql> alter table test_db.order_tb set ('bloom_filter_columns' = 'user_id,city'); Query OK, 0 rows affected (0.05 sec) mysql>
2.4 Doris BloomFilter使用場(chǎng)景
- 首先BloomFilter適用于非前綴過(guò)濾
- 查詢(xún)會(huì)根據(jù)該列高頻過(guò)濾,而且查詢(xún)條件大多是in和=過(guò)濾
- 不同于Bitmap, BloomFilter適用于高基數(shù)列。比如UserID。因?yàn)槿绻麆?chuàng)建在低基數(shù)的列上,比如”性別“列,則每個(gè)Block幾乎都會(huì)包含所有取值,導(dǎo)致BloomFilter索引失去意義
2.5 Doris BloomFilter使用注意事項(xiàng)
- 不支持對(duì)Tinyint、Float、Double 類(lèi)型的列建Bloom Filter索引
- Bloom Filter索引只對(duì)in和=過(guò)濾查詢(xún)有加速效果
- 如果要查看某個(gè)查詢(xún)是否命中了Bloom Filter索引,可以通過(guò)查詢(xún)的Profile信息查看
到此這篇關(guān)于Apache Doris的Bitmap索引和BloomFilter索引使用的文章就介紹到這了,更多相關(guān)Apache Doris索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
crontab定時(shí)任務(wù)不執(zhí)行的原因分析與解決方法
這篇文章主要給大家介紹了關(guān)于crontab定時(shí)任務(wù)不執(zhí)行的原因分析與解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01Linux下設(shè)置Vim編輯器里Tab的長(zhǎng)度行號(hào)
這篇文章主要介紹了Linux下設(shè)置Vim編輯器里Tab的長(zhǎng)度行號(hào) ,需要的朋友可以參考下2018-06-06linux實(shí)現(xiàn)自動(dòng)刪除最舊的幾個(gè)文件詳解
最近因?yàn)楣ぷ鞯脑颍行枨笠獎(jiǎng)h除Linux中舊的壓縮包,發(fā)現(xiàn)網(wǎng)上給的答案都是刪除N天前的文件,無(wú)法適應(yīng)我的要求,于是自己研究了一翻。所以下面這篇文章主要介紹了關(guān)于linux自動(dòng)刪除最舊的幾個(gè)文件的相關(guān)資料,需要的朋友可以參考下。2017-09-09CentOS-NAT模式下(DHCP)聯(lián)網(wǎng)成功案例
這篇文章主要為大家詳細(xì)介紹了CentOS-NAT模式下(DHCP)聯(lián)網(wǎng)成功,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11linux系統(tǒng)下一個(gè)冷門(mén)的RAID卡ioc0及其監(jiān)控mpt-status
這篇文章主要介紹了linux系統(tǒng)下一個(gè)冷門(mén)的RAID卡ioc0及其監(jiān)控mpt-status,需要的朋友可以參考下2016-05-05