先森林後樹木:Elasticsearch各版本升級核心內容必看

来源:https://www.cnblogs.com/flyrock/archive/2019/09/30/11614396.html
-Advertisement-
Play Games

在學習Elasticsearch 時候,因為各個版本的問題,搞不清,非常的頭疼,官方也給出了各個版本更新的情況,不過是英文版本,版本更新信息又特別多,最近學習,看了很多資料,沒有一個整理很清楚的,然後自己就統一整理下,首先聲明下麵的整理都是各個版本個人認為比較重要點,因為每個大版本更新內容太多,也不 ...


在學習Elasticsearch 時候,因為各個版本的問題,搞不清,非常的頭疼,官方也給出了各個版本更新的情況,不過是英文版本,版本更新信息又特別多,最近學習,看了很多資料,沒有一個整理很清楚的,然後自己就統一整理下,首先聲明下麵的整理都是各個版本個人認為比較重要點,因為每個大版本更新內容太多,也不能一一舉例,詳細需要參閱官方文檔,文章底部有鏈接,我也是為了自己方便在整體上,瞭解Elasticsearch 各個版本的迭代,可以更好的理解和使用Elasticsearch 產品,所以有了這篇文章。

初始版本 0.7.0

2010年5月14日發佈,第一個可以查詢到發版信息的版本,重要特性:

  • Zen Discovery 自動發現模塊
  • Groovy Client支持
  • 簡單的插件管理機制
  • 更好支持ICU分詞器
  • 更多的管理API

初始化的版本,暫時不多介紹,先來這麼多。

升級1.0.0 版本

2014年2月14日發佈,重要特性: -Snapshot/Restore API 備份恢復API

  • 支持聚合分析Aggregations
  • CAT API 支持
  • 支持聯盟查詢
  • 斷路器支持
  • Doc values 引入

2.0.0 版本

2015年10月28日發佈,重要特性:

  • 增加了 pipleline Aggregations
  • query/filter 查詢合併,都合併到query中,根據不同的上下文執行不同的查詢
  • 存儲壓縮可配置
  • Rivers 模塊被移除
  • Multicast 組播發現被移除,成為一個插件,生產環境必須配置單播地址

新特性5.0.0 版本

2016年10月26日發佈,重要特性:

  • Lucene 6.x 的支持,磁碟空間少一半;索引時間少一半;查詢性能提升25%;支持IPV6。
  • Internal engine級別移除了用於避免同一文檔併發更新的競爭鎖,帶來15%-20%的性能提升
  • Shrink API ,它可將分片數進行收縮成它的因數,如之前你是15個分片,你可以收縮成5個或者3個又或者1個,那麼我們就可以想象成這樣一種場景,在寫入壓力非常大的收集階段,設置足夠多的索引,充分利用shard的並行寫能力,索引寫完之後收縮成更少的shard,提高查詢性能
  • 提供了第一個Java原生的REST客戶端SDK
  • IngestNode,之前如果需要對數據進行加工,都是在索引之前進行處理,比如logstash可以對日誌進行結構化和轉換,現在直接在es就可以處理了
  • 提供了 Painless 腳本,代替Groovy腳本
  • 移除 site plugins ,就是說 head 、 bigdesk 都不能直接裝 es 裡面了,不過可以部署獨立站點(反正都是靜態文件)或開發 kibana 插件
  • 新增 Sliced Scroll類型,現在Scroll介面可以併發來進行數據遍歷了。每個Scroll請求,可以分成多個Slice請求,可以理解為切片,各Slice獨立並行,利用Scroll重建或者遍歷要快很多倍。
  • 新增了Profile API
  • 新增了Rollover API
  • 新增Reindex
  • 提供了第一個Java原生的REST客戶端SDK 基於HTTP協議的客戶端對Elasticsearch的依賴解耦,沒有jar包衝突,提供了集群節點自動發現、日誌處理、節點請求失敗自動進行請求輪詢,充分發揮Elasticsearch的高可用能力
  • 引入新的欄位類型 Text/Keyword 來替換 String
  • 限制索引請求大小,避免大量併發請求壓垮 ES
  • 限制單個請求的 shards 數量,預設 1000 個

新特性6.0.0 版本

2017年8月31日發佈,重要特性:

  • 稀疏性 Doc Values 的支持
  • Index sorting,即索引階段的排序。
  • 順序號的支持,每個 es 的操作都有一個順序編號(類似增量設計)
  • 無縫滾動升級
  • Removal of types,在 6.0 裡面,開始不支持一個 index 裡面存在多個 type
  • Index-template inheritance,索引版本的繼承,目前索引模板是所有匹配的都會合併,這樣會造成索引模板有一些衝突問題, 6.0 將會只匹配一個,索引創建時也會進行驗證
  • Load aware shard routing, 基於負載的請求路由,目前的搜索請求是全節點輪詢,那麼性能最慢的節點往往會造成整體的延遲增加,新的實現方式將基於隊列的耗費時間自動調節隊列長度,負載高的節點的隊列長度將減少,讓其他節點分攤更多的壓力,搜索和索引都將基於這種機制。
  • 已經關閉的索引將也支持 replica 的自動處理,確保數據可靠。

新特性7.0.0 版本

