Elasticsearch數據庫 | Elasticsearch-7.5.0應用基礎實戰

Elasticsearch 是一個可用於分佈式以及符合RESTful 風格的搜索和數據分析引擎。—— Elastic Stack 官網程序員

0FNnW8.png

關於Elasticsearch的「愛恨情仇"

  • 或許提起搜索服務器,大部分人都會想起Solr 和 Elasticsearch 甚至以及國產大廠自研等。隨着人工智能和大數據時代的到來,甚至還帶動了一系列的機器引擎的出現,譬如Splunk等。其中Solr 和 Elasticsearch是基於Lucene的搜索服務器。通常Solr是面向的是全文檢索引擎,而Elasticsearch是用於全文搜索、結構化搜索、分析。而對於Splunk機器數據的引擎,可收集、索引和利用全部應用程序、服務器和設備生成的快速移動型計算機數據。但是不論技術如何發展和更替,做爲一位程序員,咱們要作的不就是即時地維護技術儲備知識庫和實時更新本身的技術緩存,以及實現可擴展性的技術深度樹的增加。
  • 關於Elasticsearch,記得當時接觸到Elasticsearch的名詞的時候,那是2017年的夏天。當時的工做任務是實現一個關於知識庫的系統。當時小夥伴們技術選型主要仍是偏向Solr+Lucene來的作,有的甚至說直接使用Mysql數據庫的自帶函數來作。我是在無心中,在網上查詢搜索引擎的技術實戰的時候,看見了一篇對於Elasticsearch應用實戰的應用報告分析,纔去查詢了Elasticsearch的相關資料。不過,當時網上大部分對於搜索功能的Demo,大部分仍是關於Solr 的比較多。也許在那個時候,大部分的技術概念基本都是偏向於技術長期穩定和文檔資料全,使用程度相對較重的因素。可是,我我的卻留了一個心眼,本身嘗試去實戰Elasticsearch。
  • 第一次,動手實操仍是在Windows本機上安裝(22G內存)的。其中,安裝過程相比利用Tomcat+Solr來講,相對較複雜,並且對於本機的內存和功耗佔用較重。個開發基本只能說是能運行起來,可穩定性方面,就有點顯得望而卻步的感受。第二次,動手實戰是在本機搭建了一個虛擬機去實戰(2核8G),可在網絡通訊方面,當時選的是網絡橋接方式,也讓我對此以爲非常麻煩。第三次,是本身擁有了本身的阿里雲服務器,在上面按照傳統部署方式(相對於Docker部署來講),可無奈我的服務器內存較低(2核4G),修改配置JVM等沒法啓動成功,老是拋出GC日誌什麼的問題,主要仍是當時囊中羞澀的問題,甚至一旦運行Elasticsearch服務,其它的應用便沒法啓動和 運行。後來,接觸了Docker,因而,有了第四次的Elasticsearch實戰(單節點部署)。第四次,升級了阿里雲服務器的配置(2核8G),最終實現了額本身的第一個Elasticsearch服務。甚至,爲在後來工做中,動手實戰Elasticsearch分佈式集羣服務奠基基礎。

基本概述

  • 彷佛從某種意義來講Elasticsearch和MongoDB/Redis/Memcache同樣,是一種Nosql數據庫。是一個接近實時的搜索平臺,從索引這個文檔到這個文檔可以被搜索到只有一個輕微的延遲,企業應用定位:採用Restful API標準的可擴展和高可用的實時數據分析的全文搜索工具。不過在當時,Elastic Stack只有Elasticsearch、Kibana 和 Logstash用例,尚未包含Beats等。並且在應用方面,除了來看成ELK分佈式日誌系統搭建外,更多的是Elasticsearch +Elasticsearch-Head插件在知足業務場景方面的需求,可以安全可靠地獲取任何來源、任何格式的數據,而後實時地對數據進行搜索、分析和可視化等。
  • 基本特色:
  1. 可拓展:支持一主多從且擴容簡易,只要cluster.name一致且在同一個網絡中就能自動加入當前集羣;自己就是開源軟件,也支持不少開源的第三方插件
  2. 高可用:在一個集羣的多個節點中進行分佈式存儲,索引支持shards和複製,即便部分節點down掉,也能自動進行數據恢復和主從切換
  3. 採用RestfulAPI標準:經過http接口使用JSON格式進行操做數據
  4. 數據存儲的最小單位是文檔,本質上是一個JSON 文本

