hash和solr在海量數(shù)據(jù)分布式搜索引擎中的應(yīng)用教程_MySQL教程
推薦:23道安全門加鑄MySQL數(shù)據(jù)庫(kù)使用MySQL,安全問(wèn)題不能不注意。以下是MySQL提示的23個(gè)注意事項(xiàng): 1.如果客戶端和服務(wù)器端的連接需要跨越并通過(guò)不可信任的網(wǎng)絡(luò),那么就需要使用SSH隧道來(lái)加密該連接的通信。 2.用set password語(yǔ)句來(lái)修改用戶的密碼,三個(gè)步驟,先mysql -u root登陸數(shù)據(jù)庫(kù)系統(tǒng),然后mys
Solr是一個(gè)獨(dú)立的企業(yè)級(jí)搜索應(yīng)用服務(wù)器,它對(duì)外提供類似于Web-service的API接口。用戶可以通過(guò)http請(qǐng)求,向搜索引擎服務(wù)器提交一定格式的XML文件,生成索引.
互聯(lián)網(wǎng)創(chuàng)業(yè)中大部分人都是草根創(chuàng)業(yè),這個(gè)時(shí)候沒(méi)有強(qiáng)勁的服務(wù)器,也沒(méi)有錢去買很昂貴的海量數(shù)據(jù)庫(kù)。在這樣嚴(yán)峻的條件下,一批又一批的創(chuàng)業(yè)者從創(chuàng)業(yè)中獲得成功,這個(gè)和當(dāng)前的開(kāi)源技術(shù)、海量數(shù)據(jù)架構(gòu)有著必不可分的關(guān)系。比如我們使用mysql、nginx等開(kāi)源軟件,通過(guò)架構(gòu)和低成本服務(wù)器也可以搭建千萬(wàn)級(jí)用戶訪問(wèn)量的系統(tǒng)。新浪微博、淘寶網(wǎng)、騰訊等大型互聯(lián)網(wǎng)公司都使用了很多開(kāi)源免費(fèi)系統(tǒng)搭建了他們的平臺(tái)。所以,用什么沒(méi)關(guān)系,只要能夠在合理的情況下采用合理的解決方案。
那怎么搭建一個(gè)好的系統(tǒng)架構(gòu)呢?這個(gè)話題太大,這里主要說(shuō)一下數(shù)據(jù)分流的方式。比如我們的數(shù)據(jù)庫(kù)服務(wù)器只能存儲(chǔ)200個(gè)數(shù)據(jù),突然要搞一個(gè)活動(dòng)預(yù)估達(dá)到600個(gè)數(shù)據(jù)。
可以采用兩種方式:橫向擴(kuò)展或者縱向擴(kuò)展。
縱向擴(kuò)展是升級(jí)服務(wù)器的硬件資源。但是隨著機(jī)器的性能配置越高,價(jià)格越高,這個(gè)代價(jià)對(duì)于一般的小公司是承擔(dān)不起的。
橫向擴(kuò)展是采用多個(gè)廉價(jià)的機(jī)器提供服務(wù)。這樣一個(gè)機(jī)器只能處理200個(gè)數(shù)據(jù)、3個(gè)機(jī)器就可以處理600個(gè)數(shù)據(jù)了,如果以后業(yè)務(wù)量增加還可以快速配置增加。在大多數(shù)情況都選擇橫向擴(kuò)展的方式。如下圖:


