国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【黃啊碼】什么是ElasticSearch?它會替代MySQL成為主流嗎?如何優(yōu)化?TP5如何接入ElasticSearch?

這篇具有很好參考價值的文章主要介紹了【黃啊碼】什么是ElasticSearch?它會替代MySQL成為主流嗎?如何優(yōu)化?TP5如何接入ElasticSearch?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

什么是ElasticSearch?

ES和MySQL使用場景的比較

Elasticsearch和MySQL具體應用場景:

如何優(yōu)化:

索引效率優(yōu)化

批量提交

優(yōu)化硬件、

減少副本數(shù)量

查詢效率優(yōu)化

路由

不帶 routing 查詢

Filter VS Query

大翻頁

JVM 設置

TP5如何接入ElasticSearch?


什么是ElasticSearch?

Elasticsearch 是一個分布式、高擴展、高實時的搜索與數(shù)據(jù)分析
引擎。它能很方便的使大量數(shù)據(jù)具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸縮性,能使數(shù)據(jù)在生產(chǎn)環(huán)境變得更有價值。

Elasticsearch 的實現(xiàn)原理主要分為以下幾個步驟,首先用戶將數(shù)據(jù)提交到Elasticsearch 數(shù)據(jù)庫中,再通過分詞控制器去將對應的語句分詞,將其權重和分詞結果一并存入數(shù)據(jù),當用戶搜索數(shù)據(jù)時候,再根據(jù)權重將結果排名,打分,再將返回結果呈現(xiàn)給用戶

簡而言之:Elasticsearch 則是一款分布式搜索和分析引擎。它可以幫助你快速搜索和分析海量數(shù)據(jù),并提供了豐富的查詢語言和可視化工具。Elasticsearch 支持 ACID 事務,但這并不是它的主要功能。

然而,這并不意味著 Elasticsearch 就不能用于存儲數(shù)據(jù)。實際上,Elasticsearch 可以作為一種 NoSQL 數(shù)據(jù)庫來使用,允許你將非結構化數(shù)據(jù)存儲在其中。但是,Elasticsearch 沒有 MySQL 那樣強大的數(shù)據(jù)模型和關系管理功能。因此,如果你需要一個用于存儲和管理復雜數(shù)據(jù)模型的工具,MySQL 可能更加適合。

elasticsearch mysql,PHP從入門到拆門,elasticsearch,搜索引擎,數(shù)據(jù)庫,php

ES和MySQL使用場景的比較

1、MySQL更擅長的是事務類型的操作,可以確保數(shù)據(jù)的安全和一致性;如果是有事務要求,如商品的下單支付等業(yè)務操作,無疑使用MySQL。

2、ES更擅長的是海量數(shù)據(jù)的搜索,分析和計算;如果是復雜搜索,無疑可以使用Elasticsearch。

3、兩者是一個互補而不是替代的關系。

Elasticsearch和MySQL具體應用場景:

MySQL 可以用于存儲和管理結構化數(shù)據(jù),而 Elasticsearch 可以用于快速搜索和分析這些數(shù)據(jù)。在這種情況下,你可以將數(shù)據(jù)存儲在 MySQL 中,并使用 Elasticsearch 對數(shù)據(jù)進行搜索和分析。這樣,你就可以充分利用 MySQL 和 Elasticsearch 的優(yōu)勢,同時避免它們的劣勢。

MySQL 和 Elasticsearch 聯(lián)合使用,以提供更全面的功能。例如,可以使用 MySQL 存儲和管理結構化數(shù)據(jù),并使用 Elasticsearch 對數(shù)據(jù)進行搜索和分析。還可以使用 MySQL 的觸發(fā)器和存儲過程,在數(shù)據(jù)發(fā)生變化時自動將數(shù)據(jù)同步到 Elasticsearch 中。這樣,就可以在 MySQL 和 Elasticsearch 之間建立聯(lián)系,實現(xiàn)數(shù)據(jù)的雙向同步。

如何優(yōu)化:

索引效率優(yōu)化

