1、ES是如何產(chǎn)生的?
(1)思考:大規(guī)模數(shù)據(jù)如何檢索?
如:當(dāng)系統(tǒng)數(shù)據(jù)量上了10億、100億條的時(shí)候,我們在做系統(tǒng)架構(gòu)的時(shí)候通常會(huì)從以下角度去考慮問題:
1)用什么數(shù)據(jù)庫好?(mysql、sybase、oracle、達(dá)夢、神通、mongodb、hbase…)
2)如何解決單點(diǎn)故障;(lvs、F5、A10、Zookeep、MQ)
3)如何保證數(shù)據(jù)安全性;(熱備、冷備、異地多活)
4)如何解決檢索難題;(數(shù)據(jù)庫代理中間件:mysql-proxy、Cobar、MaxScale等;)
5)如何解決統(tǒng)計(jì)分析問題;(離線、近實(shí)時(shí))
(2)傳統(tǒng)數(shù)據(jù)庫的應(yīng)對解決方案
對于關(guān)系型數(shù)據(jù),我們通常采用以下或類似架構(gòu)去解決查詢瓶頸和寫入瓶頸:
解決要點(diǎn):
1)通過主從備份解決數(shù)據(jù)安全性問題;
2)通過數(shù)據(jù)庫代理中間件心跳監(jiān)測,解決單點(diǎn)故障問題;
3)通過代理中間件將查詢語句分發(fā)到各個(gè)slave節(jié)點(diǎn)進(jìn)行查詢,并匯總結(jié)果

2、ES介紹
Elasticsearch 是一個(gè)分布式可擴(kuò)展的實(shí)時(shí)搜索和分析引擎.Elasticsearch也使用Java開發(fā)并使用Apache Lucene作為其核心來實(shí)現(xiàn)所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡單,它不僅包括了全文搜索功能,還可以進(jìn)行以下工作:
- 分布式實(shí)時(shí)文件存儲(chǔ),并將每一個(gè)字段都編入索引,使其可以被搜索。
- 實(shí)時(shí)分析的分布式搜索引擎。
- 可以擴(kuò)展到上百臺(tái)服務(wù)器,處理PB級別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。
基本概念
先說Elasticsearch的文件存儲(chǔ),Elasticsearch是面向文檔型數(shù)據(jù)庫,一條數(shù)據(jù)在這里就是一個(gè)文檔,用JSON作為文檔序列化的格式
用MySQL的關(guān)系來說明ES的存儲(chǔ)
索引(indices)--------------------------------Databases 數(shù)據(jù)庫
類型(type)-----------------------------Table 數(shù)據(jù)表
文檔(Document)----------------Row 行
字段(Field)-------------------Columns 列
3、ES核心概念
1)Cluster:集群。
ES可以作為一個(gè)獨(dú)立的單個(gè)搜索服務(wù)器。不過,為了處理大型數(shù)據(jù)集,實(shí)現(xiàn)容錯(cuò)和高可用性,ES可以運(yùn)行在許多互相合作的服務(wù)器上。這些服務(wù)器的集合稱為集群。
2)Node:節(jié)點(diǎn)。
形成集群的每個(gè)服務(wù)器稱為節(jié)點(diǎn)。
3)Shard:分片。
當(dāng)有大量的文檔時(shí),由于內(nèi)存的限制、磁盤處理能力不足、無法足夠快的響應(yīng)客戶端的請求等,一個(gè)節(jié)點(diǎn)可能不夠。這種情況下,數(shù)據(jù)可以分為較小的分片。每個(gè)分片放到不同的服務(wù)器上。
當(dāng)你查詢的索引分布在多個(gè)分片上時(shí),ES會(huì)把查詢發(fā)送給每個(gè)相關(guān)的分片,并將結(jié)果組合在一起,而應(yīng)用程序并不知道分片的存在。即:這個(gè)過程對用戶來說是透明的。
4)Replia:副本。
為提高查詢吞吐量或?qū)崿F(xiàn)高可用性,可以使用分片副本。
副本是一個(gè)分片的精確復(fù)制,每個(gè)分片可以有零個(gè)或多個(gè)副本。ES中可以有許多相同的分片,其中之一被選擇更改索引操作,這種特殊的分片稱為主分片。
當(dāng)主分片丟失時(shí),如:該分片所在的數(shù)據(jù)不可用時(shí),集群將副本提升為新的主分片。
5)全文檢索。
全文檢索就是對一篇文章進(jìn)行索引,可以根據(jù)關(guān)鍵字搜索,類似于mysql里的like語句。
全文索引就是把內(nèi)容根據(jù)詞的意義進(jìn)行分詞,然后分別創(chuàng)建索引,例如”你們的激情是因?yàn)槭裁词虑閬淼摹?可能會(huì)被分詞成:“你們“,”激情“,“什么事情“,”來“ 等關(guān)鍵詞,這樣當(dāng)你搜索“你們” 或者 “激情” 都會(huì)把這句搜出來。
4、倒排索引
也常被稱為反向索引、置入檔案或反向檔案,是一種索引方法,被用來存儲(chǔ)在全文搜索下某個(gè)單詞在一個(gè)文檔或者一組文檔中的存儲(chǔ)位置的映射。它是文檔檢索系統(tǒng)中最常用的數(shù)據(jù)結(jié)構(gòu)。通過倒排索引,可以根據(jù)單詞快速獲取包含這個(gè)單詞的文檔列表。倒排索引主要由兩個(gè)部分組成:“單詞詞典”和“倒排文件”
推薦一個(gè)鏈接:
https://developer.51cto.com/art/201904/594615.htm
5、ES國內(nèi)外使用優(yōu)秀案例
1) 2013年初,GitHub拋棄了Solr,采取ElasticSearch 來做PB級的搜索。 “GitHub使用ElasticSearch搜索20TB的數(shù)據(jù),包括13億文件和1300億行代碼”。
2)維基百科:啟動(dòng)以elasticsearch為基礎(chǔ)的核心搜索架構(gòu)。
3)SoundCloud:“SoundCloud使用ElasticSearch為1.8億用戶提供即時(shí)而精準(zhǔn)的音樂搜索服務(wù)”。
4)百度:百度目前廣泛使用ElasticSearch作為文本數(shù)據(jù)分析,采集百度所有服務(wù)器上的各類指標(biāo)數(shù)據(jù)及用戶自定義數(shù)據(jù),通過對各種數(shù)據(jù)進(jìn)行多維分析展示,輔助定位分析實(shí)例異?;驑I(yè)務(wù)層面異常。