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

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

關於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的最小單元,相擋當於數據的某一列
  • 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-時序一致性 水平拓展 不支持 不支持

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

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