ES入門

這兩天部門通知要給我分配一些ES處理數據的任務,趁着任務還沒下來,趕緊先熟悉一下ES的有關知識。

參考:https://blog.csdn.net/macro_csdn/article/details/97499766

https://www.elastic.co/guide/cn/elasticsearch/guide/current/_talking_to_elasticsearch.html

https://github.com/elasticsearch-cn/elasticsearch-definitive-guide/blob/cn/010_Intro/05_What_is_it.asciidoc

https://www.jianshu.com/p/2b6f5eb5ac59

https://www.cnblogs.com/baizhanshi/p/9792222.html

先看一下概念:

Elasticsearch(ES)是一個基於Lucene構建的開源、分佈式、RESTful接口的全文搜索引擎。Elasticsearch還是一個分佈式文檔數據庫,其中每個字段均可被索引,而且每個字段的數據均可被搜索,ES能夠橫向擴展至數以百計的服務器存儲以及處理PB級的數據。可以在極短的時間內存儲、搜索和分析大量的數據。通常作爲具有複雜搜索場景情況下的核心發動機。

 

1.Elasticsearch的概述

Elasticsearch(ES)是一個基於Lucene構建的開源、分佈式、RESTful接口的全文搜索引擎。Elasticsearch還是一個分佈式文檔數據庫,其中每個字段均可被索引,而且每個字段的數據均可被搜索,ES能夠橫向擴展至數以百計的服務器存儲以及處理PB級的數據。可以在極短的時間內存儲、搜索和分析大量的數據。通常作爲具有複雜搜索場景情況下的核心發動機。

 

image.png

 

ElasticSearch就是爲高可用和可擴展而生的。可以通過購置性能更強的服務器或者升級硬件來完成系統擴展,稱爲垂直或向上擴展(Vertical Scale/Scaling Up)。另一方面,增加更多的服務器來完成系統擴展,稱爲水平擴展或者向外擴展(Horizontal Scale/Scaling Out)。儘管ES能夠利用更強勁的硬件,垂直擴展畢竟還是有它的極限。真正的可擴展性來自於水平擴展,通過向集羣中添加更多的節點來分擔負載,增加可靠性。ES天生就是分佈式的:它知道如何管理多個節點來完成擴展和實現高可用性。這也意味你的應用不需要做任何的改動。

2. Elasticsearch可以做什麼

當你經營一家網上商店,你可以讓你的客戶搜索你賣的商品。在這種情況下,你可以使用ElasticSearch來存儲你的整個產品目錄和庫存信息,爲客戶提供精準搜索,可以爲客戶推薦相關商品。

當你想收集日誌或者交易數據的時候,需要分析和挖掘這些數據,尋找趨勢,進行統計,總結,或發現異常。在這種情況下,你可以使用Logstash或者其他工具來進行收集數據,當這引起數據存儲到ElasticsSearch中。你可以搜索和彙總這些數據,找到任何你感興趣的信息。

對於程序員來說,比較有名的案例是GitHub,GitHub的搜索是基於ElasticSearch構建的,在github.com/search頁面,你可以搜索項目、用戶、issue、pull request,還有代碼。共有40~50個索引庫,分別用於索引網站需要跟蹤的各種數據。雖然只索引項目的主分支(master),但這個數據量依然巨大,包括20億個索引文檔,30TB的索引文件。

 

image.png

3. Basic Concepts基本概念

3.1 Near Realtime(NRT) 幾乎實時

Elasticsearch是一個幾乎實時的搜索平臺。意思是,從索引一個文檔到這個文檔可被搜索只需要一點點的延遲,這個時間一般爲毫秒級。

3.2 Cluster 集羣

羣集是一個或多個節點(服務器)的集合, 這些節點共同保存整個數據,並在所有節點上提供聯合索引和搜索功能。一個集羣由一個唯一集羣ID確定,並指定一個集羣名(默認爲“elasticsearch”)。該集羣名非常重要,因爲節點可以通過這個集羣名加入羣集,一個節點只能是羣集的一部分。

確保在不同的環境中不要使用相同的羣集名稱,否則可能會導致連接錯誤的羣集節點。例如,你可以使用logging-dev、logging-stage、logging-prod分別爲開發、階段產品、生產集羣做記

3.3 Node節點

