成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

查詢快到起飛的 ES,真的適合你的應(yīng)用場景嗎?

開發(fā) 前端
在面向數(shù)據(jù)編程時代,我們的編程方式與認(rèn)知都需要進(jìn)化,掌握一門編程語言僅僅是能做應(yīng)用項(xiàng)目的第一步,編程語言掌握的深入其實(shí)本質(zhì)上沒有太多意義,一個應(yīng)用系統(tǒng)最終需要的是數(shù)據(jù)產(chǎn)品來承載,編程語言僅僅是一個交互入口,我們可以在很短的時間內(nèi)學(xué)會一門編程語言并進(jìn)行項(xiàng)目實(shí)戰(zhàn),但是對于一個數(shù)據(jù)產(chǎn)品的掌控確需要相當(dāng)長的時間與經(jīng)驗(yàn)積累。

序言

 

圖示:Elasticsearch 在 DB-Engine 權(quán)威熱度綜合排名第 8

 

大學(xué)上編程課程,老師都會先介紹編程思想與編程語言,其中會著重介紹一下面向過程編程與面向?qū)ο缶幊蹋傺由斓骄幊陶Z言,如C、Java等;那么當(dāng)下,從個人認(rèn)知層面來講,正在處于面向數(shù)據(jù)編程階段,社會分工越來越細(xì),編程思想與編程方式已經(jīng)出現(xiàn)了很大的變化。畢業(yè)后走上工作崗位,經(jīng)歷過很多業(yè)務(wù)項(xiàng)目系統(tǒng)之后,越來越多的人可能已經(jīng)認(rèn)識到,需要越來越重視數(shù)據(jù)產(chǎn)品,應(yīng)用系統(tǒng)核心支撐越來越依賴數(shù)據(jù)庫產(chǎn)品,上層的編程語言僅僅是一種交互接口而已;底層的數(shù)據(jù)產(chǎn)品提供的能力,從某種程度上說,已經(jīng)決定了業(yè)務(wù)系統(tǒng)的支撐能力,交互形式、甚至是編程方式、編程語言等。

Elasticsearch是數(shù)據(jù)產(chǎn)品領(lǐng)域一個不可替代的多面手,業(yè)務(wù)應(yīng)用范圍非常廣,其最核心的能力是查詢方式豐富,且查詢性能杠杠的。下面就從ES查詢方式的形態(tài)展開,看看它提供的哪些查詢方式可以適配當(dāng)下的業(yè)務(wù)痛點(diǎn)場景。

注:本文內(nèi)容基于ES 7.15.x版本編寫,若是其它版本可能會存在差異。

 

圖示:某些業(yè)務(wù)系統(tǒng)需要同時融合多種數(shù)據(jù)產(chǎn)品、多種編程語言

 

一、Query string query

Query string query(簡稱代號:QS),英語直譯“查詢字符串”就是基于字符串表達(dá)式的一種查詢語法,從當(dāng)前ES版本來看,雖然已經(jīng)算是比較原始,但也非常具有意義,且有應(yīng)用意義。

 

圖示:query string 與 simple query string 查詢示例,來自ES官方

 

QS查詢語法簡單直接,表達(dá)能力按照人腦最直接的思維方式,有點(diǎn)類似我們的語言對話的表達(dá)方式,很容易掌握,初學(xué)者稍微有點(diǎn)編程經(jīng)驗(yàn)也會很快學(xué)會。從應(yīng)用角度來說,非常適合一些需要很強(qiáng)自由度查詢表達(dá)的業(yè)務(wù)場景,且使用這些業(yè)務(wù)系統(tǒng)的人不是非計(jì)算機(jī)專業(yè)的人士。

