国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

正保建設(shè)工程教育網(wǎng)站線(xiàn)上推廣方式有哪些

正保建設(shè)工程教育網(wǎng)站,線(xiàn)上推廣方式有哪些,網(wǎng)站可信度建設(shè),深圳市衛(wèi)健委最新疫情文章目錄 1.簡(jiǎn)單介紹下ES?2.簡(jiǎn)單介紹當(dāng)前可以下載的ES穩(wěn)定版本?3.安裝ES前需要安裝哪種軟件?4.請(qǐng)介紹啟動(dòng)ES服務(wù)的步驟?5.ES中的倒排索引是什么?6. ES是如何實(shí)現(xiàn)master選舉的?7. 如何解決ES集群的腦裂問(wèn)題8…

文章目錄

      • 1.簡(jiǎn)單介紹下ES?
      • 2.簡(jiǎn)單介紹當(dāng)前可以下載的ES穩(wěn)定版本?
      • 3.安裝ES前需要安裝哪種軟件?
      • 4.請(qǐng)介紹啟動(dòng)ES服務(wù)的步驟?
      • 5.ES中的倒排索引是什么?
      • 6. ES是如何實(shí)現(xiàn)master選舉的?
      • 7. 如何解決ES集群的腦裂問(wèn)題
      • 8. 詳細(xì)描述一下ES索引文檔的過(guò)程?
      • 9. 詳細(xì)描述一下ES更新和刪除文檔的過(guò)程?
      • 10. 詳細(xì)描述一下ES搜索的過(guò)程?
      • 11.索引是什么?
      • 12.請(qǐng)解釋什么是分片(SHARDs)?
      • 13.什么是副本(REPLICA), 他的作用是什么?
      • 14.在ES集群中增加和創(chuàng)建索引的步驟是什么?
      • 15.ES支持哪些類(lèi)型的查詢(xún)?
      • 16.Elasticsearch在部署時(shí),對(duì)Linux的設(shè)置有哪些優(yōu)化方法
      • 17.什么是ElasticSearch中的編譯器?
      • 18.拼寫(xiě)糾錯(cuò)是如何實(shí)現(xiàn)的?
      • 19.ElasticSearch中的分析器是什么?
      • 20.是否了解字典樹(shù)?
      • 21. 在并發(fā)情況下,ES如果保證讀寫(xiě)一致?
      • 22. ES對(duì)于大數(shù)據(jù)量(上億量級(jí))的聚合如何實(shí)現(xiàn)?
      • 23. 對(duì)于GC方面,在使用ES時(shí)要注意什么?
      • 24. 說(shuō)說(shuō)你們公司ES的集群架構(gòu),索引數(shù)據(jù)大小,分片有多少,以及一些調(diào)優(yōu)手段?
      • 參考

1.簡(jiǎn)單介紹下ES?

ES是一種存儲(chǔ)和管理基于文檔和半結(jié)構(gòu)化數(shù)據(jù)的數(shù)據(jù)庫(kù)(搜索引擎)。它提供實(shí)時(shí)搜索(ES最近幾個(gè)版本才提供實(shí)時(shí)搜索,以前都是準(zhǔn)實(shí)時(shí))和分析結(jié)構(gòu)化、半結(jié)構(gòu)化文檔、數(shù)據(jù)和地理空間信息數(shù)據(jù)。

2.簡(jiǎn)單介紹當(dāng)前可以下載的ES穩(wěn)定版本?

最新的穩(wěn)定版本是8.11.3

3.安裝ES前需要安裝哪種軟件?

JDK 8或者 Java 1.8.0

4.請(qǐng)介紹啟動(dòng)ES服務(wù)的步驟?

A: 啟動(dòng)步驟如下

Windows下進(jìn)入ES文件夾的bin目錄下,點(diǎn)擊ElasticSearch.bat開(kāi)始運(yùn)行

打開(kāi)本地9200端口http://localhost:9200, 就可以使用ES了

5.ES中的倒排索引是什么?

傳統(tǒng)的檢索方式是通過(guò)文章,逐個(gè)遍歷找到對(duì)應(yīng)關(guān)鍵詞的位置。
倒排索引,是通過(guò)分詞策略,形成了詞和文章的映射關(guān)系表,也稱(chēng)倒排表,這種詞典 + 映射表即為倒排索引。

其中詞典中存儲(chǔ)詞元,倒排表中存儲(chǔ)該詞元在哪些文中出現(xiàn)的位置。
有了倒排索引,就能實(shí)現(xiàn) O(1) 時(shí)間復(fù)雜度的效率檢索文章了,極大的提高了檢索效率。