節點是單個服務器實例,它是羣集的一部分,可以存儲數據,並參與羣集的索引和搜索功能。就像一個集羣,節點的名稱默認爲一個隨機的通用唯一標識符(UUID),確定在啓動時分配給該節點。如果不希望默認,可以定義任何節點名。這個名字對管理很重要,目的是要確定你的網絡服務器對應於你的ElasticSearch羣集節點。

我們可以通過羣集名配置節點以連接特定的羣集。默認情況下,每個節點設置加入名爲“elasticSearch”的集羣。這意味着如果你啓動多個節點在網絡上,假設他們能發現彼此都會自動形成和加入一個名爲“elasticsearch”的集羣。

在單個羣集中,您可以擁有儘可能多的節點。此外,如果“elasticsearch”在同一個網絡中,沒有其他節點正在運行,從單個節點的默認情況下會形成一個新的單節點名爲"elasticsearch"的集羣。

3.4 Index索引

索引是具有相似特性的文檔集合。例如,可以爲客戶數據提供索引,爲產品目錄建立另一個索引,以及爲訂單數據建立另一個索引。索引由名稱(必須全部爲小寫)標識,該名稱用於在對其中的文檔執行索引、搜索、更新和刪除操作時引用索引。在單個羣集中,您可以定義儘可能多的索引。

3.5 Type類型

在索引中,可以定義一個或多個類型。類型是索引的邏輯類別/分區,其語義完全取決於您。一般來說,類型定義爲具有公共字段集的文檔。例如,假設你運行一個博客平臺,並將所有數據存儲在一個索引中。在這個索引中,您可以爲用戶數據定義一種類型,爲博客數據定義另一種類型,以及爲註釋數據定義另一類型。

3.6 Document文檔

文檔是可以被索引的信息的基本單位。例如,您可以爲單個客戶提供一個文檔,單個產品提供另一個文檔,以及單個訂單提供另一個文檔。本文件的表示形式爲JSON(JavaScript Object Notation)格式,這是一種非常普遍的互聯網數據交換格式。

在索引/類型中,您可以存儲儘可能多的文檔。請注意,儘管文檔物理駐留在索引中,文檔實際上必須索引或分配到索引中的類型。

3.7 Shards & Replicas分片與副本

索引可以存儲大量的數據,這些數據可能超過單個節點的硬件限制。例如,十億個文件佔用磁盤空間1TB的單指標可能不適合對單個節點的磁盤或可能太慢服務僅從單個節點的搜索請求。

爲了解決這一問題,Elasticsearch提供細分你的指標分成多個塊稱爲分片的能力。當你創建一個索引,你可以簡單地定義你想要的分片數量。每個分片本身是一個全功能的、獨立的“指數”,可以託管在集羣中的任何節點。

Shards分片的重要性主要體現在以下兩個特徵:

  • 分片允許您水平拆分或縮放內容的大小
  • 分片允許你分配和並行操作的碎片(可能在多個節點上)從而提高性能/吞吐量
    這個機制中的碎片是分佈式的以及其文件彙總到搜索請求是完全由ElasticSearch管理,對用戶來說是透明的。

在同一個集羣網絡或雲環境上,故障是任何時候都會出現的,擁有一個故障轉移機制以防分片和結點因爲某些原因離線或消失是非常有用的,並且被強烈推薦。爲此,Elasticsearch允許你創建一個或多個拷貝,你的索引分片進入所謂的副本或稱作複製品的分片,簡稱Replicas。

Replicas的重要性主要體現在以下兩個特徵:

  • 副本爲分片或節點失敗提供了高可用性。爲此,需要注意的是,一個副本的分片不會分配在同一個節點作爲原始的或主分片,副本是從主分片那裏複製過來的。
  • 副本允許用戶擴展你的搜索量或吞吐量,因爲搜索可以在所有副本上並行執行。

3.8 ES和數據庫關係對比

這樣看來將ES理解成一個數據庫似乎沒什麼問題,索引相當於數據庫,而索引中的不同type屬性相當於聲明瞭一個又一個表,再然後就是表中的具體字段名(文檔)和字段值(字段),先了解整體架構,和概念,上面表中的反向索引及概念可以戳這裏https://www.cnblogs.com/baizhanshi/p/9792222.html,這位博主講的非常明白

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章