現(xiàn)在有個(gè)問(wèn)題了,這600個(gè)數(shù)據(jù)如何路由到對(duì)應(yīng)的機(jī)器。需要考慮如果均衡分配,假設(shè)我們600個(gè)數(shù)據(jù)都是統(tǒng)一的自增id數(shù)據(jù),從1~600,分成3 堆可以采用 id mod 3的方式。其實(shí)在真實(shí)環(huán)境可能不是這種id是字符串。需要把字符串轉(zhuǎn)變?yōu)閔ashcode再進(jìn)行取模。
目前看起來(lái)是不是解決我們的問(wèn)題了,所有數(shù)據(jù)都很好的分發(fā)并且沒(méi)有達(dá)到系統(tǒng)的負(fù)載。但如果我們的數(shù)據(jù)需要存儲(chǔ)、需要讀取就沒(méi)有這么容易了。業(yè)務(wù)增多怎么辦,大家按照上面的橫向擴(kuò)展知道需要增加一臺(tái)服務(wù)器。但是就是因?yàn)樵黾舆@一臺(tái)服務(wù)器帶來(lái)了一些問(wèn)題�?聪旅孢@個(gè)例子,一共9個(gè)數(shù),需要放到2臺(tái)機(jī)器(1、2)上。各個(gè)機(jī)器存放為:1號(hào)機(jī)器存放1、3、5、7、9 ,2號(hào)機(jī)器存放 2、4、6、8。如果擴(kuò)展一臺(tái)機(jī)器3如何,數(shù)據(jù)就要發(fā)生大遷移,1號(hào)機(jī)器存放1、4、7, 2號(hào)機(jī)器存放2、5、8, 3號(hào)機(jī)器存放3、6、9。如圖:

從圖中可以看出 1號(hào)機(jī)器的3、5、9遷移出去了、2好機(jī)器的4、6遷移出去了,按照新的秩序再重新分配了一遍。數(shù)據(jù)量小的話重新分配一遍代價(jià)并不大,但如果我們擁有上億、上T級(jí)的數(shù)據(jù)這個(gè)操作成本是相當(dāng)?shù)母�,少則幾個(gè)小時(shí)多則數(shù)天。并且遷移的時(shí)候原數(shù)據(jù)庫(kù)機(jī)器負(fù)載比較高,那大家就有疑問(wèn)了,是不是這種水平擴(kuò)展的架構(gòu)方式不太合理?
—————————–華麗分割線—————————————
一致性hash就是在這種應(yīng)用背景提出來(lái)的,現(xiàn)在被廣泛應(yīng)用于分布式緩存,比如memcached。下面簡(jiǎn)單介紹下一致性hash的基本原理。最早的版本 http://dl.acm.org/citation.cfm?id=258660。國(guó)內(nèi)網(wǎng)上有很多文章都寫的比較好。如: http://blog.csdn.net/x15594/article/details/6270242
下面簡(jiǎn)單舉個(gè)例子來(lái)說(shuō)明一致性hash。
準(zhǔn)備:1、2、3 三臺(tái)機(jī)器
還有待分配的9個(gè)數(shù) 1、2、3、4、5、6、7、8、9
一致性hash算法架構(gòu)
步驟
一、構(gòu)造出來(lái) 2的32次方 個(gè)虛擬節(jié)點(diǎn)出來(lái),因?yàn)橛?jì)算機(jī)里面是01的世界,進(jìn)行劃分時(shí)采用2的次方數(shù)據(jù)容易分配均衡。另 2的32次方是42億,我們就算有超大量的服務(wù)器也不可能超過(guò)42億臺(tái)吧,擴(kuò)展和均衡性都保證了。

二、將三臺(tái)機(jī)器分別取IP進(jìn)行hashcode計(jì)算(這里也可以取hostname,只要能夠唯一區(qū)別各個(gè)機(jī)器就可以了),然后映射到2的32次方上去。比如1號(hào)機(jī)器算出來(lái)的hashcode并且mod (2^32)為 123(這個(gè)是虛構(gòu)的),2號(hào)機(jī)器算出來(lái)的值為 2300420,3號(hào)機(jī)器算出來(lái)為 90203920。這樣三臺(tái)機(jī)器就映射到了這個(gè)虛擬的42億環(huán)形結(jié)構(gòu)的節(jié)點(diǎn)上了。

三、將數(shù)據(jù)(1-9)也用同樣的方法算出hashcode并對(duì)42億取模將其配置到環(huán)形節(jié)點(diǎn)上。假設(shè)這幾個(gè)節(jié)點(diǎn)算出來(lái)的值為 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ù)映射到的位置開(kāi)始順時(shí)針查找,將數(shù)據(jù)保存到找到的第一個(gè)Cache節(jié)點(diǎn)上。如果超過(guò)2^32仍然找不到Cache節(jié)點(diǎn),就會(huì)保存到第一個(gè)Cache節(jié)點(diǎn)上。也就是1、3、7將分配到1號(hào)機(jī)器,2、4、9將分配到2號(hào)機(jī)器,5、6、8將分配到3號(hào)機(jī)器。