索引優(yōu)化主要是在 Elasticsearch 插入層面優(yōu)化,如果瓶頸不在這塊,而是在產(chǎn)生數(shù)據(jù)部分,比如 DB 或者 Hadoop 上,那么優(yōu)化方向就需要改變下。同時,Elasticsearch 本身索引速度其實還是蠻快的,具體數(shù)據(jù),我們可以參考官方的 benchmark 數(shù)據(jù)。

批量提交

當有大量數(shù)據(jù)提交的時候,建議采用批量提交。

比如在做 ELK 過程中 ,Logstash indexer 提交數(shù)據(jù)到 Elasticsearch 中 ,batch size 就可以作為一個優(yōu)化功能點。但是優(yōu)化 size 大小需要根據(jù)文檔大小和服務器性能而定。

像 Logstash 中提交文檔大小超過 20MB ,Logstash 會請一個批量請求切分為多個批量請求。

如果在提交過程中,遇到 EsRejectedExecutionException 異常的話,則說明集群的索引性能已經(jīng)達到極限了。這種情況,要么提高服務器集群的資源,要么根據(jù)業(yè)務規(guī)則,減少數(shù)據(jù)收集速度,比如只收集 Warn、Error 級別以上的日志。

優(yōu)化硬件、

優(yōu)化硬件設備一直是最快速有效的手段。

在經(jīng)濟壓力能承受的范圍下, 盡量使用固態(tài)硬盤 SSD。SSD 相對于機器硬盤,無論隨機寫還是順序寫,都較大的提升。
磁盤備份采用 RAID0。因為 Elasticsearch 在自身層面通過副本,已經(jīng)提供了備份的功能,所以不需要利用磁盤的備份功能,同時如果使用磁盤備份功能的話,對寫入速度有較大的影響。
增加 Refresh 時間間隔
為了提高索引性能,Elasticsearch 在寫入數(shù)據(jù)時候,采用延遲寫入的策略,即數(shù)據(jù)先寫到內存中,當超過默認 1 秒 (index.refresh_interval)會進行一次寫入操作,就是將內存中 segment 數(shù)據(jù)刷新到操作系統(tǒng)中,此時我們才能將數(shù)據(jù)搜索出來,所以這就是為什么 Elasticsearch 提供的是近實時搜索功能,而不是實時搜索功能。

當然像我們的內部系統(tǒng)對數(shù)據(jù)延遲要求不高的話,我們可以通過延長 refresh 時間間隔,可以有效的減少 segment 合并壓力,提供索引速度。在做全鏈路跟蹤的過程中,我們就將 index.refresh_interval 設置為 30s,減少 refresh 次數(shù)。

同時,在進行全量索引時,可以將 refresh 次數(shù)臨時關閉,即 index.refresh_interval 設置為 -1,數(shù)據(jù)導入成功后再打開到正常模式,比如 30s。

減少副本數(shù)量

Elasticsearch 默認副本數(shù)量為 3 個,雖然這樣會提高集群的可用性,增加搜索的并發(fā)數(shù),但是同時也會影響寫入索引的效率。

在索引過程中,需要把更新的文檔發(fā)到副本節(jié)點上,等副本節(jié)點生效后在進行返回結束。使用 Elasticsearch 做業(yè)務搜索的時候,建議副本數(shù)目還是設置為 3 個,但是像內部 ELK 日志系統(tǒng)、分布式跟蹤系統(tǒng)中,完全可以將副本數(shù)目設置為 1 個。

查詢效率優(yōu)化

路由

當我們查詢文檔的時候,Elasticsearch 如何知道一個文檔應該存放到哪個分片中呢?它其實是通過下面這個公式來計算出來

shard = hash(routing) % number_of_primary_shards

routing 默認值是文檔的 id,也可以采用自定義值,比如用戶 id。

不帶 routing 查詢

在查詢的時候因為不知道要查詢的數(shù)據(jù)具體在哪個分片上,所以整個過程分為 2 個步驟

分發(fā):請求到達協(xié)調節(jié)點后,協(xié)調節(jié)點將查詢請求分發(fā)到每個分片上。
聚合: 協(xié)調節(jié)點搜集到每個分片上查詢結果,在將查詢的結果進行排序,之后給用戶返回結果。
帶 routing 查詢
查詢的時候,可以直接根據(jù) routing 信息定位到某個分配查詢,不需要查詢所有的分配,經(jīng)過協(xié)調節(jié)點排序。

