您現在的位置是:電腦技術吧?>? 編程技術 ??>??solr搜索引擎,搜索引擎和solr??>??正文詳情

solr搜索引擎,搜索引擎和solr

於山菡2019-12-18 17:42:39 人圍觀
簡介搭建搜索引擎Solr是一個獨立的企業搜索應用服務器,它提供了一個類似于web服務的API接口。用戶可以通過HTTP請求向搜索引擎服務器提交一定格式的XML文件,生成索引。大搜索引擎el

Solr是一個獨立的企業級搜索應用服務器,它對外提供類似于Web-service的API接口。

用戶可以通過http請求,向搜索引擎服務器提交一定格式的XML文件,生成索引.  互聯網創業中大部分人都是草根創業,這個時候沒有強勁的服務器,也沒有錢去買很昂貴的海量數據庫。

在這樣嚴峻的條件下,一批又一批的創業者從創業中獲得成功,這個和當前的開源技術、海量數據架構有著必不可分的關系。

比如我們使用mysql、nginx等開源軟件,通過架構和低成本服務器也可以搭建千萬級用戶訪問量的系統。

新浪微博、淘寶網、騰訊等大型互聯網公司都使用了很多開源免費系統搭建了他們的平臺。

所以,用什么沒關系,只要能夠在合理的情況下采用合理的解決方案。

  那怎么搭建一個好的系統架構呢?這個話題太大,這里主要說一下數據分流的方式。

比如我們的數據庫服務器只能存儲200個數據,突然要搞一個活動預估達到600個數據。

  可以采用兩種方式:橫向擴展或者縱向擴展。

  縱向擴展是升級服務器的硬件資源。

但是隨著機器的性能配置越高,價格越高,這個代價對于一般的小公司是承擔不起的。

  橫向擴展是采用多個廉價的機器提供服務。

這樣一個機器只能處理200個數據、3個機器就可以處理600個數據了,如果以后業務量增加還可以快速配置增加。

在大多數情況都選擇橫向擴展的方式。

如下圖:

  現在有個問題了,這600個數據如何路由到對應的機器。

需要考慮如果均衡分配,假設我們600個數據都是統一的自增id數據,從1~600,分成3 堆可以采用 id mod 3的方式。

其實在真實環境可能不是這種id是字符串。

需要把字符串轉變為hashcode再進行取模。

  目前看起來是不是解決我們的問題了,所有數據都很好的分發并且沒有達到系統的負載。

但如果我們的數據需要存儲、需要讀取就沒有這么容易了。

業務增多怎么辦,大家按照上面的橫向擴展知道需要增加一臺服務器。

但是就是因為增加這一臺服務器帶來了一些問題。

看下面這個例子,一共9個數,需要放到2臺機器(1、2)上。

各個機器存放為:1號機器存放1、3、5、7、9 ,2號機器存放 2、4、6、8。

如果擴展一臺機器3如何,數據就要發生大遷移,1號機器存放1、4、7, 2號機器存放2、5、8, 3號機器存放3、6、9。

如圖:

  從圖中可以看出 1號機器的3、5、9遷移出去了、2好機器的4、6遷移出去了,按照新的秩序再重新分配了一遍。

數據量小的話重新分配一遍代價并不大,但如果我們擁有上億、上T級的數據這個操作成本是相當的高,少則幾個小時多則數天。

并且遷移的時候原數據庫機器負載比較高,那大家就有疑問了,是不是這種水平擴展的架構方式不太合理?  華麗分割線  一致性hash就是在這種應用背景提出來的,現在被廣泛應用于分布式緩存,比如memcached。

下面簡單介紹下一致性hash的基本原理。

最早的版本 http://dl.acm.org/citation.cfm?id=258660。

國內網上有很多文章都寫的比較好。

如: http://blog.csdn.net/x15594/article/details/6270242  下面簡單舉個例子來說明一致性hash。

  準備:1、2、3 三臺機器  還有待分配的9個數 1、2、3、4、5、6、7、8、9  一致性hash算法架構  步驟  一、構造出來 2的32次方 個虛擬節點出來,因為計算機里面是01的世界,進行劃分時采用2的次方數據容易分配均衡。

另 2的32次方是42億,我們就算有超大量的服務器也不可能超過42億臺吧,擴展和均衡性都保證了。

  二、將三臺機器分別取IP進行hashcode計算(這里也可以取hostname,只要能夠唯一區別各個機器就可以了),然后映射到2的32次方上去。

比如1號機器算出來的hashcode并且mod (2^32)為 123(這個是虛構的),2號機器算出來的值為 2300420,3號機器算出來為 90203920。

這樣三臺機器就映射到了這個虛擬的42億環形結構的節點上了。

  三、將數據(1-9)也用同樣的方法算出hashcode并對42億取模將其配置到環形節點上。

假設這幾個節點算出來的值為 1:10,2:23564,3:57,4:6984,5:5689632,6:86546845,7:122,8:3300689,9:135468。