適用場景舉例,某些物流公司內(nèi)部系統(tǒng)或者電商內(nèi)部業(yè)務(wù)系統(tǒng),數(shù)據(jù)關(guān)聯(lián)字段特別多,幾百個甚至上千個,業(yè)務(wù)操作人員需要組合任意的條件進(jìn)行查詢,這些業(yè)務(wù)人員并非計(jì)算機(jī)專業(yè)工程師,不可能快速學(xué)會一些高級查詢語言的,如SQL,那么QS就顯得非常適合了,其內(nèi)部的簡單組合條件查詢表達(dá)式,基本上只要稍微有點(diǎn)數(shù)學(xué)邏輯的人,看幾眼就學(xué)會了。可能有一些IT工程師會說,系統(tǒng)設(shè)計(jì)增加一些固定查詢條件不就好了嗎,其實(shí)不然,當(dāng)業(yè)務(wù)系統(tǒng)數(shù)據(jù)字段超過一定數(shù)量時,系統(tǒng)設(shè)計(jì)開發(fā)仍然采用固定查詢方式,本身就是一種罪過,最后就會演變IT工程師覺得業(yè)務(wù)需求好多,開發(fā)進(jìn)度跟不上,業(yè)務(wù)操作人員會任務(wù)業(yè)務(wù)系統(tǒng)設(shè)計(jì)的非常死板,且跟不上業(yè)務(wù)發(fā)展訴求。

可能會有工程師好奇,為什么不使用關(guān)系型數(shù)據(jù)庫來解決,SQL也比較適合此場景的查詢,當(dāng)然這里就屬于另外的話題,需要深入套路RDB與ES底層特性,此處不展開,詳細(xì)可以參考作者之前寫過的文章,已經(jīng)充分論證。

如下圖,某物流公司內(nèi)部的查詢系統(tǒng),查詢條件已經(jīng)非常多了,依然還不能滿足查詢訴求。

 

圖示:某物流系統(tǒng)內(nèi)部查詢模塊,這還是相對簡單的,來自百度圖片

 

QS雖然查詢方式直接簡潔,表達(dá)方式非常人性,局限性也很明顯,但不足以支持ES豐富的查詢能力、未來的新特性、未來更多的應(yīng)用場景。

建議依然工程師掌握了解,納入腹中,可能某個業(yè)務(wù)場景就非常適合,可能這個特性就是某個業(yè)務(wù)系統(tǒng)核心的技術(shù)支撐,至少我已經(jīng)見識過了。

二、Query DSL

DSL 全稱 Query Domain Specific Language,直譯過來“領(lǐng)域特定語言”,是ES專門面向ES特性設(shè)計(jì)的一種類抽象語法樹(Abstract Syntax Trees)的查詢語言,查詢表達(dá)能力非常豐富,也是當(dāng)下使用ES的首選,也是任何時候使用ES的首選。

ES支持了很多種查詢,初步入手ES的工程師可能都會有深深體會,之前在基于傳統(tǒng)數(shù)據(jù)庫產(chǎn)品做的非常難解決的查詢問題,在ES都非常容易,不僅僅是性能,而是豐富的查詢方式,其實(shí)這也得益于ES設(shè)計(jì)的DSL。

 

圖示:DSL查詢語言示例,來自官方

 

DSL幾乎支持了ES內(nèi)部所有的查詢表達(dá)式能力,其中全文文本分詞查詢(full text query)與詞項(xiàng)精確查詢(term level query)幾乎是最常用的場景;還有一些高級的查詢特性,在進(jìn)入ES之前,見過很多工程師在代碼中使用正則或者特別復(fù)雜的邏輯判斷來替代,實(shí)在UGLY,代碼丑陋,性能也丑陋。

DSL帶來了豐富的查詢表達(dá)能力,也帶了一定的復(fù)雜度,也是被一些其它數(shù)據(jù)產(chǎn)品領(lǐng)域的工程師所抨擊的地方,特別是SQL領(lǐng)域。本人認(rèn)為這個是不正確的認(rèn)知,相反,本人認(rèn)為任何數(shù)據(jù)庫產(chǎn)品都有自己的獨(dú)特性,其獨(dú)特的內(nèi)部實(shí)現(xiàn)與應(yīng)用場景,決定了它的能力,DSL由于其豐富的查詢表達(dá)能力,需要稍微系統(tǒng)的學(xué)習(xí)一下,反而帶來了比SQL更好的查詢體驗(yàn);在數(shù)據(jù)產(chǎn)品領(lǐng)域還有很多各自產(chǎn)品的DSL,如圖數(shù)據(jù)產(chǎn)品Arrangodb、Cassandra等,正式由于他們的產(chǎn)品獨(dú)特性,其表達(dá)方式已經(jīng)驗(yàn)證了不能完全由SQL替代。

 