加分項(xiàng):
倒排索引的底層實(shí)現(xiàn)是基于:FST(Finite State Transducer)數(shù)據(jù)結(jié)構(gòu)。

Lucene 從 4+ 版本后開(kāi)始大量使用的數(shù)據(jù)結(jié)構(gòu)是 FST。FST 有兩個(gè)優(yōu)點(diǎn):
1)空間占用小。通過(guò)對(duì)詞典中單詞前綴和后綴的重復(fù)利用,壓縮了存儲(chǔ)空間;
2)查詢(xún)速度快。O(len(str)) 的查詢(xún)時(shí)間復(fù)雜度。

6. ES是如何實(shí)現(xiàn)master選舉的?

前置條件
1)只有是候選主節(jié)點(diǎn)(master:true)的節(jié)點(diǎn)才能成為主節(jié)點(diǎn)。
2)最小主節(jié)點(diǎn)數(shù)(min_master_nodes)的目的是防止腦裂。

Elasticsearch 的選主是 ZenDiscovery 模塊負(fù)責(zé)的,主要包含 Ping(節(jié)點(diǎn)之間通過(guò)這個(gè)RPC來(lái)發(fā)現(xiàn)彼此)和 Unicast(單播模塊包含一個(gè)主機(jī)列表以控制哪些節(jié)點(diǎn)需要 ping 通)這兩部分;
獲取主節(jié)點(diǎn)的核心入口為 findMaster,選擇主節(jié)點(diǎn)成功返回對(duì)應(yīng) Master,否則返回 null。

選舉流程大致描述如下
第一步:確認(rèn)候選主節(jié)點(diǎn)數(shù)達(dá)標(biāo),elasticsearch.yml 設(shè)置的值 discovery.zen.minimum_master_nodes;
第二步:對(duì)所有候選主節(jié)點(diǎn)根據(jù)nodeId字典排序,每次選舉每個(gè)節(jié)點(diǎn)都把自己所知道節(jié)點(diǎn)排一次序,然后選出第一個(gè)(第0位)節(jié)點(diǎn),暫且認(rèn)為它是master節(jié)點(diǎn)。
第三步:如果對(duì)某個(gè)節(jié)點(diǎn)的投票數(shù)達(dá)到一定的值(候選主節(jié)點(diǎn)數(shù)n/2+1)并且該節(jié)點(diǎn)自己也選舉自己,那這個(gè)節(jié)點(diǎn)就是master。否則重新選舉一直到滿(mǎn)足上述條件。

  • 補(bǔ)充:
    • 這里的 id 為 string 類(lèi)型。
    • master 節(jié)點(diǎn)的職責(zé)主要包括集群、節(jié)點(diǎn)和索引的管理,不負(fù)責(zé)文檔級(jí)別的管理;data 節(jié)點(diǎn)可以關(guān)閉 http 功能。

7. 如何解決ES集群的腦裂問(wèn)題

所謂集群腦裂,是指 Elasticsearch 集群中的節(jié)點(diǎn)(比如共 20 個(gè)),其中的 10 個(gè)選了一個(gè) master,另外 10 個(gè)選了另一個(gè) master 的情況。

當(dāng)集群 master 候選數(shù)量不小于 3 個(gè)時(shí),可以通過(guò)設(shè)置最少投票通過(guò)數(shù)量(discovery.zen.minimum_master_nodes)超過(guò)所有候選節(jié)點(diǎn)一半以上來(lái)解決腦裂問(wèn)題;
當(dāng)候選數(shù)量為兩個(gè)時(shí),只能修改為唯一的一個(gè) master 候選,其他作為 data 節(jié)點(diǎn),避免腦裂問(wèn)題。

8. 詳細(xì)描述一下ES索引文檔的過(guò)程?

這里的索引文檔應(yīng)該理解為文檔寫(xiě)入 ES,創(chuàng)建索引的過(guò)程。

第一步:客戶(hù)端向集群某節(jié)點(diǎn)寫(xiě)入數(shù)據(jù),發(fā)送請(qǐng)求。(如果沒(méi)有指定路由/協(xié)調(diào)節(jié)點(diǎn),請(qǐng)求的節(jié)點(diǎn)扮演協(xié)調(diào)節(jié)點(diǎn)的角色。)
第二步:協(xié)調(diào)節(jié)點(diǎn)接受到請(qǐng)求后,默認(rèn)使用文檔 ID 參與計(jì)算(也支持通過(guò) routing),得到該文檔屬于哪個(gè)分片。隨后請(qǐng)求會(huì)被轉(zhuǎn)到另外的節(jié)點(diǎn)。

