GaussDB(for Cassandra)新特性發布:支援Lucene二級索引,讓複雜查詢更智慧
今天,華為雲GaussDB(for Cas sandra) 攜 Lucene引擎全新解決方案來啦 !
當前,網際網路、大資料飛速發展,資料量呈爆發式增長,在高併發、高可用、高擴充套件性的業務需求推動下,NoSQL資料庫成為了越來越多場景的剛需。但在查詢方面,傳統的NoSQL卻有一定的侷限性,嚴格來說,像開源MongoDB、Cassandra、Hbase等都不具備海量資料的多維查詢、文字檢索、統計分析等能力。多數企業仍然在尋求一套更完美的NoSQL解決方案。
華為雲原生多模資料庫GaussDB NoSQL擁有強大的生態體系,支援鍵值、寬表、文件、時序四種引擎介面。其中,寬表引擎介面GaussDB(for Cas sandra) 現已釋出 Lucene 二級索引功能,既具備NoSQL的優勢,又能支援多種複雜查詢場景,全面提升使用者在海量資料場景下的查詢體驗,憑實力寵粉!相信大家一定有很多疑問,GaussDB(for Cassandra)是什麼?二級索引如何使用?Lucene二級索引又有哪些區別?彆著急,接下來讓我們一一解讀。
什麼是GaussDB(for Cassandra)?
GaussDB(for Cassandra) 是一款基於華為自研、採用計算儲存分離架構的分散式雲資料庫,在高效能、高可用、高可靠、高安全、可彈性伸縮的基礎上,提供了一鍵部署、備份恢復、監控報警等服務能力;並高度相容開源Cassandra介面,提供高讀寫效能。當前已經廣泛應用於IoT、氣象、網際網路、遊戲等諸多領域。
什麼是二級索引?
我們先來了解下索引的概念。索引是為了加快資料檢索速度而建立的一種儲存結構,是一種以空間換時間的設計思想。作用可以理解為書的目錄,透過目錄可快速定位到所需要的內容。
在Cassandra中,Primary Key就是索引(也被稱為一級索引),在查詢的時候,根據Primary Key可以直接檢索到對應的記錄。而二級索引又稱輔助索引,是為了幫助定位到一級索引,然後再根據一級索引找到對應記錄。我們平時使用 CREATE INDEX 語句建立的就是二級索引。
當前Cassandra二級索引的痛點有哪些 ?
原生Cassandra中二級索引的實現其實是建立了一張隱式的表,該表的Primary Key是建立索引的列,值為對應的Primary Key,實現相對簡單,因此不可避免地帶來了一些約束條件:
1. 第一主鍵只能用“=”查詢;
2. 第二主鍵可以使用“=、>、<、>=、<=”;
3. 索引列只支援“=”查詢;
4. 刪除、更新太過頻繁的列不適合建立索引;
5. High-cardinality 列不適合做索引;
基於以上約束,Cassandra二級索引能提供的查詢功能非常有限。
Why Lucene ?
Lucene 是當下最火的開源全文檢索引擎工具,具有以下特點:
1. 穩定、索引效能高;
2. 是高效、準確、高效能的搜尋演算法;
3. 具備豐富的查詢型別:支援短語查詢、萬用字元查詢、近似查詢、範圍查詢等;
4. 有強大的開源社群支援,可維護性好;
因此,用整合Lucene引擎來補充Cassandra查詢能力的弱點是最佳選擇,畢竟誰又會拒絕一款效能穩定、持續成長、又更新迭代的搜尋引擎呢?
Lucene 引擎強大的倒排索引和列式儲存能力,賦予了GaussDB(for Cassandra)高效的多維查詢、文字檢索、統計分析等能力,在使用體驗上和原生二級索引相似,但同時擁有了更為豐富的語法支援。
使用Lucene二級索引後,我的查詢發生了哪些變化?
更加靈活的查詢、過濾方式:
所有查詢均可不帶PK或者帶部分PK,並且索引列支援 “>、<、in”等運算子,使用者不需要再侷限於只使用“=”。
強大的文字檢索能力:
文字檢索能力正是Lucene最擅長的,使用起來十分方便,只需要透過關鍵詞like即可實現。
你可以這樣:
SELECT * FROM example WHERE field LIKE 'test%'; // 字首查詢
也可以這樣:
SELECT * FROM example WHERE field LIKE 'start*end'; // 正則匹配
還可以這樣:
SELECT * FROM example WHERE field LIKE '%+lucene +index%'; // 全文搜尋功能,效能高效,穩定
支援 超萬億規格的 大資料量統計:
SELECT count(*) FROM example WHERE field1>-1 AND EXPR(field2, 'count');
多種刪除方式:
支援single單行刪除、partition分割槽刪除、range範圍刪除,全方位覆蓋各種刪除場景。
DELETE FROM example WHERE pk1='a' AND field=1; // single單行刪除
DELETE FROM example WHERE pk1='a' AND pk2=5000; // partition分割槽刪除
DELETE FROM example WHERE pk1='a' AND pk2=3000 AND ck1=2 AND ck2>'a' AND ck2<'c'; // range範圍刪除
支援擴充套件json查詢介面,輕鬆應對各種複雜查詢場景:
擴充套件的json查詢介面提供了豐富的查詢語法,用法更多樣化。以下是關鍵字列表:
filter |
在查詢語句中json查詢的關鍵字 |
term |
查詢時判斷某個document是否包含某個具體的值,不會對被查詢的值進行分詞查詢 |
match |
將被詢值進行分詞,進行全文檢索 |
range |
查詢指定某個欄位在某個特定的範圍(範圍查詢子關鍵字:"eq"/"gte"/"gt"/"lte"/"lt") |
bool |
必須和 "must"、"should"、"must not" 一起組合出複雜的查詢 |
must |
bool 型別的子查詢,型別為list,封裝"term"、"match"、"range" 查詢 |
should |
bool 型別的子查詢,型別為list,封裝"term"、"match"、"range" 查詢 |
must not |
bool 型別的子查詢,型別為list,封裝"term"、"match"、"range" 查詢 |
舉個例子:
SELECT * FROM example WHERE EXPR(index_field, '{"filter": {"bool": {"should": [{"bool": {"should": [{"bool": {"must": [{"bool": {"should": [{"range": {"ck1": {"lt": 2}, "ck1": {"gte": 4}}}]}}, {"bool": {"should": [{"range": {"field1": {"lt": 2}, "field1": {"gt": 3}}}]}}]}}, {"bool": {"should": [{"term": {"pk1": "a", "pk1": "b", "pk1": "c"}}]}}]}}, {"bool": {"must": [{"range": {"field2": {"gte":5, "lte": 15}, "pk2": {"gt": 2000}}}]}}]}}}')
透過條件組合加巢狀,您可以DIY符合自身業務的sql語句,並且最高支援200層json巢狀,再複雜的場景也能處理!
華為雲GaussDB(for Cas sandra) 搭載Lucene引擎,透過Lucene二級索引將搜尋能力下沉至底層,從根本上解放了應用層查詢,兼具多維查詢、文字檢索、統計分析等多種能力,可以完美地彌補NoSql弱查詢功能的短板,讓企業從容應對海量資料的複雜查詢場景。還等什麼,速來體驗吧!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70022909/viewspace-2926454/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cassandra的索引查詢和排序索引排序
- 複雜查詢—子查詢
- SQL 複雜查詢SQL
- SQL複雜查詢SQL
- lucene(二) 索引的建立、增刪改查索引
- 查詢中讓優化器使用複合索引優化索引
- cassandra 1.0.0新特性
- oracle表複雜查詢Oracle
- Oracle複雜查詢(三)Oracle
- Solr複雜查詢一:函式查詢Solr函式
- Lucene查詢原理
- Oracle查詢轉換(二)複雜檢視合併Oracle
- JPA的多表複雜查詢
- AppBoxFuture: 二級索引及索引掃描查詢資料APP索引
- React 16.4新特性發布React
- Java 9 的新特性發布Java
- MySQL8.0.27 新特性-提高二級索引的建立效率MySql索引
- SQL學習(三) 複雜查詢SQL
- Laravel使用MongoDB複雜的查詢LaravelMongoDB
- SQL複雜查詢多表連線SQL
- 複雜查詢語句的使用
- 嘗試讓查詢更簡單
- Hibernate中不支援複雜子查詢from (select ……)解決方案
- Lucene的分頁查詢
- Apache Cassandra 4.0新特性介紹Apache
- cassandra查詢效率探討
- 【索引】反向索引--條件 範圍查詢(二)索引
- Laravel Query Builder 複雜查詢案例:子查詢實現分割槽查詢 partition byLaravelUI
- lucene 多欄位查詢-MultiFieldQueryParser
- 微服務複雜查詢之快取策略微服務快取
- 老司機使用 Redis 快取複雜查詢Redis快取
- Vert.x Future 解決複雜查詢
- Hibernate對於複雜查詢好用嗎?
- 複雜查詢還是直接寫sql吧SQL
- 查詢(3)--雜湊表(雜湊查詢)
- 從根上理解elasticsearch(lucene)查詢原理(2)-lucene常見查詢型別原理分析Elasticsearch型別
- 常用JS特性瀏覽器支援版本查詢JS瀏覽器
- CameraX 1.1 有哪些新的特性發布?