hash和solr在海量數(shù)據(jù)分布式搜索引擎中的應(yīng)用教程_MySQL教程
推薦:23道安全門加鑄MySQL數(shù)據(jù)庫使用MySQL,安全問題不能不注意。以下是MySQL提示的23個注意事項: 1.如果客戶端和服務(wù)器端的連接需要跨越并通過不可信任的網(wǎng)絡(luò),那么就需要使用SSH隧道來加密該連接的通信。 2.用set password語句來修改用戶的密碼,三個步驟,先mysql -u root登陸數(shù)據(jù)庫系統(tǒng),然后mys
Solr是一個獨立的企業(yè)級搜索應(yīng)用服務(wù)器,它對外提供類似于Web-service的API接口。用戶可以通過http請求,向搜索引擎服務(wù)器提交一定格式的XML文件,生成索引.
互聯(lián)網(wǎng)創(chuàng)業(yè)中大部分人都是草根創(chuàng)業(yè),這個時候沒有強勁的服務(wù)器,也沒有錢去買很昂貴的海量數(shù)據(jù)庫。在這樣嚴峻的條件下,一批又一批的創(chuàng)業(yè)者從創(chuàng)業(yè)中獲得成功,這個和當前的開源技術(shù)、海量數(shù)據(jù)架構(gòu)有著必不可分的關(guān)系。比如我們使用mysql、nginx等開源軟件,通過架構(gòu)和低成本服務(wù)器也可以搭建千萬級用戶訪問量的系統(tǒng)。新浪微博、淘寶網(wǎng)、騰訊等大型互聯(lián)網(wǎng)公司都使用了很多開源免費系統(tǒng)搭建了他們的平臺。所以,用什么沒關(guān)系,只要能夠在合理的情況下采用合理的解決方案。
那怎么搭建一個好的系統(tǒng)架構(gòu)呢?這個話題太大,這里主要說一下數(shù)據(jù)分流的方式。比如我們的數(shù)據(jù)庫服務(wù)器只能存儲200個數(shù)據(jù),突然要搞一個活動預(yù)估達到600個數(shù)據(jù)。
可以采用兩種方式:橫向擴展或者縱向擴展。
縱向擴展是升級服務(wù)器的硬件資源。但是隨著機器的性能配置越高,價格越高,這個代價對于一般的小公司是承擔(dān)不起的。
橫向擴展是采用多個廉價的機器提供服務(wù)。這樣一個機器只能處理200個數(shù)據(jù)、3個機器就可以處理600個數(shù)據(jù)了,如果以后業(yè)務(wù)量增加還可以快速配置增加。在大多數(shù)情況都選擇橫向擴展的方式。如下圖:
現(xiàn)在有個問題了,這600個數(shù)據(jù)如何路由到對應(yīng)的機器。需要考慮如果均衡分配,假設(shè)我們600個數(shù)據(jù)都是統(tǒng)一的自增id數(shù)據(jù),從1~600,分成3 堆可以采用 id mod 3的方式。其實在真實環(huán)境可能不是這種id是字符串。需要把字符串轉(zhuǎn)變?yōu)閔ashcode再進行取模。
目前看起來是不是解決我們的問題了,所有數(shù)據(jù)都很好的分發(fā)并且沒有達到系統(tǒng)的負載。但如果我們的數(shù)據(jù)需要存儲、需要讀取就沒有這么容易了。業(yè)務(wù)增多怎么辦,大家按照上面的橫向擴展知道需要增加一臺服務(wù)器。但是就是因為增加這一臺服務(wù)器帶來了一些問題。看下面這個例子,一共9個數(shù),需要放到2臺機器(1、2)上。各個機器存放為:1號機器存放1、3、5、7、9 ,2號機器存放 2、4、6、8。如果擴展一臺機器3如何,數(shù)據(jù)就要發(fā)生大遷移,1號機器存放1、4、7, 2號機器存放2、5、8, 3號機器存放3、6、9。如圖:
從圖中可以看出 1號機器的3、5、9遷移出去了、2好機器的4、6遷移出去了,按照新的秩序再重新分配了一遍。數(shù)據(jù)量小的話重新分配一遍代價并不大,但如果我們擁有上億、上T級的數(shù)據(jù)這個操作成本是相當?shù)母撸賱t幾個小時多則數(shù)天。并且遷移的時候原數(shù)據(jù)庫機器負載比較高,那大家就有疑問了,是不是這種水平擴展的架構(gòu)方式不太合理?
—————————–華麗分割線—————————————
一致性hash就是在這種應(yīng)用背景提出來的,現(xiàn)在被廣泛應(yīng)用于分布式緩存,比如memcached。下面簡單介紹下一致性hash的基本原理。最早的版本 http://dl.acm.org/citation.cfm?id=258660。國內(nèi)網(wǎng)上有很多文章都寫的比較好。如: http://blog.csdn.net/x15594/article/details/6270242
下面簡單舉個例子來說明一致性hash。
準備:1、2、3 三臺機器
還有待分配的9個數(shù) 1、2、3、4、5、6、7、8、9
一致性hash算法架構(gòu)
步驟
一、構(gòu)造出來 2的32次方 個虛擬節(jié)點出來,因為計算機里面是01的世界,進行劃分時采用2的次方數(shù)據(jù)容易分配均衡。另 2的32次方是42億,我們就算有超大量的服務(wù)器也不可能超過42億臺吧,擴展和均衡性都保證了。
二、將三臺機器分別取IP進行hashcode計算(這里也可以取hostname,只要能夠唯一區(qū)別各個機器就可以了),然后映射到2的32次方上去。比如1號機器算出來的hashcode并且mod (2^32)為 123(這個是虛構(gòu)的),2號機器算出來的值為 2300420,3號機器算出來為 90203920。這樣三臺機器就映射到了這個虛擬的42億環(huán)形結(jié)構(gòu)的節(jié)點上了。
三、將數(shù)據(jù)(1-9)也用同樣的方法算出hashcode并對42億取模將其配置到環(huán)形節(jié)點上。假設(shè)這幾個節(jié)點算出來的值為 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。從數(shù)據(jù)映射到的位置開始順時針查找,將數(shù)據(jù)保存到找到的第一個Cache節(jié)點上。如果超過2^32仍然找不到Cache節(jié)點,就會保存到第一個Cache節(jié)點上。也就是1、3、7將分配到1號機器,2、4、9將分配到2號機器,5、6、8將分配到3號機器。
這個時候大家可能會問,我到現(xiàn)在沒有看見一致性hash帶來任何好處,比傳統(tǒng)的取模還增加了復(fù)雜度。現(xiàn)在馬上來做一些關(guān)鍵性的處理,比如我們增加一臺機器。按照原來我們需要把所有的數(shù)據(jù)重新分配到四臺機器。一致性hash怎么做呢?現(xiàn)在4號機器加進來,他的hash值算出來取模后是12302012。 5、8 大于2300420 小于12302012 ,6 大于 12302012 小于90203920 。這樣調(diào)整的只是把5、8從3號機器刪除,4號機器中加入 5、8。
同理,刪除機器怎么做呢,假設(shè)2號機器掛掉,受影響的也只是2號機器上的數(shù)據(jù)被遷移到離它節(jié)點,上圖為4號機器。
分享:MySQL 5.0 數(shù)據(jù)庫新特性的存儲過程當你提交一個查詢的時候,MySQL會分析它,看是否可以做一些優(yōu)化使處理該查詢的速度更快。這一部分將介紹查詢優(yōu)化器是如何工作的。如果你想知道MySQL采用的優(yōu)化手段,可以查看MySQL參考手冊。 當然,MySQL查詢優(yōu)化器也利用了索引,但是它也使用了其它一些信息。例如,如
- 23道安全門加鑄MySQL數(shù)據(jù)庫
- MySQL 5.0 數(shù)據(jù)庫新特性的存儲過程
- MySql管理的一點心得
- mysql導(dǎo)入數(shù)據(jù)庫文件最大限制的修改方法
- Mysql存儲引擎InnoDB和Myisam的六大區(qū)別
- Mysql運行環(huán)境優(yōu)化(Linux系統(tǒng))
- MySQL查詢的性能優(yōu)化基礎(chǔ)教程
- MySQL 在windows上的安裝詳細介紹
- sql server 2005時發(fā)生18452錯誤解決方法
- MySQL字段的取值范圍
- mysql_unbuffered_query與mysql_query的區(qū)別
- mysql 復(fù)制表數(shù)據(jù),表結(jié)構(gòu)的3種方法
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
猜你也喜歡看這些
- 三個SQL視圖查出所有SQL Server數(shù)據(jù)庫字典
- 解決SQL Server數(shù)據(jù)庫權(quán)限沖突的三大妙招
- SQL Server數(shù)據(jù)庫增強版?zhèn)浞蒹w驗
- 循序漸進講解數(shù)據(jù)表的十二個設(shè)計原則
- 談SQL Data Services將成為云中完整的數(shù)據(jù)庫
- 為何把你的數(shù)據(jù)庫置于版本控制之下
- char、varchar、text和nchar、nvarchar、ntext的區(qū)別
- mssql2005數(shù)據(jù)庫鏡像搭建教程
- 用一條sql取得第10到第20條的記錄
- 解讀SQL Server數(shù)據(jù)庫備份的方法
- 相關(guān)鏈接:
- 教程說明:
MySQL教程-hash和solr在海量數(shù)據(jù)分布式搜索引擎中的應(yīng)用教程。