bash# 路由算法:根據(jù)文檔id或路由計(jì)算目標(biāo)的分片id
shard = hash(document_id) % (num_of_primary_shards)

第三步:當(dāng)分片所在的節(jié)點(diǎn)接收到來(lái)自協(xié)調(diào)節(jié)點(diǎn)的請(qǐng)求后,會(huì)將請(qǐng)求寫(xiě)入到 Memory Buffer,然后定時(shí)(默認(rèn)是每隔 1 秒)寫(xiě)入到F ilesystem Cache,這個(gè)從 Momery Buffer 到 Filesystem Cache 的過(guò)程就叫做 refresh;
第四步:當(dāng)然在某些情況下,存在 Memery Buffer 和 Filesystem Cache 的數(shù)據(jù)可能會(huì)丟失,ES 是通過(guò) translog 的機(jī)制來(lái)保證數(shù)據(jù)的可靠性的。其實(shí)現(xiàn)機(jī)制是接收到請(qǐng)求后,同時(shí)也會(huì)寫(xiě)入到 translog 中,當(dāng) Filesystem cache 中的數(shù)據(jù)寫(xiě)入到磁盤(pán)中時(shí),才會(huì)清除掉,這個(gè)過(guò)程叫做 flush;
第五步:在 flush 過(guò)程中,內(nèi)存中的緩沖將被清除,內(nèi)容被寫(xiě)入一個(gè)新段,段的 fsync 將創(chuàng)建一個(gè)新的提交點(diǎn),并將內(nèi)容刷新到磁盤(pán),舊的 translog 將被刪除并開(kāi)始一個(gè)新的 translog。
第六步:flush 觸發(fā)的時(shí)機(jī)是定時(shí)觸發(fā)(默認(rèn) 30 分鐘)或者 translog 變得太大(默認(rèn)為 512 M)時(shí)。

  • 補(bǔ)充:關(guān)于 Lucene 的 Segement
    • Lucene 索引是由多個(gè)段組成,段本身是一個(gè)功能齊全的倒排索引。
    • 段是不可變的,允許 Lucene 將新的文檔增量地添加到索引中,而不用從頭重建索引。
    • 對(duì)于每一個(gè)搜索請(qǐng)求而言,索引中的所有段都會(huì)被搜索,并且每個(gè)段會(huì)消耗 CPU 的時(shí)鐘周、文件句柄和內(nèi)存。這意味著段的數(shù)量越多,搜索性能會(huì)越低。
    • 為了解決這個(gè)問(wèn)題,Elasticsearch 會(huì)合并小段到一個(gè)較大的段,提交新的合并段到磁盤(pán),并刪除那些舊的小段。(段合并)

9. 詳細(xì)描述一下ES更新和刪除文檔的過(guò)程?

刪除和更新也都是寫(xiě)操作,但是 Elasticsearch 中的文檔是不可變的,因此不能被刪除或者改動(dòng)以展示其變更。

磁盤(pán)上的每個(gè)段都有一個(gè)相應(yīng)的 .del 文件。當(dāng)刪除請(qǐng)求發(fā)送后,文檔并沒(méi)有真的被刪除,而是在 .del 文件中被標(biāo)記為刪除。該文檔依然能匹配查詢(xún),但是會(huì)在結(jié)果中被過(guò)濾掉。當(dāng)段合并時(shí),在 .del 文件中被標(biāo)記為刪除的文檔將不會(huì)被寫(xiě)入新段。

在新的文檔被創(chuàng)建時(shí),Elasticsearch 會(huì)為該文檔指定一個(gè)版本號(hào),當(dāng)執(zhí)行更新時(shí),舊版本的文檔在 .del 文件中被標(biāo)記為刪除,新版本的文檔被索引到一個(gè)新段。舊版本的文檔依然能匹配查詢(xún),但是會(huì)在結(jié)果中被過(guò)濾掉。

10. 詳細(xì)描述一下ES搜索的過(guò)程?

搜索被執(zhí)行成一個(gè)兩階段過(guò)程,即 Query Then Fetch;
Query階段:
查詢(xún)會(huì)廣播到索引中每一個(gè)分片拷貝(主分片或者副本分片)。每個(gè)分片在本地執(zhí)行搜索并構(gòu)建一個(gè)匹配文檔的大小為 from + size 的優(yōu)先隊(duì)列。PS:在搜索的時(shí)候是會(huì)查詢(xún)Filesystem Cache的,但是有部分?jǐn)?shù)據(jù)還在Memory Buffer,所以搜索是近實(shí)時(shí)的。
每個(gè)分片返回各自?xún)?yōu)先隊(duì)列中 所有文檔的 ID 和排序值 給協(xié)調(diào)節(jié)點(diǎn),它合并這些值到自己的優(yōu)先隊(duì)列中來(lái)產(chǎn)生一個(gè)全局排序后的結(jié)果列表。
Fetch階段:
協(xié)調(diào)節(jié)點(diǎn)辨別出哪些文檔需要被取回并向相關(guān)的分片提交多個(gè) GET 請(qǐng)求。每個(gè)分片加載并 豐富 文檔,如果有需要的話(huà),接著返回文檔給協(xié)調(diào)節(jié)點(diǎn)。一旦所有的文檔都被取回了,協(xié)調(diào)節(jié)點(diǎn)返回結(jié)果給客戶(hù)端。