可以看出 1、3、7小于123, 2、4、9 小于 2300420 大于 123, 5、6、8 大于 2300420 小于90203920。

從數據映射到的位置開始順時針查找,將數據保存到找到的第一個Cache節點上。

如果超過2^32仍然找不到Cache節點,就會保存到第一個Cache節點上。

也就是1、3、7將分配到1號機器,2、4、9將分配到2號機器,5、6、8將分配到3號機器。

  這個時候大家可能會問,我到現在沒有看見一致性hash帶來任何好處,比傳統的取模還增加了復雜度。

現在馬上來做一些關鍵性的處理,比如我們增加一臺機器。

按照原來我們需要把所有的數據重新分配到四臺機器。

一致性hash怎么做呢?現在4號機器加進來,他的hash值算出來取模后是12302012。

5、8 大于2300420 小于12302012 ,6 大于 12302012 小于90203920 。

這樣調整的只是把5、8從3號機器刪除,4號機器中加入 5、8。

  同理,刪除機器怎么做呢,假設2號機器掛掉,受影響的也只是2號機器上的數據被遷移到離它節點,上圖為4號機器。

  大家應該明白一致性hash的基本原理了吧。

不過這種算法還是有缺陷,比如在機器節點比較少、數據量大的時候,數據的分布可能不是很均衡,就會導致其中一臺服務器的數據比其他機器多很多。

為了解決這個問題,需要引入虛擬服務器節點的機制。

如我們一共有只有三臺機器,1、2、3。

但是實際又不可能有這么多機器怎么解決呢?把 這些機器各自虛擬化出來3臺機器,也就是 1a 1b 1c 2a 2b 2c 3a 3b 3c,這樣就變成了9臺機器。

實際 1a 1b 1c 還是對應1。

但是實際分布到環形節點就變成了9臺機器。

數據分布也就能夠更分散一點。

如圖:

  寫了這么多一致性hash,這個和分布式搜索有什么半點關系?我們現在使用solr4搭建了分布式搜索,測試了基于solrcloud的分布式平臺提交20條數據居然需要幾十秒,所以就廢棄了solrcloud。

采用自己hack solr平臺,不用zookeeper做分布式一致性管理平臺,自己管理數據的分發機制。

既然需要自己管理數據的分發,就需要考慮到索引的創建,索引的更新。

這樣我們的一致性hash也就用上了。

整體架構如下圖:

  建立和更新需要維持機器的位置,能夠根據數據的key找到對應的數據分發并更新。

這里需要考慮的是如何高效、可靠的把數據建立、更新到索引里。

  備份服務器防止建立服務器掛掉,可以根據備份服務器快速恢復。

  讀服務器主要做讀寫分離使用,防止寫索引影響查詢數據。

  集群管理服務器管理整個集群內的服務器狀態、告警。

  整個集群隨著業務增多還可以按照數據的類型劃分,比如用戶、微博等。

每個類型按照上圖架構搭建,就可以滿足一般性能的分布式搜索。

版權聲明:本文由 於山菡 整理編輯。

原標題:solr為什么搜索快,電商搜索引擎solr