這個(gè)時(shí)候大家可能會(huì)問(wèn),我到現(xiàn)在沒(méi)有看見(jiàn)一致性hash帶來(lái)任何好處,比傳統(tǒng)的取模還增加了復(fù)雜度。現(xiàn)在馬上來(lái)做一些關(guān)鍵性的處理,比如我們?cè)黾右慌_(tái)機(jī)器。按照原來(lái)我們需要把所有的數(shù)據(jù)重新分配到四臺(tái)機(jī)器。一致性hash怎么做呢?現(xiàn)在4號(hào)機(jī)器加進(jìn)來(lái),他的hash值算出來(lái)取模后是12302012。 5、8 大于2300420 小于12302012 ,6 大于 12302012 小于90203920 。這樣調(diào)整的只是把5、8從3號(hào)機(jī)器刪除,4號(hào)機(jī)器中加入 5、8。

同理,刪除機(jī)器怎么做呢,假設(shè)2號(hào)機(jī)器掛掉,受影響的也只是2號(hào)機(jī)器上的數(shù)據(jù)被遷移到離它節(jié)點(diǎn),上圖為4號(hào)機(jī)器。

分享:MySQL 5.0 數(shù)據(jù)庫(kù)新特性的存儲(chǔ)過(guò)程當(dāng)你提交一個(gè)查詢的時(shí)候,MySQL會(huì)分析它,看是否可以做一些優(yōu)化使處理該查詢的速度更快。這一部分將介紹查詢優(yōu)化器是如何工作的。如果你想知道MySQL采用的優(yōu)化手段,可以查看MySQL參考手冊(cè)。 當(dāng)然,MySQL查詢優(yōu)化器也利用了索引,但是它也使用了其它一些信息。例如,如
- 23道安全門加鑄MySQL數(shù)據(jù)庫(kù)
- MySQL 5.0 數(shù)據(jù)庫(kù)新特性的存儲(chǔ)過(guò)程
- MySql管理的一點(diǎn)心得
- mysql導(dǎo)入數(shù)據(jù)庫(kù)文件最大限制的修改方法
- Mysql存儲(chǔ)引擎InnoDB和Myisam的六大區(qū)別
- Mysql運(yùn)行環(huán)境優(yōu)化(Linux系統(tǒng))
- MySQL查詢的性能優(yōu)化基礎(chǔ)教程
- MySQL 在windows上的安裝詳細(xì)介紹
- sql server 2005時(shí)發(fā)生18452錯(cuò)誤解決方法
- MySQL字段的取值范圍
- mysql_unbuffered_query與mysql_query的區(qū)別
- mysql 復(fù)制表數(shù)據(jù),表結(jié)構(gòu)的3種方法
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
猜你也喜歡看這些
- 三個(gè)SQL視圖查出所有SQL Server數(shù)據(jù)庫(kù)字典
- 解決SQL Server數(shù)據(jù)庫(kù)權(quán)限沖突的三大妙招
- SQL Server數(shù)據(jù)庫(kù)增強(qiáng)版?zhèn)浞蒹w驗(yàn)
- 循序漸進(jìn)講解數(shù)據(jù)表的十二個(gè)設(shè)計(jì)原則
- 談SQL Data Services將成為云中完整的數(shù)據(jù)庫(kù)
- 為何把你的數(shù)據(jù)庫(kù)置于版本控制之下
- char、varchar、text和nchar、nvarchar、ntext的區(qū)別
- mssql2005數(shù)據(jù)庫(kù)鏡像搭建教程
- 用一條sql取得第10到第20條的記錄
- 解讀SQL Server數(shù)據(jù)庫(kù)備份的方法
- 相關(guān)鏈接:
復(fù)制本頁(yè)鏈接| 搜索hash和solr在海量數(shù)據(jù)分布式搜索引擎中的應(yīng)用教程
- 教程說(shuō)明:
MySQL教程-hash和solr在海量數(shù)據(jù)分布式搜索引擎中的應(yīng)用教程
。