11.索引是什么?

ES集群包含多個(gè)索引,每個(gè)索引包含一種表,表包含多個(gè)文檔,并且每個(gè)文檔包含不同的屬性。

12.請(qǐng)解釋什么是分片(SHARDs)?

隨著索引文件的增加,磁盤(pán)容量、處理能力都會(huì)變得不夠,在這種情況下,將索引數(shù)據(jù)切分成小段,這就叫分片(SHARDS)。它的出現(xiàn)大大改進(jìn)了數(shù)據(jù)查詢(xún)的效率。

13.什么是副本(REPLICA), 他的作用是什么?

副本是分片的完整拷貝,副本的作用是增加了查詢(xún)的吞吐率和在極端負(fù)載情況下獲得高可用的能力。副本有效的幫助處理用戶(hù)請(qǐng)求。

14.在ES集群中增加和創(chuàng)建索引的步驟是什么?

可以在Kibana中配置新的索引,進(jìn)行Fields Mapping,設(shè)置索引別名。也可以通過(guò)HTTP請(qǐng)求來(lái)創(chuàng)建索引。

15.ES支持哪些類(lèi)型的查詢(xún)?

主要分為匹配(文本)查詢(xún)和基于Term的查詢(xún)。

文本查詢(xún)包括基本匹配,match phrase, multi-match, match phrase prefix, common terms, query-string, simple query string.

Term查詢(xún),比如term exists, type, term set, range, prefix, ids, wildcard, regexp, and fuzzy。

16.Elasticsearch在部署時(shí),對(duì)Linux的設(shè)置有哪些優(yōu)化方法

面試官:想了解對(duì)ES集群的運(yùn)維能力。 解答

  • 1)關(guān)閉緩存swap;
  • 2)堆內(nèi)存設(shè)置為:Min(節(jié)點(diǎn)內(nèi)存/2, 32GB);
  • 3)設(shè)置最大文件句柄數(shù);
  • 4)線(xiàn)程池+隊(duì)列大小根據(jù)業(yè)務(wù)需要做調(diào)整;
  • 5)磁盤(pán)存儲(chǔ)raid方式——存儲(chǔ)有條件使用RAID10,增加單節(jié)點(diǎn)性能以及避免單節(jié)點(diǎn)存儲(chǔ)故障。

17.什么是ElasticSearch中的編譯器?

編譯器用于將字符串分解為術(shù)語(yǔ)或標(biāo)記流。一個(gè)簡(jiǎn)單的編譯器可能會(huì)將字符串拆分為任何遇到空格或標(biāo)點(diǎn)的地方。Elasticsearch有許多內(nèi)置標(biāo)記器,可用于構(gòu)建自定義分析器。

18.拼寫(xiě)糾錯(cuò)是如何實(shí)現(xiàn)的?

1、拼寫(xiě)糾錯(cuò)是基于編輯距離來(lái)實(shí)現(xiàn);編輯距離是一種標(biāo)準(zhǔn)的方法,它用來(lái)表示經(jīng)過(guò)插入、刪除和替換操作從一個(gè)字符串轉(zhuǎn)換到另外一個(gè)字符串的最小操作步數(shù);

2、編輯距離的計(jì)算過(guò)程:比如要計(jì)算 batyu 和 beauty 的編輯距離,先創(chuàng)建一個(gè)7×8 的表(batyu 長(zhǎng)度為 5,coffee 長(zhǎng)度為 6,各加 2),接著,在如下位置填入黑色數(shù)字。其他格的計(jì)算過(guò)程是取以下三個(gè)值的最小值:

如果最上方的字符等于最左方的字符,則為左上方的數(shù)字。否則為左上方的數(shù)字+1。(對(duì)于 3,3 來(lái)說(shuō)為 0)

左方數(shù)字+1(對(duì)于 3,3 格來(lái)說(shuō)為 2)

上方數(shù)字+1(對(duì)于 3,3 格來(lái)說(shuō)為 2)

最終取右下角的值即為編輯距離的值 3。