向上面自定義的用戶查詢,如果 routing 設置為 userid 的話,就可以直接查詢出數(shù)據(jù)來,效率提升很多。

Filter VS Query

Ebay 曾經(jīng)分享過他們使用 Elasticsearch 的經(jīng)驗中說到:

Use filter context instead of query context if possible.
盡可能使用過濾器上下文(Filter)替代查詢上下文(Query

Query:此文檔與此查詢子句的匹配程度如何?
Filter:此文檔和查詢子句匹配嗎?
Elasticsearch 針對 Filter 查詢只需要回答「是」或者「否」,不需要像 Query 查詢一下計算相關性分數(shù),同時 Filter 結果可以緩存。

大翻頁

在使用 Elasticsearch 過程中,應盡量避免大翻頁的出現(xiàn)。

正常翻頁查詢都是從 From 開始 Size 條數(shù)據(jù),這樣就需要在每個分片中查詢打分排名在前面的 From + Size 條數(shù)據(jù)。協(xié)同節(jié)點收集每個分配的前 From + Size 條數(shù)據(jù)。協(xié)同節(jié)點一共會受到 N * ( From + Size )條數(shù)據(jù),然后進行排序,再將其中 From 到 From + Size 條數(shù)據(jù)返回出去。

如果 From 或者 Size 很大的話,導致參加排序的數(shù)量會同步擴大很多,最終會導致 CPU 資源消耗增大。

可以通過使用 Elasticsearch scroll 和 scroll-scan 高效滾動的方式來解決這樣的問題。具體寫法,可以參考 ?Elasticsearch: 權威指南 - scroll 查詢

JVM 設置

32G 現(xiàn)象
Elasticsearch 默認安裝后設置的堆內存是 1 GB。 對于任何一個業(yè)務部署來說, 這個設置都太小了。

比如機器有 64G 內存,那么我們是不是設置的越大越好呢?

其實不是的。

主要 Elasticsearch 底層使用 Lucene。Lucene 被設計為可以利用操作系統(tǒng)底層機制來緩存內存數(shù)據(jù)結構。 Lucene 的段是分別存儲到單個文件中的。因為段是不可變的,這些文件也都不會變化,這是對緩存友好的,同時操作系統(tǒng)也會把這些段文件緩存起來,以便更快的訪問。

如果你把所有的內存都分配給 Elasticsearch 的堆內存,那將不會有剩余的內存交給 Lucene。 這將嚴重地影響全文檢索的性能。

標準的建議是把 50% 的可用內存作為 Elasticsearch 的堆內存,保留剩下的 50%。當然它也不會被浪費,Lucene 會很樂意利用起余下的內存。

同時了解過 ES 的同學都聽過過「不要超過 32G」的說法吧。

其實主要原因是 :JVM 在內存小于 32 GB 的時候會采用一個內存對象指針壓縮技術。

在 Java 中,所有的對象都分配在堆上,并通過一個指針進行引用。 普通對象指針(OOP)指向這些對象,通常為 CPU 字長 的大?。?2 位或 64 位,取決于你的處理器。指針引用的就是這個 OOP 值的字節(jié)位置。

對于 32 位的系統(tǒng),意味著堆內存大小最大為 4 GB。對于 64 位的系統(tǒng), 可以使用更大的內存,但是 64 位的指針意味著更大的浪費,因為你的指針本身大了。更糟糕的是, 更大的指針在主內存和各級緩存(例如 LLC,L1 等)之間移動數(shù)據(jù)的時候,會占用更多的帶寬.

所以最終我們都會采用 31 G 設置

-Xms 31g
-Xmx 31g


假設你有個機器有 128 GB 的內存,你可以創(chuàng)建兩個節(jié)點,每個節(jié)點內存分配不超過 32 GB。 也就是說不超過 64 GB 內存給 ES 的堆內存,剩下的超過 64 GB 的內存給 Lucene

TP5如何接入ElasticSearch?

安裝環(huán)境:window安裝為列,Elasticsearch版本Elasticsearch7.14.1

官方下載地址?Download Elasticsearch | Elastic

1、下載后解壓安裝包

2、打開config->修改elasticsearch.yml

elasticsearch mysql,PHP從入門到拆門,elasticsearch,搜索引擎,數(shù)據(jù)庫,php

3、修改配置elasticsearch.yml允許外部訪問

elasticsearch mysql,PHP從入門到拆門,elasticsearch,搜索引擎,數(shù)據(jù)庫,php

http.cors.enabled: true 
http.cors.allow-origin: "*" 
http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE 
http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length, X-User"

4、運行es雙擊以下文件即可

elasticsearch mysql,PHP從入門到拆門,elasticsearch,搜索引擎,數(shù)據(jù)庫,php

elasticsearch mysql,PHP從入門到拆門,elasticsearch,搜索引擎,數(shù)據(jù)庫,php
?

5 、使用head可視化插件,解壓直接雙擊即可,點擊連接可以查看是否連接成功

elasticsearch mysql,PHP從入門到拆門,elasticsearch,搜索引擎,數(shù)據(jù)庫,php

看到以下頁面恭喜你安裝成功了

elasticsearch mysql,PHP從入門到拆門,elasticsearch,搜索引擎,數(shù)據(jù)庫,php

6、tp5安裝es擴展使用即可

composer require elasticsearch/elasticsearch

<?php
namespace app\index\controller;

use  think\Db;
use Elasticsearch\ClientBuilder;
class Es
{
    private  $client;
    public function __construct()
    {
        $this->client = ClientBuilder::create()->setHosts(['localhost:9200'])->build();
        dump($this->client);
    }
}
 

看到以下界面說明你成功完成了es和php配置es的安裝完整流程

elasticsearch mysql,PHP從入門到拆門,elasticsearch,搜索引擎,數(shù)據(jù)庫,php

好了,今天的干貨有點多,有問題的留個言,別忘了一鍵三連,下次我們還會再見!

我是黃啊碼,碼字的碼,退。。。退。。。退。。。朝!?文章來源地址http://www.zghlxwxcb.cn/news/detail-792050.html

到了這里,關于【黃啊碼】什么是ElasticSearch?它會替代MySQL成為主流嗎?如何優(yōu)化?TP5如何接入ElasticSearch?的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 了解基于Elasticsearch 的站內搜索,及其替代方案

    了解基于Elasticsearch 的站內搜索,及其替代方案

    對于一家公司而言,數(shù)據(jù)量越來越多,如果快速去查找這些信息是一個很難的問題,在計算機領域有一個專門的領域IR(Information?Retrival)研究如何獲取信息,做信息檢索。在國內的如百度這樣的搜索引擎也屬于這個領域,要自己實現(xiàn)一個搜索引擎是非常難的,不過通過Elas

    2024年02月03日
    瀏覽(17)
  • Elasticsearch RestHighLevelClient 已標記為被棄用 它的替代方案 Elasticsearch Java API Client 的基礎教程及遷移方案

    在Elasticsearch7.15版本之后,Elasticsearch官方將它的高級客戶端 RestHighLevelClient 標記為棄用狀態(tài)。同時推出了全新的Java API客戶端 Elasticsearch Java API Client ,該客戶端也將在Elasticsearch8.0及以后版本中成為官方推薦使用的客戶端。 Elasticsearch Java API Client 支持除 Vector tile search API 和

    2024年01月16日
    瀏覽(20)
  • 黑客是什么?想成為黑客需要學習什么?

    黑客是什么?想成為黑客需要學習什么?

    ????????在《黑客辭典》里有不少關于“黑客”的定義, 大多和“精于技術”或“樂于解決問題并超越極限”之類的形容相關。然而,若你想知道如何成為一名黑客,只要牢記兩點即可。 ????????這是一個社區(qū)和一種共享文化,可追溯到那群數(shù)十年前使用最初的共享小

    2024年02月11日
    瀏覽(17)
  • 針對MySQL的Navicat替代工具Jookdb

    針對MySQL的Navicat替代工具Jookdb

    navicat not for free.所以踏上了尋找替代工具 試用了三個吧,個人會覺得jookdb比較適合我這種小白使用 逐個說一下吧 NAVICAT Navicat 中國 | 支持 MySQL、Redis、MariaDB、MongoDB、SQL Server、SQLite、Oracle 和 PostgreSQL 的數(shù)據(jù)庫管理 功能齊全,但是要氪。 包括畫er圖,但是我自己也操作使用過

    2024年02月10日
    瀏覽(18)
  • 替代MySQL半同步復制,Meta技術團隊推出MySQL Raft共識引擎

    替代MySQL半同步復制,Meta技術團隊推出MySQL Raft共識引擎

    作者:Anirban Rahut、Abhinav Sharma、Yichen Shen、Ahsanul Haque 原文鏈接:https://engineering.fb.com/2023/05/16/data-infrastructure/mysql-raft-meta/ 譯者:ChatGPT 責編:張紅月 MySQL Raft是MySQL數(shù)據(jù)庫中一種基于Raft協(xié)議的分布式一致性復制機制。近日,Meta技術團隊分享了他們基于Raft協(xié)議在數(shù)據(jù)庫基礎設施

    2024年02月05日
    瀏覽(16)
  • 絕非替代,全方位解讀MySQL 與MongoDB的區(qū)別

    絕非替代,全方位解讀MySQL 與MongoDB的區(qū)別

    目錄 一、什么是MySQL 二、什么是MongoDB 三、MySQL 與MongoDB的區(qū)別 MySQL是一種開源的關系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS),廣泛用于Web應用程序的后端數(shù)據(jù)存儲和管理。它是一種結構化查詢語言(SQL)數(shù)據(jù)庫,使用標準SQL語言進行數(shù)據(jù)管理。MySQL具有高性能、可靠性和擴展性,支持多

    2024年02月08日
    瀏覽(14)
  • 為什么Spring和IDEA不推薦使用@Autowired注解,有哪些替代方案?

    為什么Spring和IDEA不推薦使用@Autowired注解,有哪些替代方案?

    在使用Spring框架和JetBrains IDEA集成開發(fā)環(huán)境(IDE)進行Java開發(fā)時,你可能經(jīng)常會遇到@Autowired注解。@Autowired是Spring框架中用于實現(xiàn)依賴注入的核心注解之一。然而,近年來,Spring和IDEA都不再推薦使用@Autowired注解,并提出了更好的替代方案。本文將詳細分析為什么Spring和IDEA不

    2024年02月07日
    瀏覽(23)
  • DevOps和SRE還沒搞清楚,平臺工程又出現(xiàn)了,它會取代DevOps嗎?

    DevOps和SRE還沒搞清楚,平臺工程又出現(xiàn)了,它會取代DevOps嗎?

    DevOps、SRE和平臺工程的概念在不同時期出現(xiàn),并由不同的個人和組織開發(fā)。 DevOps作為一個概念是由Patrick Debois和Andrew Shafer在 2009年 的敏捷會議上提出的。他們試圖通過促進協(xié)作文化和在整個軟件開發(fā)生命周期中共享責任來彌合軟件開發(fā)和操作之間的差距。 SRE,即站點可靠性

    2023年04月22日
    瀏覽(28)
  • Vue3.0里為什么要用 Proxy API 替代 defineProperty API ?

    Vue3.0里為什么要用 Proxy API 替代 defineProperty API ?

    定義: Object.defineProperty() ?方法會直接在一個對象上定義一個新屬性,或者修改一個對象的現(xiàn)有屬性,并返回此對象 為什么能實現(xiàn)響應式 通過 defineProperty ?兩個屬性, get 及 set get 屬性的 getter 函數(shù),當訪問該屬性時,會調用此函數(shù)。執(zhí)行時不傳入任何參數(shù),但是會傳入 th

    2024年03月09日
    瀏覽(25)
  • 成為wifi驅動工程師應該從什么開始學習

    寫了這么多文章,都很零散,這次收集整理了下我們應該學習的大概框架和思路,希望大家喜歡,如果有其他的想要學習的或者思考的想法可以在評論區(qū)發(fā)言哦,我會盡量出一些實踐的小原理的文章分享出來,謝謝! 作為初學者想成為驅動工程師,首先需要打下堅實的計算機

    2024年02月15日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包