查詢引擎簡(jiǎn)介
CQEngine
一個(gè)高性能的 Java 集合后控,可以使用類似 SQL 的查詢進(jìn)行搜索,延遲極低曲梗。
- 高效的索引結(jié)構(gòu):CQEngine支持多種類型的索引結(jié)構(gòu)裙椭,如哈希索引揩慕、樹形索引和空間索引等涝婉。這些索引結(jié)構(gòu)能夠快速定位數(shù)據(jù)加叁,從而大大提高查詢效率倦沧。
- 優(yōu)化的查詢算法:CQEngine采用了一系列優(yōu)化算法來加速查詢,如適應(yīng)性查詢優(yōu)化和索引合并等它匕。這些算法能夠根據(jù)查詢條件的不同展融,自動(dòng)選擇最優(yōu)的查詢策略,從而提高查詢效率超凳。
- 并發(fā)執(zhí)行:CQEngine支持并發(fā)執(zhí)行查詢操作愈污,能夠利用多核處理器的性能優(yōu)勢(shì),加快查詢速度轮傍。
- 原生支持Java 8 Lambda表達(dá)式和Stream API:CQEngine原生支持Java 8 Lambda表達(dá)式和Stream API暂雹,這些特性能夠簡(jiǎn)化代碼并提高執(zhí)行效率。
Concurrent Trees
Concurrent Trees是 CQEngine 的核心依賴庫创夜。提供了一組高效的并發(fā)數(shù)據(jù)結(jié)構(gòu)杭跪,用于實(shí)現(xiàn)樹形數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)和查詢。它支持常見的樹形數(shù)據(jù)結(jié)構(gòu)驰吓,如前綴樹涧尿、后綴樹、紅黑樹等
- 高效的并發(fā)性能:concurrent-trees使用了一些優(yōu)秀的并發(fā)技術(shù)檬贰,如讀寫鎖姑廉、分段鎖等,從而實(shí)現(xiàn)高效的并發(fā)性能翁涤。它的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)具有高度的可伸縮性桥言,能夠在多線程環(huán)境下保持高效的性能。
- 支持多種樹形數(shù)據(jù)結(jié)構(gòu):concurrent-trees支持多種樹形數(shù)據(jù)結(jié)構(gòu)葵礼,如前綴樹号阿、后綴樹、紅黑樹等鸳粉。開發(fā)人員可以根據(jù)自己的需求選擇最適合的數(shù)據(jù)結(jié)構(gòu)扔涧。
- 支持自定義節(jié)點(diǎn)和比較器:concurrent-trees允許開發(fā)人員自定義節(jié)點(diǎn)和比較器,以適應(yīng)不同的業(yè)務(wù)場(chǎng)景和數(shù)據(jù)結(jié)構(gòu)需求。這樣可以使得數(shù)據(jù)結(jié)構(gòu)更加靈活和通用枯夜。
- 易于使用和擴(kuò)展:concurrent-trees提供了清晰簡(jiǎn)單的API弯汰,易于使用和擴(kuò)展。它還提供了完善的文檔和示例代碼卤档,使得開發(fā)人員能夠快速上手蝙泼。
如果有興趣往下看,需要先去了解上面兩個(gè)開源項(xiàng)目,否則下面的內(nèi)容可能會(huì)感覺比較疑惑。
基于Concurrent Trees 擴(kuò)展URL Path查找
已有基數(shù)樹字符串設(shè)計(jì)
擴(kuò)展基數(shù)樹URL Path設(shè)計(jì)
思路總結(jié) : 由于API 請(qǐng)求路由復(fù)雜,引入通配符概念劝枣,將 通配符 * 視為單位Path 通配, 將通配符 ** 視為 多單位通配。
基于CQEngine 擴(kuò)展URL Path查詢方法(基數(shù)樹)
原生支持的查詢方法
新增查詢方法
Abbreviation | Meaning | Example |
---|---|---|
PM | Request Path Url Match | PathMatches(Request.URL, /api/test) |
Index Feature Matrix
Index Type | PM | EQ | IN | LT | GT | BT | SW | EW | SC | CI | HS | RX | SQ | QZ | LP |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
RadixTree | ? | ? | ? | ? | |||||||||||
ReversedRadixTree | ? | ? | ? | ? | |||||||||||
InvertedRadixTree | ? | ? | ? | ? | ? |
總結(jié)
思路大體如上,難點(diǎn)在改造兩個(gè)開源項(xiàng)目源碼和調(diào)試织鲸。 后期會(huì)提供具體實(shí)現(xiàn)方法舔腾。