Elasticsearch 的一些关键概念
我更喜歡把 Elasticsearch 作為一種 nosql 去理解,它的一些開發概念和 MongoDB 以及 Redis 沒有太大的區別,不過了解 Elasticsearch 中的一些核心概念對于你后續使用它仍然有非常大的幫助。
1. 近實時查詢(Near RealTime)
Elasticsearch 是一個能提供近實時查詢的搜索服務引擎,這意味著從索引文檔到真正可搜索之間會有一個輕微的延遲(大概在一秒內)。
2. 節點和集群
節點(node)是一個運行著的 Elasticsearch 實例,你可以認為是單個服務器。集群(cluster)是一個或多個節點的集合,他們協同工作,共享數據并提供故障轉移和擴展功能。集群由唯一名稱標識,如 .NET Core 中的環境名稱,推薦在不同的環境中使用諸如 Development,Production 之類的名稱部署開發。其實節點和集群就是 web 開發中的常見概念而已,大家注意區分即可。
3. 文檔
文檔是可索引信息的基本單元,以JSON表示。你可以用其來定義單個產品信息或是員工信息。我們可以把文檔理解為數據庫文檔中的行列數據。在索引/類型中,您可以存儲任意數量的文檔。文檔有幾個共同不可缺的屬性,分別為 _index, _type, _id, 針對特定一個或一類文檔進行操作時,必須指定這些屬性。
最后要提醒大家的是,雖然文檔物理上是駐留在索引中,但實際上文檔必須索引/分配給索引中的類型。
4. 索引
索引是具有某些相似特征的文檔的集合,它和數據庫中的索引概念并不十分相同。我們可以把索引理解為數據庫文檔中的數據庫。事實上,我們的數據被存儲和索引在分片(shards)中,索引只是一個把一個或多個分片分組在一起的邏輯空間。然而,這只是一些內部細節——我們的程序完全不用關心分片。
5. 類型
在索引中,我們可以定義一個或多個類型。類型是索引的邏輯類別/分區,其語義完全由開發者決定。通常,為具有一組公共字段的文檔定義類型。例如,假設開發者運行博客平臺并將所有數據存儲在一個索引中。在此索引中,我們可以為用戶數據定義類型,為博客數據定義另一種類型,并為注釋數據定義另一種類型。我們可以把索引理解成數據庫文檔中的表。
以下是 es 和 關系型數據庫的簡單類比
Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices(索引簇)-> Types -> Documents -> Fields
6. 分片和復制
理論上,索引可以存儲盡可能多的數據,但是這種情況下性能往往不太樂觀,或者常見的磁盤容量限制也不能允許。所以 Elasticsearch 提供了類似于 MongoDB 中的分片功能,該功能能將索引細分為多個分片。每個分片本身是一個功能完全和獨立的“索引”,可以托管在集群中的任何節點上。
同樣的,有分片技術來處理數據量增長快速的問題,就意味著需要復制技術來應對這種過程中(其實不只是該過程,任何情況下都應該有安全意識)數據安全的問題。Elasticsearch 允許您將索引分片的一個或多個副本轉換為所謂的副本分片。復制技術為我們提供了數據的高可用性和搜索吞吐的擴展性。不過需要注意的是,副本分片從不分配在與從其復制的原始/主分片相同的節點上。
總而言之,每個索引可以拆分為多個分片。索引也可以復制為零(意味著沒有副本)或更多次。一旦復制,每個索引將具有主分片(從索引復制的原始分片)和副本分片(主分片的副本)。開發者可以在創建索引時就為每個索引定義分片和副本的數量。創建索引后,可以隨時動態更改副本數,但不能在此過程后隨即更改分片數。
轉載于:https://www.cnblogs.com/Wddpct/p/6623201.html
總結
以上是生活随笔為你收集整理的Elasticsearch 的一些关键概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下vi的一些简单的操作
- 下一篇: 2017广东工业大学程序设计竞赛决赛--