在大資料量下提高查詢效率的方法—ES搜尋引擎
我們在開發測試過程中是不是常常會因為查詢效率低下而感到苦惱? 加我VX:atstudy-js 回覆“測試”,進入 自動化測試學習交流群~~
這裡我們給大家介紹一種能夠在大資料量下提高查詢效率的方法ES(elasticsearch)搜尋引擎,接下來我們從什麼是搜尋、普通搜尋面臨的問題和ES如何解決這些問題這幾個方面,讓大家快速理解ES搜尋引擎。
什麼是搜尋
簡單的說搜尋就是我們在搜尋框輸入關鍵詞,查詢哪些網頁包含對應的關鍵詞的過程。
例如:使用者在搜尋框輸入一個詞,客戶端軟體傳送一個請求到後臺,後臺通過sql語句從資料庫中找出相關條目(資料庫會一條一條對比),這就是一個最簡單搜尋原型。
普通搜尋面臨的問題
1、當網頁很多時,假如1000萬個網頁呢,即使伺服器的效能足夠快,從使用者角度,從點選搜尋按鈕到看到搜尋結果可能要很長時間,1小時?2小時?甚至好幾天?
2、當資料量達到幾十T,一臺伺服器已經放不下了,這時候就需要多臺,這就是分散式。
這時候資料就在不同的伺服器了,一個客戶端不可能去請求每臺機器,所以就需要一個管理員角色,負責把客戶端請求分發到每臺機器,同時彙總結果返回給客戶端。
ES搜尋引擎如何解決這些問題
建立倒排索引
正向的查詢資料需要消耗大量的時間,我們可否反過來進行存儲存呢,現在我們有很多網頁,如何才能快速的查到對應的網頁呢?
我們知道雜湊表的查詢效率特別快,借鑑一下雜湊表,我們給每個網頁都打上標籤,每個標籤和對應的網頁建立對應的對映,我們通過標籤與網頁的對映關係就可以馬上找到對應的網頁了。
首先把所有的原始資料進行編號,形成文件列表如圖1:
其次,把文件資料進行分詞,得到很多的詞條,以詞條為索引。
儲存包含這些詞條的文件的編號資訊,如圖2:
當使用者輸入任意的詞條時,首先對使用者輸入的資料進行分詞,得到使用者要搜尋的所有詞條,然後拿著這些詞條去倒排索引列表中進行匹配。找到這些詞條就能找到包含這些詞條的所有文件的編號。
分散式的實現
Elasticsearch 也是會對資料進行切分,同時每一個分片會儲存多個副本,其原因是為了保證分散式環境下的高可用。
在 ES中,節點是對等的,節點間會通過自己的一些規則選取叢集的 Master,Master 會負責叢集狀態資訊的改變,並同步給其他節點。
值得注意的是,只有建立索引和型別需要經過 Master,資料的寫入有一個簡單的 Routing 規則,可以 Route 到叢集中的任意節點,所以資料寫入壓力是分散在整個叢集的。
Elasticsearch 建立一個索引,這個索引可以拆分成多個 shard,每個 shard 儲存部分資料。
這個shard 的資料實際是有多個備份,就是說每個 shard 都有一個 primary shard,負責寫入資料,但是還有幾個 replica shard。
primary shard 寫入資料之後,會將資料同步到其他幾個 replica shard 上去,如圖3,通過這個 replica 的方案,每個 shard 的資料都有多個備份,如果某個機器當機了,還有別的資料副本在別的機器上。
總結
本文從什麼是搜尋、普通搜尋面臨的問題和ES如何解決這些問題這幾個方面,讓大家快速理解ES搜尋引擎。
ES通過倒排索引提高了大資料下的資料查詢效率,通過分散式的方式實現了大資料的儲存與系統的高可用,採用ES搜尋引擎可滿足大資料量下的資料查詢場景,利用現有的框架可極大地縮小開發成本,提升使用者的使用體驗。
最後:
可以我的個人V:atstudy-js,可以免費領取一份10G軟體測試工程師面試寶典文件資料。以及相對應的視訊學習教程免費分享!,其中包括了有基礎知識、Linux必備、Mysql資料庫、抓包工具、介面測試工具、測試進階-Python程式設計、Web自動化測試、APP自動化測試、介面自動化測試、測試高階持續整合、測試架構開發測試框架、效能測試等。
這些測試資料,對於做【軟體測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31407649/viewspace-2884118/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ElasticSearch在數十億級別資料下,如何提高查詢效率?Elasticsearch
- 搜尋引擎es-分詞與搜尋分詞
- bt引擎-螞蟻磁力搜尋教程大全,如何使用搜尋引擎查詢磁力連結
- 改進 es 搜尋模組,像查詢資料庫一樣查詢 es,附完整小案例資料庫
- 搜尋/查詢
- Linux 命令列下搜尋工具大盤點,效率提高不止一倍!Linux命令列
- 查詢資料量的大小
- offset新探索:雙管齊下,加速大資料量查詢大資料
- 大資料量查詢容易OOM?試試MySQL流式查詢大資料OOMMySql
- 海量資料搜尋---搜尋引擎
- 效率躍升16倍!火山引擎ByteHouse助力銷售資料平臺複雜查詢效率大幅提高
- 【搜尋引擎】Solr全文檢索近實時查詢優化Solr優化
- 搜尋引擎-03-搜尋引擎原理
- MacOS使用搜尋功能查詢隱藏檔案的方法Mac
- 查詢資料庫的資料量的大小資料庫
- Elasticsearch:使用同義詞 synonyms 來提高搜尋效率Elasticsearch
- 51_初識搜尋引擎_上機動手實戰多搜尋條件組合查詢
- 談談MYSQL索引是如何提高查詢效率的MySql索引
- ubuntu 終端內查詢/搜尋Ubuntu
- 二分搜尋(折半查詢)
- ES(Elasticsearch)支援PB級全文搜尋引擎入門教程Elasticsearch
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(上篇)Elasticsearch
- Elasticsearch(ES)的高階搜尋(DSL搜尋)(下篇)Elasticsearch
- 過濾搜尋引擎的抓取資料
- 在 Spring Boot 中使用搜尋引擎 ElasticsearchSpring BootElasticsearch
- 用Python實現一個大資料搜尋引擎Python大資料
- 搜尋引擎優化內容及方法優化
- win10如何更換edge預設搜尋引擎_win10 edge更改搜尋引擎的方法Win10
- 最佳化拼多多關鍵詞搜尋介面:提高查詢響應速度的技巧
- QL Server 百萬級資料提高查詢速度的方法Server
- 高效的使用搜尋引擎
- python 寫的搜尋引擎Python
- MySQL 百萬級資料量分頁查詢方法及其最佳化MySql
- 陣列的查詢(搜尋):線性查詢和二分法查詢陣列
- Mysql中使用流式查詢避免資料量過大導致OOMMySqlOOM
- Nebula 基於 ElasticSearch 的全文搜尋引擎的文字搜尋Elasticsearch
- Python之 常用查詢演算法:最小項搜尋、順序搜尋、二分搜尋Python演算法
- 127盤搜網 網盤資源搜尋引擎