2019年4月10日發佈,重要特性:

  • 集群連接變化:TransportClient被廢棄 以至於,es7的java代碼,只能使用restclient。然後,個人綜合了一下,對於java編程,建議採用 High-level-rest-client 的方式操作ES集群
  • ES程式包預設打包jdk: 以至於7.x版本的程式包大小突然邊300MB+ 對比6.x發現,包大了200MB+, 正是JDK的大小
  • Lucene9.0
  • 重大改進-正式廢除單個索引下多Type的支持 es6時,官方就提到了es7會刪除type,並且es6時已經規定每一個index只能有一個type。在es7中使用預設的_doc作為type,官方說在8.x版本會徹底移除type。 api請求方式也發送變化,如獲得某索引的某ID的文檔:GET index/_doc/id其中index和id為具體的值

  • 7.1開始,Security功能免費使用

  • ECK-ElasticSearch Operator on Kubernetes
  • 引入了真正的記憶體斷路器,它可以更精準地檢測出無法處理的請求,並防止它們使單個節點不穩定
  • Zen2 是 Elasticsearch 的全新集群協調層,提高了可靠性、性能和用戶體驗,變得更快、更安全,並更易於使用
  • 新功能
    • New Cluster coordination
    • Feature - Complete High Level REST Client
    • Script Score Query
  • 性能優化
    • Weak-AND演算法提高查詢性能
    • 預設的Primary Shared數從5改為1,避免Over Sharding
    • 更快的前 k 個查詢
    • 間隔查詢(Intervals queries) 某些搜索用例(例如,法律和專利搜索)引入了查找單詞或短語彼此相距一定距離的記錄的需要。 Elasticsearch 7.0中的間隔查詢引入了一種構建此類查詢的全新方式,與之前的方法(跨度查詢span queries)相比,使用和定義更加簡單。 與跨度查詢相比,間隔查詢對邊緣情況的適應性更強。

總結

通過各個版本的迭代升級會發現,Elasticsearch 的產品的重大改善體驗,瞭解了版本間的不同,會讓你認知提高一個檔次,網上文章一大片,有的時候你發現,文章作者操作的時候成功的,到了你這裡就失敗了,百思不得其中的奧秘,或者我的一個方法或者對象怎麼就沒了,誰對誰錯,沒有定論,懂得事情的本質才是重點,回到問題的根源,才是解決問題的根本。

希望本篇的介紹可以讓你在學習 Elasticsearch 的路上更順暢,等你學完了Elasticsearch最新版本後,回過頭來再看這篇文章的時候,感覺是不是一樣的,我覺得學習一門技術的時候,心裡要對全部輪廓有個認知,不至於鑽進一個空間,看不到整個森林的尷尬無效的境地。 就像本文標題所說,先看整個森林,再去鑽研一課樹木,才會更懂。

END

如有收穫,請幫忙轉發,後續會有更好文章貢獻,您的鼓勵是作者最大的動力!

歡迎關註我的公眾號:架構師的修煉,獲得獨家整理的學習資源和日常乾貨推送。

參考文章:


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 源碼git地址:https://github.com/mybatis/mybatis-3 目標結構: mybatis是數據持久化解決方案將用戶從JDBC訪問中解放出來,用戶只需要定義需要操作的SQL語句,無需關註底層JDBC操作,就可以以面向對象的方式來進行持久層操作,底層資料庫的連接獲取,資料庫訪 ...
  • 一、Controller註解 二、RestController註解 三、RequestMapping註解 四、PathVariable註解 五、RequestParam註解 六、文件上傳 ...
  • 安裝composer -vvv的參數是表示展示安裝進度,測試時使用其他參數安裝失敗,一直卡著不動curl -vvv https://getcomposer.org/installer | phpmv composer.phar /usr/local/bin/composer 先安裝下git,才能cl ...
  • 一.面向對象的概念 面向對象編程(Object-oriented Programming,簡稱 OOP),是一種封裝代碼的方法 為什麼要有面向對象:是為了更好地模擬現實世界的事物,並把描述特征的數據和代碼塊(函數)封裝到一起 比如說,將亂七八糟的數據扔進列表中,這就是一種簡單的封裝,是數據層面的封裝 ...
  • 《菜鳥程式員成長之路:從技術小白到阿裡巴巴Java工程師》 國慶節快樂!一年一度長度排第二的假期終於來了。 難得有十一長假,作者也想要休息幾天啦。 不管你是選擇出門玩,還是在公司加班,在學校複習,都希望你過好這個長假。 沒有出去玩的也不用羡慕別人,利用這段時間充充電,不比去旅游看人頭要好的多嗎? 最 ...
  • 在Mybatis中,我們通常會像下邊這樣用: 返回一個結果 返回多個結果(其實這個和上邊一樣,只不過是查詢條件的控制而已) 我們只要將上邊的 改為 ,這會有生成下邊這樣 上這結果就是說,以User類的屬性名為key,屬性值為value。 當然,也可以查出來多條記錄,將這個Map放進List中 但是有 ...
  • Django 一、web框架 框架,即時framework,特指為解決一個開放性問題而設計的具有一定約束性的支撐結構,使用框架可以幫你快速開發特定的系統,簡單的說,就是用別人搭建好的舞臺來表演你的才藝。 對於所有的web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket ...
  • # 今日內容: 1. Servlet 2. HTTP協議 3. Request ## Servlet: 1. 概念 2. 步驟 3. 執行原理 4. 生命周期 5. Servlet3.0 註解配置 6. Servlet的體繫結構 Servlet -- 介面 | GenericServlet -- 抽 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...