Elasticsearch 基礎概念



Elasticsearch 是一個基於 Apache Lucene 的搜尋伺服器。它由 Shay Banon 開發,並於 2010 年釋出。現在由 Elasticsearch BV 維護。其最新版本為 7.0.0。

Elasticsearch 是一個即時分散式且開源的全文搜尋和分析引擎。它可以透過 RESTful 網路服務介面訪問,並使用無模式 JSON(JavaScript 物件表示法)文件來儲存資料。它基於 Java 程式語言構建,因此 Elasticsearch 可以在不同的平臺上執行。它使使用者能夠以非常高的速度探索海量資料。

一般特性

Elasticsearch 的一般特性如下:

  • Elasticsearch 可擴充套件到 PB 級的結構化和非結構化資料。

  • Elasticsearch 可用作 MongoDB 和 RavenDB 等文件儲存的替代品。

  • Elasticsearch 使用反規範化來提高搜尋效能。

  • Elasticsearch 是流行的企業搜尋引擎之一,目前已被許多大型組織使用,例如維基百科、衛報、StackOverflow、GitHub 等。

  • Elasticsearch 是開源的,並根據 Apache 許可證 2.0 版提供。

關鍵概念

Elasticsearch 的關鍵概念如下:

節點 (Node)

它指的是 Elasticsearch 的單個執行例項。單個物理和虛擬伺服器根據其物理資源(如 RAM、儲存和處理能力)容納多個節點。

叢集 (Cluster)

它是⼀個或多個節點的集合。叢集為所有節點提供跨所有資料的集體索引和搜尋功能。

索引 (Index)

它是不同型別文件及其屬性的集合。索引還使用分片的概念來提高效能。例如,⼀組文件包含社交網路應用程式的資料。

文件 (Document)

它是以 JSON 格式定義的特定方式排列的欄位的集合。每個文件都屬於⼀種類型,並駐留在索引內。每個文件都與⼀個稱為 UID 的唯一識別符號關聯。

分片 (Shard)

索引被水平細分為分片。這意味著每個分片包含文件的所有屬性,但包含的 JSON 物件數量少於索引。水平分離使分片成為獨立的節點,可以儲存在任何節點中。主分片是索引的原始水平部分,然後將這些主分片複製到副本分片。

副本 (Replicas)

Elasticsearch 允許使用者建立其索引和分片的副本。複製不僅有助於在發生故障時提高資料的可用性,而且還透過在這些副本中執行並行搜尋操作來提高搜尋效能。

優勢

  • Elasticsearch 是基於 Java 開發的,使其幾乎相容所有平臺。

  • Elasticsearch 是即時的,換句話說,新增的文件一秒鐘後即可在這個引擎中搜索到。

  • Elasticsearch 是分散式的,這使得它易於擴充套件和整合到任何大型組織中。

  • 使用 Elasticsearch 中存在的閘道器概念,可以輕鬆建立完整的備份。

  • 與 Apache Solr 相比,Elasticsearch 更容易處理多租戶。

  • Elasticsearch 使用 JSON 物件作為響應,這使得可以使用大量不同的程式語言來呼叫 Elasticsearch 伺服器。

  • Elasticsearch 支援幾乎所有文件型別,除了不支援文字渲染的那些型別。

劣勢

  • Elasticsearch 不像 Apache Solr 那樣支援多語言(僅限於 JSON 格式),在處理請求和響應資料方面不支援多語言(僅限於 JSON 格式),而 Apache Solr 支援 CSV、XML 和 JSON 格式。

  • 有時,Elasticsearch 會出現腦裂的情況。

Elasticsearch 和 RDBMS 的比較

在 Elasticsearch 中,索引類似於 RDBMS(關係資料庫管理系統)中的表。每個表都是行的集合,就像每個索引都是 Elasticsearch 中文件的集合一樣。

下表對這些術語進行了直接比較:

Elasticsearch RDBMS
叢集 (Cluster) 資料庫
分片 (Shard) 分片 (Shard)
索引 (Index)
欄位
文件 (Document)
廣告
© . All rights reserved.