在這里插入圖片描述

對(duì)于拼寫(xiě)糾錯(cuò),我們考慮構(gòu)造一個(gè)度量空間(Metric Space),該空間內(nèi)任何關(guān)

系滿(mǎn)足以下三條基本條件:

d(x,y) = 0 – 假如 x 與 y 的距離為 0,則 x=y

d(x,y) = d(y,x) – x 到 y 的距離等同于 y 到 x 的距離

d(x,y) + d(y,z) >= d(x,z) – 三角不等式

1、根據(jù)三角不等式,則滿(mǎn)足與 query 距離在 n 范圍內(nèi)的另一個(gè)字符轉(zhuǎn) B,其與 A

的距離最大為 d+n,最小為 d-n。

2、BK 樹(shù)的構(gòu)造就過(guò)程如下:每個(gè)節(jié)點(diǎn)有任意個(gè)子節(jié)點(diǎn),每條邊有個(gè)值表示編輯距離。所有子節(jié)點(diǎn)到父節(jié)點(diǎn)的邊上標(biāo)注 n 表示編輯距離恰好為 n。比如,我們有棵樹(shù)父節(jié)點(diǎn)是”book”和兩個(gè)子節(jié)點(diǎn)”cake”和”books”,”book”到”books”的邊標(biāo)號(hào) 1,”book”到”cake”的邊上標(biāo)號(hào) 4。從字典里構(gòu)造好樹(shù)后,無(wú)論何

時(shí)你想插入新單詞時(shí),計(jì)算該單詞與根節(jié)點(diǎn)的編輯距離,并且查找數(shù)值為d(neweord, root)的邊。遞歸得與各子節(jié)點(diǎn)進(jìn)行比較,直到?jīng)]有子節(jié)點(diǎn),你就可以創(chuàng)建新的子節(jié)點(diǎn)并將新單詞保存在那。比如,插入”boo”到剛才上述例子的樹(shù)中,我們先檢查根節(jié)點(diǎn),查找 d(“book”, “boo”) = 1 的邊,然后檢查標(biāo)號(hào)為1 的邊的子節(jié)點(diǎn),得到單詞”books”。我們?cè)儆?jì)算距離 d(“books”, “boo”)=2,則將新單詞插在”books”之后,邊標(biāo)號(hào)為 2。

3、查詢(xún)相似詞如下:計(jì)算單詞與根節(jié)點(diǎn)的編輯距離 d,然后遞歸查找每個(gè)子節(jié)點(diǎn)標(biāo)號(hào)為 d-n 到 d+n(包含)的邊。假如被檢查的節(jié)點(diǎn)與搜索單詞的距離 d 小于 n,則返回該節(jié)點(diǎn)并繼續(xù)查詢(xún)。比如輸入 cape 且最大容忍距離為 1,則先計(jì)算和根的編輯距離 d(“book”, “cape”)=4,然后接著找和根節(jié)點(diǎn)之間編輯距離為 3 到5 的,這

個(gè)就找到了 cake 這個(gè)節(jié)點(diǎn),計(jì)算 d(“cake”, “cape”)=1,滿(mǎn)足條件所以返回 cake,然后再找和 cake 節(jié)點(diǎn)編輯距離是 0 到 2 的,分別找到 cape 和cart 節(jié)點(diǎn),這樣就得到 cape 這個(gè)滿(mǎn)足條件的結(jié)果。

在這里插入圖片描述

19.ElasticSearch中的分析器是什么?

在ElasticSearch中索引數(shù)據(jù)時(shí),數(shù)據(jù)由為索引定義的Analyzer在內(nèi)部進(jìn)行轉(zhuǎn)換。 分析器由一個(gè)Tokenizer和零個(gè)或多個(gè)TokenFilter組成。編譯器可以在一個(gè)或多個(gè)CharFilter之前。分析模塊允許您在邏輯名稱(chēng)下注冊(cè)分析器,然后可以在映射定義或某些API中引用它們。

Elasticsearch附帶了許多可以隨時(shí)使用的預(yù)建分析器?;蛘?#xff0c;您可以組合內(nèi)置的字符過(guò)濾器,編譯器和過(guò)濾器器來(lái)創(chuàng)建自定義分析器。

20.是否了解字典樹(shù)?

常用字典數(shù)據(jù)結(jié)構(gòu)如下所示:

在這里插入圖片描述

Trie 的核心思想是空間換時(shí)間,利用字符串的公共前綴來(lái)降低查詢(xún)時(shí)間的開(kāi)銷(xiāo)以達(dá)到提高效率的目的。它有 3 個(gè)基本性質(zhì):

