版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
上篇
1、elasticsearch了解多少,說說你們公司es的集群架
構(gòu),索引數(shù)據(jù)大小,分片有多少,以及一些調(diào)優(yōu)手段。
面試官:想了解應(yīng)聘者之前公司接觸的ES使用場景、規(guī)模,有沒有做過比較大規(guī)模的索引設(shè)計、規(guī)
劃、調(diào)優(yōu)。
解答:如實結(jié)合自己的實踐場景回答即可.
比如:ES集群架構(gòu)13個節(jié)點,索引根據(jù)通道不同共20+索引,根據(jù)日期,每日遞增20+,索引:10
分片,每日遞增1億+數(shù)據(jù),每個通道每天索引大小控制:150GB之內(nèi)。
僅索引層面調(diào)優(yōu)手段:
1」、設(shè)計階段調(diào)優(yōu)
(1)根據(jù)業(yè)務(wù)增量需求,采取基于日期模板創(chuàng)建索引,通過rolloverAPI滾動索引;
(2)使用別名進行索引管理;
(3)每天凌晨定時對索引做force_merge操作,以釋放空間;
(4)采取冷熱分離機制,熱數(shù)據(jù)存儲到SSD,提高檢索效率;冷數(shù)據(jù)定期進行shrink操作,以縮減存
儲;
(5)采取curator進行索引的生命周期管理;
(6)僅針對需要分詞的字段,合理的設(shè)置分詞器;
(7)Mapping階段充分結(jié)合各個字段的屬性,是否需要檢索、是否需要存儲等。........
1.2、寫入調(diào)優(yōu)
(1)寫入前副本數(shù)設(shè)置為0;
(2)寫入前關(guān)閉refresh_interval設(shè)置為-1,禁用刷新機制;
(3)寫入過程中:采取bulk批量寫入;
(4)寫入后恢復(fù)副本數(shù)和刷新間隔;
(5)盡量使用自動生成的id。
1.3、查詢調(diào)優(yōu)
(1)禁用wildcard;
(2)禁用批量terms(成百上千的場景);
(3)充分利用倒排索引機制,能keyword類型盡量keyword;
(4)數(shù)據(jù)量大時候,可以先基于時間敲定索引再檢索;
(5)設(shè)置合理的路由機制。
1.4、其他調(diào)優(yōu)
部署調(diào)優(yōu),業(yè)務(wù)調(diào)優(yōu)等。
上面的提及一部分,面試者就基本對你之前的實踐或者運維經(jīng)驗有所評估了。
2、elasticsearch的倒排索引是什么
面試官:想了解你對基礎(chǔ)概念的認知。
解答:通俗解釋一下就可以。
傳統(tǒng)的我們的檢索是通過文章,逐個遍歷找到對應(yīng)關(guān)鍵詞的位置。
而倒排索引,是通過分詞策略,形成了詞和文章的映射關(guān)系表,這種詞典+映射表即為倒排索引。有了
倒排索引,就能實現(xiàn)。(1)時間復(fù)雜度的效率檢索文章了,極大的提高了檢索效率。
term字典倒排docld友
學(xué)術(shù)的解答方式:
倒排索引,相反一篇文章包含了哪些詞,它從詞出發(fā),記載了這個詞在哪些文檔中出現(xiàn)過,由兩部分
組成一一詞典和倒排表。
加分項:倒排索引的底層實現(xiàn)是基于:FST(FiniteStateTransducer)數(shù)據(jù)結(jié)構(gòu),
lucene從4+版本后開始大量使用的數(shù)據(jù)結(jié)構(gòu)是FST。FST有兩個優(yōu)點:
(1)空間占用小。通過對詞典中單詞前綴和后綴的重復(fù)利用,壓縮了存儲空間;
(2)查詢速度快。O(len(str))的查詢時間復(fù)雜度.
3、elasticsearch索引數(shù)據(jù)多了怎么辦,如何調(diào)優(yōu),部署
面試官:想了解大數(shù)據(jù)量的運維能力。
解答:索引數(shù)據(jù)的規(guī)劃,應(yīng)在前期做好規(guī)劃,正所謂“設(shè)計先行,編碼在后",這樣才能有效的避免突如
其來的數(shù)據(jù)激增導(dǎo)致集群處理能力不足引發(fā)的線上客戶檢索或者其他業(yè)務(wù)受到影響。
如何調(diào)優(yōu),正如問題1所說,這里細化一下:
3.1動態(tài)索引層面
基于模板+時間+rolloverapi滾動創(chuàng)建索引,舉例:設(shè)計階段定義:blog索引的模板格式為:
blogjndex一時間戳的形式,每天遞增數(shù)據(jù)。這樣做的好處:不至于數(shù)據(jù)量激增導(dǎo)致單個索引數(shù)據(jù)量非
常大,接近于上線2的32次鬲-1,索引存儲達到了TB+甚至更大。
一旦單個索引很大,存儲等各種風(fēng)險也隨之而來,所以要提前考慮+及早避免。
3.2存儲層面
冷熱數(shù)據(jù)分離存儲,熱數(shù)據(jù)(比如最近3天或者一周的數(shù)據(jù)),其余為冷數(shù)據(jù)。
對于冷數(shù)據(jù)不會再寫入新數(shù)據(jù),可以考慮定期force_merge加shrink壓縮操作,節(jié)省存儲空間和檢索
效率。
3.3部署層面
一旦之前沒有規(guī)劃,這里就屬于應(yīng)急策略。
結(jié)合ES自身的支持動態(tài)擴展的特點,動態(tài)新增機器的方式可以緩解集群壓力,注意:如果之前主節(jié)點
等規(guī)劃合理,不需要重啟集群也能完成動態(tài)新增的。
4、elasticsearch是如何實現(xiàn)master選舉的
面試官:想了解ES集群的底層原理,不再只關(guān)注業(yè)務(wù)層面了。
解答:
刖置刖提:
(1)只有候選主節(jié)點(master:true)的節(jié)點才能成為主節(jié)點。
(2)最小主節(jié)點數(shù)(min_master_nodes)的目的是防止腦裂。
核對了一下代碼,核心入口為findMaster,選擇主節(jié)點成功返回對應(yīng)Master,否則返回null。選舉流
程大致描述如下:
第一步:確認候選主節(jié)點數(shù)達標,elasticsearch.yml設(shè)置的值
discovery.zen.minimum_master_nodes;
第二步:匕戚:先判定是否具備master資格,具備候選主節(jié)點資格的優(yōu)先返回;
若兩節(jié)點都為候選主節(jié)點,則id小的值會主節(jié)點。注意這里的id為string類型。
題外話:獲取節(jié)點id的方法。
1GET/_cat/nodes?v&h=ip,port,heappercent,heapMax,id,name
21pportheappercentheapMaxidname復(fù)制代碼
5、詳細描述一下Elasticsearch索引文檔的過程
面試官:想了解ES的底層原理,不再只關(guān)注業(yè)務(wù)層面了。
解答:
這里的索引文檔應(yīng)該理解為文檔寫入ES,創(chuàng)建索引的過程。
文檔寫入包含:單文檔寫入和批量bulk寫入,這里只解釋一下:單文檔寫入流程。
記住官方文檔中的這個圖。
第一步:客戶寫集群某節(jié)點寫入數(shù)據(jù),發(fā)送請求。(如果沒有指定路由/協(xié)調(diào)節(jié)點,請求的節(jié)點扮演路
由節(jié)點的角色.)
第二步:節(jié)點1接受到請求后,使用文檔」d來確定文檔屬于分片0。請求會被轉(zhuǎn)到另外的節(jié)點,假定
節(jié)點3。因此分片0的主分片分配到節(jié)點3上。
第三步:節(jié)點3在主分片上執(zhí)行寫操作,如果成功,則將請求并行轉(zhuǎn)發(fā)到節(jié)點1和節(jié)點2的副本分片
上,等待結(jié)果返回。所有的副本分片都報告成功,節(jié)點3將向協(xié)調(diào)節(jié)點(節(jié)點1)報告成功,節(jié)點1向
請求客戶端報告寫入成功。
如果面試官再問:第二步中的文檔獲取分片的過程?
回答:借助路由算法獲取,路由算法就是根據(jù)路由和文檔id計算目標的分片id的過程。
Ishard=hash(.routing)%(num_of_primary_shards)復(fù)制代碼
6、詳細描述一下Elasticsearch搜索的過程?
面試官:想了解ES搜索的底層原理,不再只關(guān)注業(yè)務(wù)層面了。
解答:
搜索拆解為"querythenfetch"兩個階段。
query階段的目的:定位到位置,但不取。
步驟拆解如下:
(1)假設(shè)一個索引數(shù)據(jù)有5主+1副本共10分片,一次請求會命中(主或者副本分片中)的一個。
(2)每個分片在本地進行杳詢,結(jié)果返回到本地有序的優(yōu)先隊列中。
(3)第2)步驟的結(jié)果發(fā)送到協(xié)調(diào)節(jié)點,協(xié)調(diào)節(jié)點產(chǎn)生一個全局的排序列表。
fetch階段的目的:取數(shù)據(jù)。
路由節(jié)點獲取所有文檔,返回給客戶端。
7、Elasticsearch在部署時,對Linux的設(shè)置有哪些優(yōu)化
方法
面試官:想了解對ES集群的運維能力.
解答:
(1)關(guān)閉緩存swap;
(2)堆內(nèi)存設(shè)置為:Min(節(jié)點內(nèi)存/2,32GB);
(3)設(shè)置最大文件句柄數(shù);
(4)線程池+隊列大小根據(jù)業(yè)務(wù)需要做調(diào)整;
(5)磁盤存儲raid方式一一存儲有條件使用RAID10,增加單節(jié)點性能以及避免單節(jié)點存儲故障。
8、lucence內(nèi)部結(jié)構(gòu)是什么?
面試官:想了解你的知識面的廣度和深度。
解答:
Lucene是有索引和搜索的兩個過程,包含索引創(chuàng)建,索引,搜索三個要點。可以基于這個脈絡(luò)展開一
些。
9、Elasticsearch是如何實現(xiàn)Master選舉的?
(1)日asticsearch的選主是ZenDiscovery模塊負責(zé)的,主要包含Ping(節(jié)點之間通過這個RPC來發(fā)
現(xiàn)彼此)和Unicast(單播模塊包含一個主機列表以控制哪些節(jié)點需要ping通)這兩部分;
(2)對所有可以成為master的節(jié)點(node.master:true)根據(jù)nodeld字典排序,每次選舉每個節(jié)
點都把自己所知道節(jié)點排一次序,然后選出第一個(第0位)節(jié)點,暫且認為它是master節(jié)點。
(3)如果對某個節(jié)點的投票數(shù)達到一定的值(可以成為master節(jié)點數(shù)n/2+1)并且該節(jié)點自己也選
舉自己,那這個節(jié)點就是master。否則重新選舉一直到滿足上述條件。
(4)補充:master節(jié)點的職責(zé)主要包括集群、節(jié)點和索引的管理,不負責(zé)文檔級別的管理;data節(jié)
點可以關(guān)閉http功能*。
10、Elasticsearch中的節(jié)點(比如共20個),其中的
10個
選了一個master,另外10個選了另一個master,怎么辦?
(1)當集群master候選數(shù)量不小于3個時,可以通過設(shè)置最少投票通過數(shù)量
(discovery.zen.minimum_master_nodes)超過所有候選節(jié)點一半以上來解決腦裂問題;
(3)當候選數(shù)量為兩個時,只能修改為唯一的一個master候選,其他作為data節(jié)點,避免腦裂問
題。
11、客戶端在和集群連接時,如何選擇特定的節(jié)點執(zhí)行請
求的?
Transportclient利用transport模塊遠程連接一個elasticsearch集群。它并不加入到集群中,只是簡
單的獲得一個或者多個初始化的transport地址,并以輪詢的方式與這些地址進行通信。
12、詳細描述一下Elasticsearch索引文檔的過程。
協(xié)調(diào)節(jié)點默認使用文檔ID參與計算(也支持通過routing),以便為路由提供合適的分片。
shard=hash(document_id)%(num_of_primary_shards)復(fù)制代碼
(1)當分片所在的節(jié)點接收到來自協(xié)調(diào)節(jié)點的請求后,會將請求寫入到MemoryBuffer,然后定時
(默認是每隔1秒)寫入到FilesystemCache,這個從MomeryBuffer至(IFilesystemCache的過程就
叫做refresh;
(2)當然在某些情況下,存在MomeryBuffer和FilesystemCache的數(shù)據(jù)可能會丟失,ES是通過
translog的機制來保證數(shù)據(jù)的可靠性的。其實現(xiàn)機制是接收到請求后,同時也會寫入到translog中,
當Rlesystemcache中的數(shù)據(jù)寫入到磁盤中時,才會清除掉,這個過程叫做flush;
(3)在flush過程中,內(nèi)存中的緩沖將被清除,內(nèi)容被寫入一個新段,段的fsync將創(chuàng)建一個新的提交
點,并將內(nèi)容刷新到磁盤,舊的translog將被刪除并開始f新的translog。
(4)flush觸發(fā)的時機是定時觸發(fā)(默認30分鐘)或者translog變得太大(默認為512M)時;
補充:關(guān)于Lucene的Segement:
(1)Lucene索引是由多個段組成,段本身是一個功能齊全的倒排索引。
(2)段是不可變的,允許Lucene將新的文檔增量地添加到索引中,而不用從頭重建索引。
(3)對于每一個搜索請求而言,索引中的所有段都會被搜索,并且每個段會消耗CPU的時鐘周、文件
句柄和內(nèi)存。這意味著段的數(shù)量越多,搜索性能會越低。
(4)為了解決這個問題,日asticsearch會合并小段到一個較大的段,提交新的合并段到磁盤,并刪除
那些舊的小段。
下篇
1.Elasticsearch是一個分布式的RESTful風(fēng)格的搜索和數(shù)據(jù)分析引
擎。
(1)直詢:日asticsearch允許執(zhí)行和合并多種類型的搜索一結(jié)構(gòu)化、非結(jié)構(gòu)化、地理位置、度量指
標一搜索方式隨心而變。
(2)分析:找到與查詢最匹配的十個文檔是一回事。但是如果面對的是十億行日志,又該如何解讀
呢?日asticsearch聚合讓您能夠從大處著眼,探索數(shù)據(jù)的趨勢和模式。
(3)速度:Egsticsearch很快。真的,真的很快。
(4)可擴展性:可以在筆記本電腦上運行。也可以在承載了PB級數(shù)據(jù)的成百上千臺服務(wù)器上運行。
(5)彈性:日asticsearch運行在一個分布式的環(huán)境中,從設(shè)計之初就考慮到了這一點。
(6)靈活性:具備多個案例場景。數(shù)字、文本、地理位置、結(jié)構(gòu)化、非結(jié)構(gòu)化。所有的數(shù)據(jù)類型都歡
迎。
(7)HADOOP&SPARK:Elasticsearch+Hadoop
2.Elasticsearch是一個高度可伸縮的開源全文搜索和分析引擎。它
允許您快速和接近實時地存儲、搜索和分析大量數(shù)據(jù)。
這里有一些使用日asticsearch的用例:
(1)你經(jīng)營一個網(wǎng)上商店,你允許你的顧客搜索你賣的產(chǎn)品。在這種情況下,您可以使用
日asticsearch來存儲整個產(chǎn)品目錄和庫存,并為它們提供搜索和自動完成建議.
(2)你希望收集日志或事務(wù)數(shù)據(jù),并希望分析和挖掘這些數(shù)據(jù),以查找趨勢、統(tǒng)計、匯總或異常。在
這種情況下,你可以使用loghide(Elasticsearch/loghide/Kibana堆棧的一^分)來收集、聚合和解析數(shù)
據(jù),然后讓loghide將這些數(shù)據(jù)輸入到日asticsearch中。一旦數(shù)據(jù)在日asticsearch中,你就可以運行搜
索和聚合來挖掘你感興趣的任何信息。
(3)你運行一個價格警報平臺,允許精通價格的客戶指定如下規(guī)則:“我有興趣購買特定的電子設(shè)備,如
果下個月任!可供應(yīng)商的產(chǎn)品價格低于X美元,我希望得到通知"。在這種情況下,你可以抓取供應(yīng)商的價
格,將它們推入到Elasticsearch中,并使用其反向搜索(PerWator)功能來匹配價格走勢與客戶查詢,
并最終在找到匹配后將警報推送給客戶。
(4)你有分析/業(yè)務(wù)智能需求,并希望快速調(diào)查、分析、可視化,并對大量數(shù)據(jù)提出特別問題(想想數(shù)百
萬或數(shù)十億的記錄)。在這種情況下,你可以使用日asticsearch來存儲數(shù)據(jù),然后使用Kibana
(Elasticsearch/loghide/Kibana堆棧的一部分)來構(gòu)建自定義儀表板,以可視化對您來說很重要的數(shù)據(jù)
的各個方面。此外,還可以使用日asticsearch聚合功能對數(shù)據(jù)執(zhí)行復(fù)雜的業(yè)務(wù)智能查詢。
Elasticsearch面試題
1、詳細描述一下Elasticsearch更新和刪除文檔的過程。
2、詳細描述一下Elasticsearch搜索的過程。
3、在日asticsearch中,是怎么根據(jù)一個詞找到對應(yīng)的倒排索弓I的?
4、Elasticsearch在部署時,對Linux的設(shè)置有哪些優(yōu)化方法?
5、對于GC方面,在使用Elasticsearch時要注意什么?
6、Elasticsearch對于大數(shù)據(jù)量(上億量級)的聚合如何實現(xiàn)?
7、在并發(fā)情況下,日asticsearch如果保證讀寫一致?
8、如何監(jiān)控日asticsearch集群狀態(tài)?
9、介紹下你們電商搜索的整體技術(shù)架構(gòu)。
10、介紹一下你們的個性化搜索方案?
11、是否了解字典樹?
12、拼寫糾錯是如何實現(xiàn)的?
1、詳細描述一下Elasticsearch更新和刪除文檔的過程。
(1)刪除和更新也都是寫操作,但是日asticsearch中的文檔是不可變的,因此不能被刪除或者改動以
展示其變更;
(2)磁盤上的每個段都有一個相應(yīng)的.del文件。當刪除請求發(fā)送后,文檔并沒有真的被刪除,而是
在.del文件中被標記為刪除。該文檔依然能匹配查詢,但是會在結(jié)果中被過濾掉。當段合并時,在.del
文件中被標記為刪除的文檔將不會被寫入新段。
(3)在新的文檔被創(chuàng)建時,Elasticsearch會為該文檔指定一個版本號,當執(zhí)行更新時,舊版本的文檔
在.del文件中被標記為刪除,新版本的文檔被索引到一個新段。舊版本的文檔依然能匹配查詢,但是會
在結(jié)果中被過濾掉。
2、詳細描述一下Elasticsearch搜索的過程。
(1)搜索被執(zhí)行成一個兩階段過程,我們稱之為QueryThenFetch;
(2)在初始杳詢階段時,杳詢會廣播到索引中每一個分片拷貝(主分片或者副本分片)。每個分片在
本地執(zhí)行搜索并構(gòu)建一個匹配文檔的大小為from+size的優(yōu)先隊列。
PS:在搜索的時候是會西旬FilesystemCache的,但是有部分數(shù)據(jù)還在MemoryBuffer,所以搜索是
近實時的。
(3)每個分片返回各自優(yōu)先隊列中所有文檔的ID和排序值給協(xié)調(diào)節(jié)點,它合并這些值到自己的優(yōu)先
隊列中來產(chǎn)生一個全局排序后的結(jié)果列表。
(4)接下來就是取回階段,協(xié)調(diào)節(jié)點辨別出哪些文檔需要被取回并向相關(guān)的分片提交多個GET請求。
每個分片加載并豐富文檔,如果有需要的話,接著返回文檔給協(xié)調(diào)節(jié)點.一旦所有的文檔都被取回
了,協(xié)調(diào)節(jié)點返回結(jié)果給客戶端。
(5)補充:QueryThenFetch的搜索類型在文檔相關(guān)性打分的時候參考的是本分片的數(shù)據(jù),這樣在文
檔數(shù)量較少的時候可能不夠準確,DFSQueryThenFetch增加了一個預(yù)查詢的處理,詢問Term和
Documentfrequency,這個評分更準確,但是性能會變差。*
□L二QueryPhase
Phonty?CfMResapra%queueof?izehom?皿and
softsm&ufsbyraievinca
,XxMScgemiD63ndicogcazchmg
OccumeragmeooortimannQnode
mr二
FVcnty
oueue
mr二
Rriocity
QlMMIFetchPTIBM
?Retutnsdocumems??quMledbr
coorcWnimgwdeafterstcNngthen
3、在Elasticsearch中,是怎么根據(jù)一個詞找到對應(yīng)的倒排索引
的?
(1)Lucene的索引過程,就是按照全文檢索的基本過程,將倒排表寫成此文件格式的過程。
(2)Lucene的搜索過程,就是按照此文件格式將索引進去的信息讀出來,然后計算每篇文檔打分
(score)的過程。
4、Elasticsearch在部署時,對Linux的設(shè)置有哪些優(yōu)化方法?
(1)64GB內(nèi)存的機器是非常理想的,但是32GB和16GB機器也是很常見的。少于8GB會適得其
反。
(2)如果你要在更快的CPUs和更多的核心之間選擇,選擇更多的核心更好。多個內(nèi)核提供的額夕由
發(fā)遠勝過稍微快一點點的時鐘頻率。
(3)如果你負擔得起SSD,它將遠遠超出任何旋轉(zhuǎn)介質(zhì)。基于SSD的節(jié)點,查詢和索引性能都有提
升。如果你負擔得起,SSD是一個好的選擇。
(4)即使數(shù)據(jù)中心們近在咫尺,也要避免集群跨越多個數(shù)據(jù)中心。絕對要避免集群跨越大的地理距
離。
(5)請確保運行你應(yīng)用程序的JVM和服務(wù)器的JVM是完全一樣的。在日asticsearch的幾個地方,使
用Java的本地序列化。
(6)通過設(shè)置gateway.recover_after_nodes、gateway.expected_nodess
gateway.recover_after_time可以在集群重啟的時候避免過多的分片交換,這可能會讓數(shù)據(jù)恢復(fù)從數(shù)個
小時縮短為幾秒鐘。
(7)Elasticsearch默認被配置為使用單播發(fā)現(xiàn),以防止節(jié)點無意中加入集群。只有在同一臺機器上運
行的節(jié)點才會自動組成集群。最好使用單播代替組播。
(8)不要隨意修改垃圾回收器(CMS)和各個線程池的大小。
(9)把你的內(nèi)存的(少于)一半給Lucene(但不要超過32GB!),通過ES_HEAP_SIZE環(huán)境變量設(shè)
置。
(10)內(nèi)存交換到磁盤對服務(wù)器性能來說是致命的。如果內(nèi)存交換到磁盤上,一個100微秒的操作可能
變成10毫秒。再想想那么多10微秒的操作時延累加起來.不難看出SW叩ping對于性能是多么可
怕。
(11)Lucene使用了大量的文件。同時,日asticsearch在節(jié)點和HTTP客戶端之間進行通信也使用
了大量的套接字。所有這一切都需要足夠的文件描述符。你應(yīng)該增加你的文件描述符,設(shè)置一個很大的
值,如64,000。
補充:索引階段性能提升方法
(1)使用批量請求并調(diào)整其大小:每次批量數(shù)據(jù)5-15MB大是個不錯的起始點。
(2)存儲:使用SSD
(3)窗哈并:日asticsearch默認值是20MB/s,對機械磁盤應(yīng)該是個不錯的設(shè)置。如果你用的是
SSD,可以考慮提高到100-200MB/S。如果你在做批量導(dǎo)入,完全不在意搜索,你可以徹底關(guān)掉合并
限流。另外還可以增力口index.translog.flush_threshold_size設(shè)置,從默認的512MB到更大一些的
值,比如1GB,這可以在一次清空觸發(fā)的時候在事務(wù)日志里積累出更大的段。
(4)如果你的搜索結(jié)果不需要近實時的準確度,考慮把每個索引的index.refresh_interval改到30s。
(5)如果你在做大批量導(dǎo)入,考慮通過設(shè)置index.number_of_replicas:0關(guān)閉副本。
5、對于GC方面,在使用Elasticsearch時要注意什么?
(1)倒排詞典的索引需要常駐內(nèi)存,無法GC,需要監(jiān)控datanode上segmentmemory增長趨勢。
(2)各類緩存,fieldcache,filtercache,indexingcache,bulkqueue等等,要設(shè)置合理的大小,并
且要應(yīng)該根據(jù)最壞的情況來看heap是否夠用,也就是各類緩存全部占滿的時候,還有heap空間可以
分配給其他任務(wù)嗎?避免采用dearcache等"自欺欺人”的方式來釋放內(nèi)存。
(3)避免返回大量結(jié)果集的搜索與聚合。確實需要大量拉取數(shù)據(jù)的場景,可以采用scan&scrollapi
來實現(xiàn)。
(4)dusterstats駐留內(nèi)存并無法水平擴展,超大規(guī)模集群可以考慮分拆成多個集群通過tribenode
連接。
(5)想知道heap夠不夠,必須結(jié)合實際應(yīng)用場景,并對集群的heap使用情況做持續(xù)的監(jiān)控。
(6)根據(jù)監(jiān)控數(shù)據(jù)理解內(nèi)存需求,合理配置各類circuitbreaker,將內(nèi)存溢出風(fēng)險降低到最低
6、Elasticsearch對于大數(shù)據(jù)量(上億量級)的聚合如何實現(xiàn)?
日asticsearch提供的首個近似聚合是cardinality度量。它提供一個字段的基數(shù),即該字段的distinct
或者unique值的數(shù)目.它是基于HLL算法的。HLL會先對我們的輸入作哈希運算,然后根據(jù)哈希運算
的結(jié)果中的bits做概率估算從而得到基數(shù)。其特點是:可配置的精度,用來控制內(nèi)存的使用(更精確
=更多內(nèi)存);小的數(shù)據(jù)集精度是非常高的;我們可以通過配置參數(shù),來設(shè)置去重需要的固定內(nèi)存使用
量。無論數(shù)千還是數(shù)十億的唯T直,內(nèi)存使用量只與你配置的精確度相關(guān)。
7、在并發(fā)情況下,Elasticsearch如果保證讀寫一致?
(D可以通過版本號使用樂觀并發(fā)控制,以確保新版本不會被舊版本覆蓋,由應(yīng)用層來處理具體的沖
突;
(2)另外對于寫操作,一致性級別支持quorum/one/all,默認為quorum,即只有當大多數(shù)分片可用
時才允許寫操作。但即使大多數(shù)可用,也可能存在因為網(wǎng)絡(luò)等原因?qū)е聦懭敫北臼?,這樣該副本被認
為故障,分片將會在一個不同的節(jié)點上重建。
(3)對于讀操作,可以設(shè)置replication為sync(默認),這使得操作在主分片和副本分片都完成后才會
返回;如果設(shè)置replication為async時,也可以通過設(shè)置搜索請求參^preference為primary來查
詢主分片,確保文檔是最新版本。
8、如何監(jiān)控Elasticsearch集群狀態(tài)?
Marvel讓你可以很簡單的通過Kibana監(jiān)控Elasticsearch.你可以實時杳看你的集群健康狀態(tài)和性
能,也可以分析過去的集群、索引和節(jié)點指標。
9、介紹下你們電商搜索的整體技術(shù)架構(gòu)。
10、介紹一下你們的個性化搜索方案?
基于word2vec和Elasticsearch實現(xiàn)個性化搜索
(1)基于word2vec、日asticsearch和自定義的腳本插件,我們就實現(xiàn)了一個個性化的搜索服務(wù),相對
于原有的實現(xiàn),新版的點擊率和轉(zhuǎn)化率都有大幅的提升;
(2)基于word2vec的商品向量還有一個可用之處,就是可以用來實現(xiàn)相似商品的推薦;
(3)使用word2vec來實現(xiàn)個性化搜索或個性化推薦是有一定局限性的,因為它只能處理用戶點擊歷史
這樣的時序數(shù)據(jù),而無法全面的去考慮用戶偏好,這個還是有很大的改進和提升的空間;
11、是否了解字典樹?
常用字典數(shù)據(jù)結(jié)構(gòu)如下幅:
Trie的核心思想是空間換時間,利用字符串的公共前綴來降低查詢時間的開銷以達到提高效率的目的。
它有3個基本性質(zhì):
1)根節(jié)點不包含字符,除根節(jié)點外每一個節(jié)點都只包含一個字符。
2)從根節(jié)點到某一節(jié)點,路徑上經(jīng)過的字符連接起來,為該節(jié)點對應(yīng)的字符串。
3)每個節(jié)點的所有子節(jié)點包含的字符都不相同。
(1)可以看到,trie樹每一層的節(jié)點數(shù)是26N級別的。所以為了節(jié)省空間,我們還可以用動態(tài)鏈表,
或者用數(shù)組來模擬動態(tài)。而空間的花費,不會超過單詞數(shù)/單詞長度。
(2)實現(xiàn):對每個結(jié)點開一個字母集大小的數(shù)組,每個結(jié)點掛一個鏈表,使用左兒子右兄弟表示法記
錄這棵樹;
(3)對于中文的字典樹,每個節(jié)點的子節(jié)點用一個哈希表存儲,這樣就不用浪費太大的空間,而且查
詢速度上可以保留哈希的復(fù)雜度0(1).
12、拼寫糾錯是如何實現(xiàn)的?
(D拼寫糾錯是基于編輯距離來實現(xiàn);編輯距離是一種標準的方法,它用來表示經(jīng)過插入、刪除和替
換操作從一個字符串轉(zhuǎn)換到另外一個字符串的最小操作步數(shù);
(2)編輯距離的計算過程:比如要計算batyu和beauty的編輯距離,先創(chuàng)建f7、8的表(batyu
長度為5,coffee長度為6,各加2),接著,在如下位置填入黑色數(shù)字。其他格的計算過程是取以下
三個值的最小值:
如果最上方的字符等于最左方的字符,則為左上方的數(shù)字。否則為左上方的數(shù)字+1。(對于3,3來說為
0)
左方數(shù)字+1(對于3,3格來說為2)
上方數(shù)字+1(對于3,3格來說為2)
最終取右下角的值即為編輯距離的值30
beauty
0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 金色的魚鉤教案范文10篇
- 半年個人工作計劃
- 元宵大班教案
- 2021北師大版三年級數(shù)學(xué)下冊教案設(shè)計
- 四年級上冊語文教學(xué)計劃4篇
- 等待高中作文(集錦15篇)
- 幼兒園畢業(yè)實習(xí)報告3篇
- 在外貿(mào)公司實習(xí)報告集合8篇
- 上半年道路交通安全工作總結(jié)
- 天宮課堂第三課300字作文10篇參考
- 2024年陜西榆林市神木市公共服務(wù)輔助人員招聘775人歷年管理單位遴選500模擬題附帶答案詳解
- 2024年度抖音短視頻拍攝制作服務(wù)合同范本3篇
- 2024-2025學(xué)年高二上學(xué)期期末數(shù)學(xué)試卷(提高篇)(含答案)
- 安全生產(chǎn)事故案例分析
- 2024年07月22208政治學(xué)原理期末試題答案
- 《客戶開發(fā)技巧》課件
- 《防范于心反詐于行》中小學(xué)防范電信網(wǎng)絡(luò)詐騙知識宣傳課件
- 口腔執(zhí)業(yè)醫(yī)師定期考核試題(資料)帶答案
- 2023-2024學(xué)年北京市通州區(qū)九年級(上)期末語文試卷
- 2024-2030年中國瑜伽培訓(xùn)行業(yè)運營模式及投資戰(zhàn)略規(guī)劃分析報告
- 人教版七年級語文上冊《課內(nèi)文言文基礎(chǔ)知識 》專項測試卷及答案
評論
0/150
提交評論