圖示:Arangodb查詢語言AQL,來自官方

 

建議,千萬不要因?yàn)镾QL與DSL之爭問題而錯過了Elasticsearch,其帶給你的便利性,誰用誰知道。

三、SQL

SQL 全稱 Structured Query Language,直譯過來“結(jié)構(gòu)化查詢語言“,這個不用多說,廣大的工程師入行編程時,必學(xué)的查詢語法,在之前主要是在傳統(tǒng)關(guān)系型數(shù)據(jù)庫上使用,不過隨著NOSQL越來越得人心,NOSQL也開始逐步集成此特性,因?yàn)閺V大的群組基礎(chǔ),業(yè)界俗語“大數(shù)據(jù)BI工程師就是SQL工程師“,每日的工作就是寫SQL。

Elasticsearch官方自 6.5.x 版本開始集成自家SQL查詢方式,在此之前一般會采用NLPChina提供插件,全稱Elasticsearch-sql,帶來了一定的便利性,但其本質(zhì)上是將SQL表達(dá)式直接轉(zhuǎn)換為DSL表達(dá)式查詢,僅僅多了一次轉(zhuǎn)換,并未有什么革命性的變化。但不可否認(rèn)其在IT工程師的業(yè)務(wù)應(yīng)用訴求。

曾在某物流公司見過業(yè)務(wù)部門系統(tǒng)架構(gòu)師,將SQL的復(fù)雜表達(dá)能力應(yīng)用到極致,用來解決數(shù)據(jù)與用戶權(quán)限方面的通用性表達(dá)語言,本人見過最強(qiáng)大復(fù)雜的權(quán)限系統(tǒng),也覺得設(shè)計(jì)的非常優(yōu)秀的;從事過業(yè)務(wù)系統(tǒng)的工程師可能都會有同感,常規(guī)的業(yè)務(wù)系統(tǒng)都需要一個權(quán)限系統(tǒng),用來隔離用戶與數(shù)據(jù)方面的訪問權(quán)限,需要精確到數(shù)據(jù)行,數(shù)據(jù)字段等層面,而且還需要支持很多定制化場景,如就指定某些人某個時間點(diǎn)可訪問等;該系統(tǒng)的核心關(guān)鍵設(shè)計(jì)就是基于SQL來完成,無論多么復(fù)雜個性化的權(quán)限隔離需求,都只要轉(zhuǎn)換為SQL表達(dá)式來執(zhí)行而已,一招輕松化解;當(dāng)然也應(yīng)用了Elasticsearch,想象一下,如果沒有提供SQL支持,那么業(yè)務(wù)系統(tǒng)的變態(tài)權(quán)限隔離需求,又該如何設(shè)計(jì)完成呢?

 

圖示:社區(qū)SQL插件查詢示例,來自NLPChina

 

官方SQL相比社區(qū)做了更多的創(chuàng)新,其中有一點(diǎn),本人是特別推薦的,基于官方SQL執(zhí)行查詢,返回結(jié)果數(shù)據(jù)量同比DSL查詢要減少近一倍;官方SQL支持多種數(shù)據(jù)格式查詢結(jié)果,其中Json是最常用,也是REST API時代,廣大程序員們最熱衷的數(shù)據(jù)交互接口協(xié)議。這對于應(yīng)用ES執(zhí)行查詢后需要返回大量數(shù)據(jù)結(jié)果場景非常好,大大減輕網(wǎng)絡(luò)流量IO,也是一個性能優(yōu)化點(diǎn)。

 