1、根節(jié)點(diǎn)不包含字符,除根節(jié)點(diǎn)外每一個(gè)節(jié)點(diǎn)都只包含一個(gè)字符。

2、從根節(jié)點(diǎn)到某一節(jié)點(diǎn),路徑上經(jīng)過(guò)的字符連接起來(lái),為該節(jié)點(diǎn)對(duì)應(yīng)的字符串。

3、每個(gè)節(jié)點(diǎn)的所有子節(jié)點(diǎn)包含的字符都不相同。

在這里插入圖片描述

1、可以看到,trie 樹(shù)每一層的節(jié)點(diǎn)數(shù)是 26^i 級(jí)別的。所以為了節(jié)省空間,我們還可以用動(dòng)態(tài)鏈表,或者用數(shù)組來(lái)模擬動(dòng)態(tài)。而空間的花費(fèi),不會(huì)超過(guò)單詞數(shù)×單詞長(zhǎng)度。

2、實(shí)現(xiàn):對(duì)每個(gè)結(jié)點(diǎn)開(kāi)一個(gè)字母集大小的數(shù)組,每個(gè)結(jié)點(diǎn)掛一個(gè)鏈表,使用左兒子右兄弟表示法記錄這棵樹(shù);

3、對(duì)于中文的字典樹(shù),每個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)用一個(gè)哈希表存儲(chǔ),這樣就不用浪費(fèi)太大的空間,而且查詢(xún)速度上可以保留哈希的復(fù)雜度 O(1)。

21. 在并發(fā)情況下,ES如果保證讀寫(xiě)一致?

可以通過(guò)版本號(hào)使用樂(lè)觀(guān)并發(fā)控制,以確保新版本不會(huì)被舊版本覆蓋,由應(yīng)用層來(lái)處理具體的沖突;
另外對(duì)于寫(xiě)操作,一致性級(jí)別支持quorum/one/all,默認(rèn)為quorum,即只有當(dāng)大多數(shù)分片可用時(shí)才允許寫(xiě)操作。但即使大多數(shù)可用,也可能存在因?yàn)榫W(wǎng)絡(luò)等原因?qū)е聦?xiě)入副本失敗,這樣該副本被認(rèn)為故障,分片將會(huì)在一個(gè)不同的節(jié)點(diǎn)上重建。
對(duì)于讀操作,可以設(shè)置replication為sync(默認(rèn)),這使得操作在主分片和副本分片都完成后才會(huì)返回;如果設(shè)置replication為async時(shí),也可以通過(guò)設(shè)置搜索請(qǐng)求參數(shù)_preference為primary來(lái)查詢(xún)主分片,確保文檔是最新版本。

22. ES對(duì)于大數(shù)據(jù)量(上億量級(jí))的聚合如何實(shí)現(xiàn)?

Elasticsearch 提供的首個(gè)近似聚合是cardinality 度量。它提供一個(gè)字段的基數(shù),即該字段的distinct或者unique值的數(shù)目。它是基于HLL算法的。HLL 會(huì)先對(duì)我們的輸入作哈希運(yùn)算,然后根據(jù)哈希運(yùn)算的結(jié)果中的 bits 做概率估算從而得到基數(shù)。其特點(diǎn)是:可配置的精度,用來(lái)控制內(nèi)存的使用(更精確 = 更多內(nèi)存);小的數(shù)據(jù)集精度是非常高的;我們可以通過(guò)配置參數(shù),來(lái)設(shè)置去重需要的固定內(nèi)存使用量。無(wú)論數(shù)千還是數(shù)十億的唯一值,內(nèi)存使用量只與你配置的精確度相關(guān)。

23. 對(duì)于GC方面,在使用ES時(shí)要注意什么?

1)倒排詞典的索引需要常駐內(nèi)存,無(wú)法GC,需要監(jiān)控data node上segment memory增長(zhǎng)趨勢(shì)。
2)各類(lèi)緩存,field cache, filter cache, indexing cache, bulk queue等等,要設(shè)置合理的大小,并且要應(yīng)該根據(jù)最壞的情況來(lái)看heap是否夠用,也就是各類(lèi)緩存全部占滿(mǎn)的時(shí)候,還有heap空間可以分配給其他任務(wù)嗎?避免采用clear cache等“自欺欺人”的方式來(lái)釋放內(nèi)存。
3)避免返回大量結(jié)果集的搜索與聚合。確實(shí)需要大量拉取數(shù)據(jù)的場(chǎng)景,可以采用scan & scroll api來(lái)實(shí)現(xiàn)。
4)cluster stats駐留內(nèi)存并無(wú)法水平擴(kuò)展,超大規(guī)模集群可以考慮分拆成多個(gè)集群通過(guò)tribe node連接。
5)想知道heap夠不夠,必須結(jié)合實(shí)際應(yīng)用場(chǎng)景,并對(duì)集群的heap使用情況做持續(xù)的監(jiān)控。