轉載注明出處:http://www.dn9ww09s.icu/program/15537.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • 導入導出是什么意思,導入導出聯系人怎么用

    導入導出是什么意思,導入導出聯系人怎么用 相關圖片mysql數據導入導出Linux系統引導Oracle自引導以根用戶身份登錄:Su-root 1,Linux下Oracle的dbstart和dbshut不響應:modify Oracljava導入導出...

  • git使用教程圖文詳解,github使用教程圖文詳解

    git使用教程圖文詳解,github使用教程圖文詳解 相關圖片tortoisesvn使用教程Android Studio 1.0的官方版本終于發布了!谷歌表示,Android Studio 1.0可以讓開發人員更快、更高效,它可以取代eclipse,并git管理工具使用教程...

  • 文檔分頁怎么設置,word顯示分頁效果

    文檔分頁怎么設置,word顯示分頁效果 相關圖片如何取消分頁預覽我認為最近幾天學習jsp非常好。我寫了一個尋呼類與您共享。同時,我想征求專家的意見。第1部分:db.mysqlconn數據庫鏈接類/**************電子表格分頁設置...

  • 怎么讓復選框選中,設置復選框為選中狀態

    怎么讓復選框選中,設置復選框為選中狀態 相關圖片復選框選中事件本文的示例描述了jQuery切換所有復選框的方法。與您分享以供參考。具體如下:該代碼非常簡單實用。切換是否通過鏈接選中所有復選框?123456var tog=f復選框默認被選中...

  • notification哪個好用,notification13

    notification哪個好用,notification13 相關圖片prenotification委托、通知和KVO的功能是相似的。在實際編程中如何選擇這些方法?在開發IOS應用程序時,我們經常遇到一個常見的問題:如何在控制器之間進行通信而不發生過度耦合。I...

  • js獲取php的變量,php獲取變量類型

    js獲取php的變量,php獲取變量類型 相關圖片php設置變量本文通過一個實例說明PHP如何獲取系統變量。與您分享以供參考。具體如下:這里我們通過一些PHP內置函數獲取各種系統變量。?123456789$v=get_def獲取網站內容到php變量...

  • 什么是數據模型,數據模型反映的是

    什么是數據模型,數據模型反映的是 相關圖片數據庫三種數據模型在本節中,您將向電影模型添加驗證邏輯。并確保在用戶創建或編輯電影時強制執行這些驗證規則。拒絕重復dryasp.net MVC的核心設計原則之一是:不要重復自己。什么...

  • 兩種方式三個一些,議論方式兩種方式

    兩種方式三個一些,議論方式兩種方式 相關圖片表用兩種方式是怎么表示%dimdd,connstr dd=data.mdbconnstr=provider=microsoft.jet.oledb.4.0;datasource=se分包分為什么兩種方式...

  • detain和retain,retain和sustain

    detain和retain,retain和sustain 相關圖片certain原子和非原子用于確定編譯器生成的getter和setter是否是原子操作。當atomic設置成員變量的@property屬性時,它默認為atomic,提供多線程retain用法...

  • 檢索項目是什么意思,多媒體檢索 項目

    檢索項目是什么意思,多媒體檢索 項目 相關圖片大規模檢索為了提高在微軟Access項目中使用表單或數據表中的數據時的性能,可以設置從SQLServer數據庫下載的最大記錄數。一。在導航模式下打開數據表或窗體。2。請執檢索啥意思...

熱評文章

  • SQL中MINUS的用法,sql中iif函數的用法

    SQL中MINUS的用法,sql中iif函數的用法 相關圖片grant在數據庫中用法對于XML路徑:有些人可能知道有些人可能不知道,但實際上,它是以XML形式顯示查詢結果集。有了它,我們可以簡化查詢語句,以實現一些可能需要在之前的功能性實...

  • 常見編程術語,編程專業術語

    常見編程術語,編程專業術語 相關圖片計算機編程中常用的術語php什么意思?很多行外人看這三個會毫無頭緒完全不知道php是什么,本文小編就為大家詳細介紹一下php的含義,帶來編程術語php百科解釋。  php什么意思?編什么...

  • ip數據庫有什么用,連接數據庫IP

    ip數據庫有什么用,連接數據庫IP 相關圖片mysql數據庫ip地址本文主要介紹Python訪問純IP數據庫腳本共享,本文直接給出了實現代碼,可以參考以下項目的需要,通過IP地址來確定客戶端是Netcom還是電信。我從我的同事那sql數據庫...

  • 數據庫存取錯誤,java存取數據庫的包

    數據庫存取錯誤,java存取數據庫的包 相關圖片數據庫特點ADO訪問數據庫時是否顯示頁面?如果你目前已經在很多網站上使用過電子公告板程序,你應該知道,為了提高頁面的閱讀速度,電子公告板程序一般不會把所有的帖子都列在...

  • jsp多選框,jsp中接收多選框數組

    jsp多選框,jsp中接收多選框數組 相關圖片jsp復選框代碼在struts 1項目中,JSP頁面的多選框內容被轉移到下一頁。當涉及到修改表信息(或用戶信息)時,很難在一開始就知道如何實踐這個函數,很多JS代碼都是為了勉強jsp怎么獲...

  • 有愛插件字符串,防騎WA插件字符串

    有愛插件字符串,防騎WA插件字符串 相關圖片wa字符串導入不進去本文主要介紹了亞音速3.0插件更新字符串過長引起的異常修復方法。對于您的朋友,請參考公司客服最近提交的一個bug。更新產品詳細信息時,其中一些無法更新。他...

  • C內核開發,IDEA可以開發C號碼

    C內核開發,IDEA可以開發C號碼 相關圖片linux系統下C開發一。Cocoapods是一個運行在ruby中的軟件,可能需要幾分鐘才能安裝。安裝名稱是sudo gem install cocopods 2。如果要為每個第三方開源C開發工具...

  • 項目優化是什么,項目優化分析

    項目優化是什么,項目優化分析 相關圖片流程優化方案本文演示如何合并和壓縮基于requirejs的項目。在本文中,我將使用一些艱苦的工具,包括node.js。所以如果你手頭沒有node.js,你可以在這里下載一個多目標優化...

  • oracle數據庫常用命令,Oracle PlSQL常用命令

    oracle數據庫常用命令,Oracle PlSQL常用命令 相關圖片oracle命令大全1)檢查集群狀態:[[email protected]~]$crsctl check cluster crs-4537:cluster readyservices is onoracle基本命令...

  • 宏數據庫,數據庫中的宏

    宏數據庫,數據庫中的宏 相關圖片含有宏的數據庫如果有許多宏,將它們分組到不同的宏組中可以幫助方便地管理數據庫。創建表單并添加4個按鈕(如果出現“按鈕向導”對話框,請選擇“取消”)。根據創建宏的方法...

關注微信

变脸官网查询