圖示:官方SQL插件查詢示例,來自Elastic官方

 

官方SQL同時為了兼容DSL,也提供了轉(zhuǎn)換DSL的API,如果對于DSL不太熟悉,可以借助此能力。

 

圖示:SQL轉(zhuǎn)換為DSL示例,來自Elastic官方

 

官方SQL給帶來很多優(yōu)越的便利性,也存在一些局限性,并不完整支持標(biāo)準(zhǔn)的SQL,與當(dāng)下最新的SQL兼容,很多查詢特性還是有明顯的DSL影子;官方SQL持續(xù)演進(jìn),從最早6.5.x到現(xiàn)在7.15.x,已經(jīng)增加了很多SQL標(biāo)準(zhǔn)支持,但是SQL不能替代DSL,至今DSL依然是ES領(lǐng)域最好的查詢方式,這一點(diǎn)必須要明確。

四、EQL

EQL 全稱 Event Query Language ,直譯過來“直接查詢語言”,核心需要基于時序數(shù)據(jù),必須要指定時間字段與類別字段,如日志,指標(biāo)、全鏈路等場景,ES官方推出此查詢方式主要目的是安全分析場景。

 

圖示:官方EQL查詢示例,來自Elastic官方

 

EQL目前并未在應(yīng)用系統(tǒng)中非常大規(guī)模使用,介紹見到工程師使用,可能是其定位在安全分析場景原因。必須承認(rèn)其帶來的一些查詢特性,其語法非常直觀,表達(dá)式也非常豐富,對于有編程基礎(chǔ)的工程師,非常容易掌握,必須強(qiáng)調(diào),這是一個面向安全行業(yè)的設(shè)計(jì)的查詢語言,所以運(yùn)用其最多的應(yīng)該也是安全方面的工程師。

五、ES查詢方式內(nèi)部

到目前為止,ES主要提供了以上4種查詢方向,也分別按照以上順序演進(jìn),還不存在誰替代誰,依然保持并行獨(dú)立發(fā)展進(jìn)化。ES執(zhí)行所有的查詢方式,先是轉(zhuǎn)換為DSL,構(gòu)建各自的QueryBuilder,其次構(gòu)建各自的Query,最后交由Lucene執(zhí)行。

六、經(jīng)驗(yàn)認(rèn)知

以上基于ES提供的查詢方式,詳細(xì)談了一下個人的經(jīng)驗(yàn)認(rèn)知,僅僅在ES領(lǐng)域,就可以看到,如果我們深度的掌握ES數(shù)據(jù)產(chǎn)品,我們的工作方式與編程方式都會發(fā)生很大的變化,我們不再需要基于編程語言去構(gòu)建復(fù)雜的原始查詢業(yè)務(wù)場景,不在需要編程語言承載數(shù)據(jù)表達(dá)能力。

在面向數(shù)據(jù)編程時代,我們的編程方式與認(rèn)知都需要進(jìn)化,掌握一門編程語言僅僅是能做應(yīng)用項(xiàng)目的第一步,編程語言掌握的深入其實(shí)本質(zhì)上沒有太多意義,一個應(yīng)用系統(tǒng)最終需要的是數(shù)據(jù)產(chǎn)品來承載,編程語言僅僅是一個交互入口,我們可以在很短的時間內(nèi)學(xué)會一門編程語言并進(jìn)行項(xiàng)目實(shí)戰(zhàn),但是對于一個數(shù)據(jù)產(chǎn)品的掌控確需要相當(dāng)長的時間與經(jīng)驗(yàn)積累。

“ES玩的好,下班下得早!”不僅僅是一句ES的口號,更多的是期望通過“面向數(shù)據(jù)編程”理念,重新審視編程的本質(zhì)。

參考資料

  • 查詢字符串 query string
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html
  • 簡單查詢字符串 simple-query-string
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html
  • 查詢領(lǐng)域特定語言 query-dsl
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
  • SQL社區(qū)插件 elasticsearch-sql
  • https://github.com/NLPchina/elasticsearch-sql
  • SQL官方插件 xpack-sql
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-sql.html
  • 官方EQL
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/eql.html