24. 說(shuō)說(shuō)你們公司ES的集群架構(gòu),索引數(shù)據(jù)大小,分片有多少,以及一些調(diào)優(yōu)手段?

根據(jù)實(shí)際情況回答即可,如果是我的話(huà)會(huì)這么回答:
我司有多個(gè)ES集群,下面列舉其中一個(gè)。該集群有20個(gè)節(jié)點(diǎn),根據(jù)數(shù)據(jù)類(lèi)型和日期分庫(kù),每個(gè)索引根據(jù)數(shù)據(jù)量分片,比如日均1億+數(shù)據(jù)的,控制單索引大小在200GB以?xún)?nèi)?!?br /> 下面重點(diǎn)列舉一些調(diào)優(yōu)策略,僅是我做過(guò)的,不一定全面,如有其它建議或者補(bǔ)充歡迎留言。
部署層面:
1)最好是64GB內(nèi)存的物理機(jī)器,但實(shí)際上32GB和16GB機(jī)器用的比較多,但絕對(duì)不能少于8G,除非數(shù)據(jù)量特別少,這點(diǎn)需要和客戶(hù)方面溝通并合理說(shuō)服對(duì)方。
2)多個(gè)內(nèi)核提供的額外并發(fā)遠(yuǎn)勝過(guò)稍微快一點(diǎn)點(diǎn)的時(shí)鐘頻率。
3)盡量使用SSD,因?yàn)椴樵?xún)和索引性能將會(huì)得到顯著提升。
4)避免集群跨越大的地理距離,一般一個(gè)集群的所有節(jié)點(diǎn)位于一個(gè)數(shù)據(jù)中心中。
5)設(shè)置堆內(nèi)存:節(jié)點(diǎn)內(nèi)存/2,不要超過(guò)32GB。一般來(lái)說(shuō)設(shè)置export ES_HEAP_SIZE=32g環(huán)境變量,比直接寫(xiě)-Xmx32g -Xms32g更好一點(diǎn)。
6)關(guān)閉緩存swap。內(nèi)存交換到磁盤(pán)對(duì)服務(wù)器性能來(lái)說(shuō)是致命的。如果內(nèi)存交換到磁盤(pán)上,一個(gè)100微秒的操作可能變成10毫秒。 再想想那么多10微秒的操作時(shí)延累加起來(lái)。不難看出swapping對(duì)于性能是多么可怕。
7)增加文件描述符,設(shè)置一個(gè)很大的值,如65535。Lucene使用了大量的文件,同時(shí),Elasticsearch在節(jié)點(diǎn)和HTTP客戶(hù)端之間進(jìn)行通信也使用了大量的套接字。所有這一切都需要足夠的文件描述符。
8)不要隨意修改垃圾回收器(CMS)和各個(gè)線(xiàn)程池的大小。
9)通過(guò)設(shè)置gateway.recover_after_nodes、gateway.expected_nodes、gateway.recover_after_time可以在集群重啟的時(shí)候避免過(guò)多的分片交換,這可能會(huì)讓數(shù)據(jù)恢復(fù)從數(shù)個(gè)小時(shí)縮短為幾秒鐘。
索引層面:
1)使用批量請(qǐng)求并調(diào)整其大小:每次批量數(shù)據(jù) 5–15 MB 大是個(gè)不錯(cuò)的起始點(diǎn)。
2)段合并:Elasticsearch默認(rèn)值是20MB/s,對(duì)機(jī)械磁盤(pán)應(yīng)該是個(gè)不錯(cuò)的設(shè)置。如果你用的是SSD,可以考慮提高到100-200MB/s。如果你在做批量導(dǎo)入,完全不在意搜索,你可以徹底關(guān)掉合并限流。另外還可以增加 index.translog.flush_threshold_size 設(shè)置,從默認(rèn)的512MB到更大一些的值,比如1GB,這可以在一次清空觸發(fā)的時(shí)候在事務(wù)日志里積累出更大的段。
3)如果你的搜索結(jié)果不需要近實(shí)時(shí)的準(zhǔn)確度,考慮把每個(gè)索引的index.refresh_interval 改到30s。
4)如果你在做大批量導(dǎo)入,考慮通過(guò)設(shè)置index.number_of_replicas: 0 關(guān)閉副本。
5)需要大量拉取數(shù)據(jù)的場(chǎng)景,可以采用scan & scroll api來(lái)實(shí)現(xiàn),而不是from/size一個(gè)大范圍。
存儲(chǔ)層面:
1)基于數(shù)據(jù)+時(shí)間滾動(dòng)創(chuàng)建索引,每天遞增數(shù)據(jù)??刂茊蝹€(gè)索引的量,一旦單個(gè)索引很大,存儲(chǔ)等各種風(fēng)險(xiǎn)也隨之而來(lái),所以要提前考慮+及早避免。
2)冷熱數(shù)據(jù)分離存儲(chǔ),熱數(shù)據(jù)(比如最近3天或者一周的數(shù)據(jù)),其余為冷數(shù)據(jù)。對(duì)于冷數(shù)據(jù)不會(huì)再寫(xiě)入新數(shù)據(jù),可以考慮定期force_merge加shrink壓縮操作,節(jié)省存儲(chǔ)空間和檢索效率。

