Elasticsearch 是一個(gè)可用于分布式以及符合RESTful 風(fēng)格的搜索和數(shù)據(jù)分析引擎。—— Elastic Stack 官網(wǎng)

關(guān)于Elasticsearch的“愛(ài)恨情仇"
- 或許提起搜索服務(wù)器,大部分人都會(huì)想起Solr 和 Elasticsearch 甚至以及國(guó)產(chǎn)大廠自研等。隨著人工智能和大數(shù)據(jù)時(shí)代的到來(lái),甚至還帶動(dòng)了一系列的機(jī)器引擎的出現(xiàn),譬如Splunk等。其中Solr 和 Elasticsearch是基于Lucene的搜索服務(wù)器。一般Solr是面向的是全文檢索引擎,而Elasticsearch是用于全文搜索、結(jié)構(gòu)化搜索、分析。而對(duì)于Splunk機(jī)器數(shù)據(jù)的引擎,可收集、索引和利用所有應(yīng)用程序、服務(wù)器和設(shè)備生成的快速移動(dòng)型計(jì)算機(jī)數(shù)據(jù)??墒遣徽摷夹g(shù)如何發(fā)展和更替,作為一位程序員,我們要做的不就是即時(shí)地維護(hù)技術(shù)儲(chǔ)備知識(shí)庫(kù)和實(shí)時(shí)更新自己的技術(shù)緩存,以及實(shí)現(xiàn)可擴(kuò)展性的技術(shù)深度樹(shù)的增長(zhǎng)。
- 關(guān)于Elasticsearch,記得當(dāng)時(shí)接觸到Elasticsearch的名詞的時(shí)候,那是2017年的夏天。當(dāng)時(shí)的工作任務(wù)是實(shí)現(xiàn)一個(gè)關(guān)于知識(shí)庫(kù)的系統(tǒng)。當(dāng)時(shí)小伙伴們技術(shù)選型主要還是偏向Solr+Lucene來(lái)的做,有的甚至說(shuō)直接使用Mysql數(shù)據(jù)庫(kù)的自帶函數(shù)來(lái)做。我是在無(wú)意中,在網(wǎng)上查詢搜索引擎的技術(shù)實(shí)戰(zhàn)的時(shí)候,看見(jiàn)了一篇對(duì)于Elasticsearch應(yīng)用實(shí)戰(zhàn)的應(yīng)用報(bào)告分析,才去查詢了Elasticsearch的相關(guān)資料。不過(guò),當(dāng)時(shí)網(wǎng)上大部分對(duì)于搜索功能的Demo,大部分還是關(guān)于Solr 的比較多。也許在那個(gè)時(shí)候,大部分的技術(shù)概念基本都是偏向于技術(shù)長(zhǎng)期穩(wěn)定和文檔資料全,使用程度相對(duì)較重的因素。但是,我個(gè)人卻留了一個(gè)心眼,自己嘗試去實(shí)戰(zhàn)Elasticsearch。
- 第一次,動(dòng)手實(shí)操還是在Windows本機(jī)上安裝(22G內(nèi)存)的。其中,安裝過(guò)程相比利用Tomcat+Solr來(lái)說(shuō),相對(duì)較復(fù)雜,而且對(duì)于本機(jī)的內(nèi)存和功耗占用較重。個(gè)開(kāi)發(fā)基本只能說(shuō)是能運(yùn)行起來(lái),可穩(wěn)定性方面,就有點(diǎn)顯得望而卻步的感覺(jué)。第二次,動(dòng)手實(shí)戰(zhàn)是在本機(jī)搭建了一個(gè)虛擬機(jī)去實(shí)戰(zhàn)(2核8G),可在網(wǎng)絡(luò)通信方面,當(dāng)時(shí)選的是網(wǎng)絡(luò)橋接方式,也讓我對(duì)此覺(jué)得很是麻煩。第三次,是自己擁有了自己的阿里云服務(wù)器,在上面按照傳統(tǒng)部署方式(相對(duì)于Docker部署來(lái)說(shuō)),可無(wú)奈個(gè)人服務(wù)器內(nèi)存較低(2核4G),修改配置JVM等無(wú)法啟動(dòng)成功,總是拋出GC日志什么的問(wèn)題,主要還是當(dāng)時(shí)囊中羞澀的問(wèn)題,甚至一旦運(yùn)行Elasticsearch服務(wù),其它的應(yīng)用便無(wú)法啟動(dòng)和 運(yùn)行。后來(lái),接觸了Docker,于是,有了第四次的Elasticsearch實(shí)戰(zhàn)(單節(jié)點(diǎn)部署)。第四次,升級(jí)了阿里云服務(wù)器的配置(2核8G),最終實(shí)現(xiàn)了額自己的第一個(gè)Elasticsearch服務(wù)。甚至,為在后來(lái)工作中,動(dòng)手實(shí)戰(zhàn)Elasticsearch分布式集群服務(wù)奠定基礎(chǔ)。
基本概述
- 似乎從某種意義來(lái)說(shuō)Elasticsearch和MongoDB/Redis/Memcache一樣,是一種Nosql數(shù)據(jù)庫(kù)。是一個(gè)接近實(shí)時(shí)的搜索平臺(tái),從索引這個(gè)文檔到這個(gè)文檔能夠被搜索到只有一個(gè)輕微的延遲,企業(yè)應(yīng)用定位:采用Restful API標(biāo)準(zhǔn)的可擴(kuò)展和高可用的實(shí)時(shí)數(shù)據(jù)分析的全文搜索工具。不過(guò)在當(dāng)時(shí),Elastic Stack只有Elasticsearch、Kibana 和 Logstash用例,還沒(méi)有包含Beats等。而且在應(yīng)用方面,除了來(lái)當(dāng)作ELK分布式日志系統(tǒng)搭建外,更多的是Elasticsearch +Elasticsearch-Head插件在滿足業(yè)務(wù)場(chǎng)景方面的需求,能夠安全可靠地獲取任何來(lái)源、任何格式的數(shù)據(jù),然后實(shí)時(shí)地對(duì)數(shù)據(jù)進(jìn)行搜索、分析和可視化等。
- 基本特點(diǎn):
- 可拓展:支持一主多從且擴(kuò)容簡(jiǎn)易,只要cluster.name一致且在同一個(gè)網(wǎng)絡(luò)中就能自動(dòng)加入當(dāng)前集群;本身就是開(kāi)源軟件,也支持很多開(kāi)源的第三方插件
- 高可用:在一個(gè)集群的多個(gè)節(jié)點(diǎn)中進(jìn)行分布式存儲(chǔ),索引支持shards和復(fù)制,即使部分節(jié)點(diǎn)down掉,也能自動(dòng)進(jìn)行數(shù)據(jù)恢復(fù)和主從切換
- 采用RestfulAPI標(biāo)準(zhǔn):通過(guò)http接口使用JSON格式進(jìn)行操作數(shù)據(jù)
- 數(shù)據(jù)存儲(chǔ)的最小單位是文檔,本質(zhì)上是一個(gè)JSON 文本
Elasticsearch關(guān)鍵詞
- Node : 節(jié)點(diǎn),單個(gè)裝有Elasticsearch服務(wù)并且提供故障轉(zhuǎn)移和實(shí)現(xiàn)可擴(kuò)展的服務(wù)器
- Cluster : 集群,一個(gè)Elasticsearch-Cluster集群是有一個(gè)Node或者至少2個(gè)Node組成的服務(wù)器,共同服務(wù)和分享Node節(jié)點(diǎn)數(shù)據(jù)的具有負(fù)載均衡的功能,甚至基于Zookeeper集群的高可用服務(wù)等。
- Index : 索引,具有相同或者相似特征的Document文檔對(duì)象的集合
- Type : 類型,相同F(xiàn)iled字段的文檔定義一個(gè)Type類型,一個(gè)Type可以創(chuàng)建多個(gè)Index索引
- Document :文檔,一個(gè)Document文檔可以被用作Index索引的基礎(chǔ)信息單元
- Field : 字段列,F(xiàn)ield是Elasticsearch的最小單元,相擋當(dāng)于數(shù)據(jù)的某一列
- Term:由很多的字節(jié)組成。一般將Text類型的Field Value分詞之后的每個(gè)最小單元叫做Term。
- Shards :分片,Elasticsearch把Index索引分成若干份,每一個(gè)部分就是一個(gè)Shard分片
- Replicas : 復(fù)制,每個(gè)Inex索引里每個(gè)Shard分片的拷貝或者說(shuō)是數(shù)據(jù)備份
Elasticsearch 結(jié)構(gòu)與其它數(shù)據(jù)庫(kù)對(duì)比
databaseType |
databaseName |
databaseUnit |
databaseTable |
databaseRow |
databaseColumn |
sql |
Mysql |
數(shù)據(jù)庫(kù)-database |
表-table |
數(shù)據(jù)行-row |
數(shù)據(jù)列-column |
Nosql |
Elasticsearch |
索引-index |
類型-type |
文檔-document |
字段列-field |
Nosql |
Hbase |
命名空間-namespace |
域/切片-region |
數(shù)據(jù)行-row |
數(shù)據(jù)列-column |
databaseType |
databaseName |
databaseStorage |
databaseTransaction |
databaseConsistency |
databaseScalability |
secondaryIndex |
fullText |
sql |
Mysql |
行數(shù)數(shù)據(jù)存儲(chǔ),適用OLTP業(yè)務(wù) |
Innodb引擎支持 |
strong consistency-強(qiáng)一致性 |
單機(jī)可拓展粒度不高 |
支持 |
支持 |
Nosql |
Elasticsearch |
索引存儲(chǔ)-任何檢索業(yè)務(wù) |
不支持 |
支持可配置 |
水平拓展 |
支持 |
支持 |
Nosql |
Hbase |
列式數(shù)據(jù)存儲(chǔ),介于OLTP和OLAP模型之間 |
不支持 |
strong consistency-強(qiáng)一致性 和 time consistency-時(shí)序一致性 |
水平拓展 |
不支持 |
不支持 |
ps[??注意事項(xiàng)]:
- OLTP: OnLine Transaction Processing聯(lián)機(jī)事務(wù)處理過(guò)程(OLTP),主要對(duì)應(yīng)傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),基本操作增刪改查,強(qiáng)調(diào)事務(wù)一致性,比如銀行系統(tǒng)、電商系統(tǒng)。
- OLAP:Online Analytical processing 即聯(lián)機(jī)分析處理過(guò)程(OLAP),主要對(duì)應(yīng)倉(cāng)儲(chǔ)型數(shù)據(jù)庫(kù),基本讀取數(shù)據(jù),做復(fù)雜數(shù)據(jù)分析,側(cè)重技術(shù)決策支持,提供直觀簡(jiǎn)單的結(jié)果。
Elasticsearch原理剖析