作者介紹

李猛,數(shù)據(jù)領(lǐng)域?qū)<遥珽lastic Stack國內(nèi)頂尖實(shí)戰(zhàn)專家,國內(nèi)首批Elastic官方認(rèn)證工程師21人之一。2012年入手Elasticsearch,對Elastic Stack技術(shù)棧開發(fā)、架構(gòu)、運(yùn)維、源碼、算法等方面有深入實(shí)戰(zhàn)經(jīng)驗(yàn)。負(fù)責(zé)過多種Elastic Stack項(xiàng)目,包括大數(shù)據(jù)分析領(lǐng)域、機(jī)器學(xué)習(xí)預(yù)測領(lǐng)域、業(yè)務(wù)查詢加速領(lǐng)域、日志分析領(lǐng)域、基礎(chǔ)指標(biāo)監(jiān)控領(lǐng)域等。十余年技術(shù)實(shí)戰(zhàn)從業(yè)經(jīng)驗(yàn),擅長大數(shù)據(jù)多種技術(shù)棧混合,系統(tǒng)架構(gòu)領(lǐng)域。

責(zé)任編輯:未麗燕 來源: dbaplus社群
相關(guān)推薦

2016-06-01 15:42:58

Hadoop數(shù)據(jù)管理分布式

2021-08-06 10:43:56

Kubernetes容器

2012-10-24 10:16:17

IT工程師云計(jì)算網(wǎng)絡(luò)管理

2021-07-06 06:39:58

Kafka消息隊(duì)列系統(tǒng)

2024-01-25 10:14:09

HashSetHashMapJava

2023-07-05 08:05:17

Goerror應(yīng)用場景

2024-05-15 08:49:23

.NET定時器UI線程

2012-10-23 09:32:07

2013-05-09 09:14:41

虛擬化基礎(chǔ)設(shè)施

2024-02-23 08:18:32

首屏產(chǎn)品瀏覽器

2023-12-08 08:29:53

SpringAOP日志

2011-04-15 13:18:47

FlashHTML 5

2022-09-05 14:46:01

元宇宙區(qū)塊鏈人工智能

2024-03-06 09:24:50

AsyncAwaitC#

2020-12-21 14:42:42

大數(shù)據(jù)云計(jì)算人工智能

2019-06-18 08:15:07

區(qū)塊鏈數(shù)字貨幣比特幣

2016-10-21 15:07:11

2011-05-17 15:24:18

Shibboleth認(rèn)證

2021-09-16 07:52:18

算法應(yīng)用場景

2021-03-16 06:47:47

Python
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲国产精品人人爽夜夜爽 | 91不卡 | 亚洲成人网在线播放 | 国产一级在线 | 懂色中文一区二区三区在线视频 | 国产福利在线播放 | 久久久久久久久一区 | 成人高清在线 | 免费看一区二区三区 | 日韩成人免费视频 | 黑人精品xxx一区一二区 | 欧美二区乱c黑人 | 在线亚洲欧美 | 国产精品久久久久久久久久久久久久 | 欧美精品一区二区三区四区 | 日韩av福利在线观看 | 精品久久电影 | 日韩在线播放网址 | 久久亚洲视频 | 成人乱人乱一区二区三区软件 | 美女国内精品自产拍在线播放 | 欧美在线观看免费观看视频 | 中文字幕 在线观看 | 青青久草 | h在线| 欧美日韩亚洲在线 | 久久综合久久综合久久综合 | 一区二区三区欧美在线 | 极品销魂美女一区二区 | 午夜精品福利视频 | 精品熟人一区二区三区四区 | 亚洲国产成人精品久久久国产成人一区 | 日韩专区中文字幕 | 视频一区在线 | 日韩免费在线观看视频 | 免费一区二区三区 | 国产精品久久99 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 人成在线视频 | 午夜精品久久久久久久久久久久久 | av福利网站 |