參考

https://zhuanlan.zhihu.com/p/265399976

https://www.wenyuanblog.com/blogs/elasticsearch-interview-questions.html

http://www.mianshigee.com/question

海的那邊是什么已經(jīng)不重要了

http://aloenet.com.cn/news/32650.html

相關(guān)文章:

  • 家電維修做網(wǎng)站生意怎么樣合肥網(wǎng)站維護(hù)公司
  • 徐州網(wǎng)站建設(shè)哪家好企業(yè)管理培訓(xùn)機(jī)構(gòu)
  • 日照網(wǎng)站建設(shè)價(jià)格蘇貨運(yùn)公司回收百度賬戶(hù)推廣登陸
  • 百度快照入口seo站長(zhǎng)工具 論壇
  • 與做網(wǎng)站有關(guān)的參考文獻(xiàn)網(wǎng)絡(luò)營(yíng)銷(xiāo)的四種形式
  • 做網(wǎng)站要霸屏嗎推廣營(yíng)銷(xiāo)
  • 溫江做網(wǎng)站seo在線(xiàn)短視頻發(fā)布頁(yè)
  • 常州專(zhuān)業(yè)網(wǎng)站建設(shè)推廣seo基礎(chǔ)培訓(xùn)機(jī)構(gòu)
  • 服務(wù)器如何發(fā)布網(wǎng)站無(wú)線(xiàn)網(wǎng)絡(luò)優(yōu)化是做什么的
  • 石家莊新華區(qū)網(wǎng)站建設(shè)推廣官網(wǎng)
  • 批量 網(wǎng)站標(biāo)題常用的營(yíng)銷(xiāo)方法和手段
  • 南京網(wǎng)站開(kāi)發(fā)注冊(cè)app近期國(guó)內(nèi)新聞熱點(diǎn)事件
  • 贛州建網(wǎng)站重慶百度競(jìng)價(jià)開(kāi)戶(hù)
  • 溫州網(wǎng)站設(shè)計(jì)公司seo運(yùn)營(yíng)工作內(nèi)容
  • 做網(wǎng)站的學(xué)什么代碼濟(jì)南seo排行榜
  • 網(wǎng)站建設(shè)運(yùn)營(yíng)協(xié)議書(shū)2023年6月份又封城了
  • 政府門(mén)戶(hù)網(wǎng)站建設(shè)方案下載磁力吧ciliba
  • 做會(huì)計(jì)網(wǎng)站的流程seo課程總結(jié)怎么寫(xiě)
  • 美橙域名查詢(xún)網(wǎng)站做網(wǎng)站建設(shè)優(yōu)化的公司排名
  • 做網(wǎng)站空間 阿里云優(yōu)化大師怎么刪除學(xué)生
  • wordpress以前版本星巴克seo網(wǎng)絡(luò)推廣
  • 西安誰(shuí)家的集團(tuán)門(mén)戶(hù)網(wǎng)站建設(shè)比較好seo推廣排名重要嗎
  • 做ppt的模板的網(wǎng)站有哪些如何優(yōu)化網(wǎng)站
  • 網(wǎng)站推廣服務(wù)網(wǎng)站連鎖微信朋友圈廣告30元 1000次
  • 湛江免費(fèi)建站模板短視頻剪輯培訓(xùn)班多少錢(qián)
  • 剛建的網(wǎng)站百度搜不到聯(lián)合早報(bào) 即時(shí)消息
  • 推廣網(wǎng)站怎么建設(shè)和維護(hù)seo資訊
  • 產(chǎn)品外包裝設(shè)計(jì)網(wǎng)站直通車(chē)關(guān)鍵詞優(yōu)化
  • 鄭州天梯網(wǎng)站制作seo研究協(xié)會(huì)
  • wordpress左邊欄網(wǎng)頁(yè)seo優(yōu)化