Elasticsearch關鍵詞

  • Node : 節點,單個裝有Elasticsearch服務而且提供故障轉移和實現可擴展的服務器
  • Cluster : 集羣,一個Elasticsearch-Cluster集羣是有一個Node或者至少2個Node組成的服務器,共同服務和分享Node節點數據的具備負載均衡的功能,甚至基於Zookeeper集羣的高可用服務等。
  • Index : 索引,具備相同或者類似特徵的Document文檔對象的集合
  • Type : 類型,相同Filed字段的文檔定義一個Type類型,一個Type能夠建立多個Index索引
  • Document :文檔,一個Document文檔能夠被用做Index索引的基礎信息單元
  • Field : 字段列,Field是Elasticsearch的最小單元,相擋當於數據的某一列
  • Term:由不少的字節組成。通常將Text類型的Field Value分詞以後的每一個最小單元叫作Term。
  • Shards :分片,Elasticsearch把Index索引分紅若干份,每個部分就是一個Shard分片
  • Replicas : 複製,每一個Inex索引裏每一個Shard分片的拷貝或者說是數據備份

Elasticsearch 結構與其它數據庫對比

  • 數據模型上的對比
databaseType databaseName databaseUnit databaseTable databaseRow databaseColumn
sql Mysql 數據庫-database 表-table 數據行-row 數據列-column
Nosql Elasticsearch 索引-index 類型-type 文檔-document 字段列-field
Nosql Hbase 命名空間-namespace 域/切片-region 數據行-row 數據列-column
  • 使用場景上的對比
databaseType databaseName databaseStorage databaseTransaction databaseConsistency databaseScalability secondaryIndex fullText
sql Mysql 行數數據存儲,適用OLTP業務 Innodb引擎支持 strong consistency-強一致性 單機可拓展粒度不高 支持 支持
Nosql Elasticsearch 索引存儲-任何檢索業務 不支持 支持可配置 水平拓展 支持 支持
Nosql Hbase 列式數據存儲,介於OLTP和OLAP模型之間 不支持 strong consistency-強一致性 和 time consistency-時序一致性 水平拓展 不支持 不支持

ps[⚠️注意事項]:sql

  1. OLTP: OnLine Transaction Processing聯機事務處理過程(OLTP),主要對應傳統的關係型數據庫,基本操做增刪改查,強調事務一致性,好比銀行系統、電商系統。
  2. OLAP:Online Analytical processing 即聯機分析處理過程(OLAP),主要對應倉儲型數據庫,基本讀取數據,作複雜數據分析,側重技術決策支持,提供直觀簡單的結果。

Elasticsearch原理剖析

0kfaDA.png

  • Gateway[索引數據的存儲格式]: Elasticsearch用來存儲數據index索引的文件系統,支持多種類型[ Local FileSystem-本地文件系統 Shared FileSystem-分佈式文件系統 Hadoop HDFS, Amazon S3 ]
  • Distributed Lucene Directory[底層 API框架]:Elasticsearch底層依賴Lucene框架,每個Elasticsearch節點服務都會有對應的Lucene框架
  • Major Module[加工處理方式] : 在Lucene上層,Index Module(建立Index模塊)、Search Module(搜索模塊)、Mapping(映射)、River(運行在Elasticsearch集羣內部的一個插件,主要用來從外部獲取獲取異構數據,而後在Elasticsearch裏建立索引
  • Discovery[Elasticsearch發現機制]:Discovery 是Elasticsearch自動發現節點的機制;Zen是用來實現節點自動發現、Master節點選舉用;Elasticsearch是基於P2P的系統,它首先經過廣播的機制尋找存在的節點,而後再經過多播協議來進行節點間的通訊,同時也支持點對點的交互
  • Scripting[Elasticsearch腳本執行功能]:Scripting 是腳本執行功能,有這個功能能很方便對查詢出來的數據進行加工處理
  • Plugins[Elasticsearch插件機制]:Elasticsearch整合第三方的插件的主要實現拓展和整合等,譬如elasticsearch-ik分詞插件、elasticsearch-sql sql插件。
  • Transport[Elasticsearch傳輸機制]: 傳輸模塊支持 Thrift, Memcached , HTTP,默認使用 HTTP 傳輸
  • JMX[Elasticsearch基於Java的管理框架]:Java 的管理框架,用來管理 Elasticsearch 應用
  • RSTful Style API [Elasticsearch的API支持模式]:基於Netty實現的網絡通訊,經過RSTful API 和 Elasticsearch 集羣進行交互

數據結構

0kfG9O.png

版權聲明:本文爲博主原創文章,遵循相關版權協議,如若轉載或者分享請附上原文出處連接和連接來源。數據庫

相關文章
相關標籤/搜索