- Gateway[索引數(shù)據(jù)的存儲(chǔ)格式]: Elasticsearch用來(lái)存儲(chǔ)數(shù)據(jù)index索引的文件系統(tǒng),支持多種類型[ Local FileSystem-本地文件系統(tǒng) Shared FileSystem-分布式文件系統(tǒng) Hadoop HDFS, Amazon S3 ]
- Distributed Lucene Directory[底層 API框架]:Elasticsearch底層依賴Lucene框架,每一個(gè)Elasticsearch節(jié)點(diǎn)服務(wù)都會(huì)有對(duì)應(yīng)的Lucene框架
- Major Module[加工處理方式] : 在Lucene上層,Index Module(創(chuàng)建Index模塊)、Search Module(搜索模塊)、Mapping(映射)、River(運(yùn)行在Elasticsearch集群內(nèi)部的一個(gè)插件,主要用來(lái)從外部獲取獲取異構(gòu)數(shù)據(jù),然后在Elasticsearch里創(chuàng)建索引
- Discovery[Elasticsearch發(fā)現(xiàn)機(jī)制]:Discovery 是Elasticsearch自動(dòng)發(fā)現(xiàn)節(jié)點(diǎn)的機(jī)制;Zen是用來(lái)實(shí)現(xiàn)節(jié)點(diǎn)自動(dòng)發(fā)現(xiàn)、Master節(jié)點(diǎn)選舉用;Elasticsearch是基于P2P的系統(tǒng),它首先通過(guò)廣播的機(jī)制尋找存在的節(jié)點(diǎn),然后再通過(guò)多播協(xié)議來(lái)進(jìn)行節(jié)點(diǎn)間的通信,同時(shí)也支持點(diǎn)對(duì)點(diǎn)的交互
- Scripting[Elasticsearch腳本執(zhí)行功能]:Scripting 是腳本執(zhí)行功能,有這個(gè)功能能很方便對(duì)查詢出來(lái)的數(shù)據(jù)進(jìn)行加工處理
- Plugins[Elasticsearch插件機(jī)制]:Elasticsearch整合第三方的插件的主要實(shí)現(xiàn)拓展和整合等,譬如elasticsearch-ik分詞插件、elasticsearch-sql sql插件。
- Transport[Elasticsearch傳輸機(jī)制]: 傳輸模塊支持 Thrift, Memcached , HTTP,默認(rèn)使用 HTTP 傳輸
- JMX[Elasticsearch基于Java的管理框架]:Java 的管理框架,用來(lái)管理 Elasticsearch 應(yīng)用
- RSTful Style API [Elasticsearch的API支持模式]:基于Netty實(shí)現(xiàn)的網(wǎng)絡(luò)通信,通過(guò)RSTful API 和 Elasticsearch 集群進(jìn)行交互
數(shù)據(jù)結(jié)構(gòu)

版權(quán)聲明:本文為博主原創(chuàng)文章,遵循相關(guān)版權(quán)協(xié)議,如若轉(zhuǎn)載或者分享請(qǐng)附上原文出處鏈接和鏈接來(lái)源。
|