Elasticsearch是一個(gè)分布式、高擴(kuò)展、高實(shí)時(shí)的搜索與數(shù)據(jù)分析引擎。它能很方便的使大量數(shù)據(jù)具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸縮性,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價(jià)值。
場(chǎng)景—:使用Elasticsearch作為主要的后端
傳統(tǒng)項(xiàng)目中,搜索引擎是部署在成熟的數(shù)據(jù)存儲(chǔ)的頂部,以提供快速且相關(guān)的搜索能力。這是因?yàn)樵缙诘乃阉饕娌荒芴峁┠陀玫拇鎯?chǔ)或其他經(jīng)常需要的功能,如統(tǒng)計(jì)。
Elasticsearch是提供持久存儲(chǔ)、統(tǒng)計(jì)等多項(xiàng)功能的現(xiàn)代搜索引擎。
如果你開(kāi)始一個(gè)新項(xiàng)目,我們建議您考慮使用Elasticsearch作為唯一的數(shù)據(jù)存儲(chǔ),以幫助保持你的設(shè)計(jì)盡可能簡(jiǎn)單。
此種場(chǎng)景不支持包含頻繁更新、事務(wù)(transaction)的操作。
舉例如下:新建一個(gè)博客系統(tǒng)使用es作為存儲(chǔ)。
1)我們可以向ES提交新的博文;
2)使用ES檢索、搜索、統(tǒng)計(jì)數(shù)據(jù)。
ES作為存儲(chǔ)的優(yōu)勢(shì):
如果一臺(tái)服務(wù)器出現(xiàn)故障時(shí)會(huì)發(fā)生什么?你可以通過(guò)復(fù)制數(shù)據(jù)到不同的服務(wù)器以達(dá)到容錯(cuò)的目的。
注意:
整體架構(gòu)設(shè)計(jì)時(shí),需要我們權(quán)衡是否有必要增加額外的存儲(chǔ)。
場(chǎng)景二:在現(xiàn)有系統(tǒng)中增加elasticsearch
由于ES不能提供存儲(chǔ)的所有功能,一些場(chǎng)景下需要在現(xiàn)有系統(tǒng)數(shù)據(jù)存儲(chǔ)的基礎(chǔ)上新增ES支持。
舉例1:ES不支持事務(wù)、復(fù)雜的關(guān)系(至少1.X版本不支持,2.X有改善,但支持的仍然不好),如果你的系統(tǒng)中需要上述特征的支持,需要考慮在原有架構(gòu)、原有存儲(chǔ)的基礎(chǔ)上的新增ES的支持。
舉例2:如果你已經(jīng)有一個(gè)在運(yùn)行的復(fù)雜的系統(tǒng),你的需求之一是在現(xiàn)有系統(tǒng)中添加檢索服務(wù)。一種非常冒險(xiǎn)的方式是重構(gòu)系統(tǒng)以支持ES。而相對(duì)安全的方式是:將ES作為新的組件添加到現(xiàn)有系統(tǒng)中。
如果你使用了如下圖所示的SQL 數(shù)據(jù)庫(kù) 和ES存儲(chǔ),你需要找到一種方式使得兩存儲(chǔ)之間實(shí)時(shí)同步。需要根據(jù)數(shù)據(jù)的組成、數(shù)據(jù)庫(kù)選擇對(duì)應(yīng)的同步插件。可供選擇的插件包括:
1)mysql、oracle選擇logstash-input-jdbc插件。
2)mongo選擇mongo-connector工具。
假設(shè)你的在線零售商店的產(chǎn)品信息存儲(chǔ)在SQL數(shù)據(jù)庫(kù)中。為了快速且相關(guān)的搜索,你安裝Elasticsearch。
為了索引數(shù)據(jù),您需要部署一個(gè)同步機(jī)制,該同步機(jī)制可以是Elasticsearch插件或你建立一個(gè)自定義的服務(wù)。此同步機(jī)制可以將對(duì)應(yīng)于每個(gè)產(chǎn)品的所有數(shù)據(jù)和索引都存儲(chǔ)在Elasticsearch,每個(gè)產(chǎn)品作為一個(gè)document存儲(chǔ)(這里的document相當(dāng)于關(guān)系型數(shù)據(jù)庫(kù)中的一行/row數(shù)據(jù))。
當(dāng)在該網(wǎng)頁(yè)上的搜索條件中輸入“用戶的類型”,店面網(wǎng)絡(luò)應(yīng)用程序通過(guò)Elasticsearch查詢?cè)撔畔?。Elasticsearch返回符合標(biāo)準(zhǔn)的產(chǎn)品documents,并根據(jù)你喜歡的方式來(lái)分類文檔。排序可以根據(jù)每個(gè)產(chǎn)品的被搜索次數(shù)所得到的相關(guān)分?jǐn)?shù),或任何存儲(chǔ)在產(chǎn)品document信息,例如:最新最近加入的產(chǎn)品、平均得分,或者是那些插入或更新信息。所以你可以只使用Elasticsearch處理搜索。這取決于同步機(jī)制來(lái)保持Elasticsearch獲取最新變化。
場(chǎng)景三:使用elasticsearch和現(xiàn)有的工具
在一些使用情況下,您不必寫一行代碼就能通過(guò)elasticssearch完成一項(xiàng)工作。很多工具都可以與Elasticsearch一起工作,所以你不必到你從頭開(kāi)始編寫。
例如,假設(shè)要部署一個(gè)大規(guī)模的日志框架存儲(chǔ),搜索,并分析了大量的事件。
如圖下圖,處理日志和輸出到Elasticsearch,您可以使用日志記錄工具,如rsyslog(www.rsyslog.com),Logstash(www.elastic.co/products/logstash),或Apache Flume(http://flume.apache.org)。
搜索和可視化界面分析這些日志,你可以使用Kibana(www.elastic.co/產(chǎn)品/kibana)。