老師提供課程mysql4cache與search_第1頁(yè)
老師提供課程mysql4cache與search_第2頁(yè)
老師提供課程mysql4cache與search_第3頁(yè)
老師提供課程mysql4cache與search_第4頁(yè)
老師提供課程mysql4cache與search_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Cache Search 尋求數(shù)據(jù)庫(kù)本身之外的 Cache 和 Search 來(lái)解決數(shù)據(jù)本身的擴(kuò)展性,已經(jīng)成為目 Lucene MySQL 數(shù)據(jù)庫(kù)更好的結(jié)合,就有多種思路存在。可Cache Search 的數(shù)據(jù)通訊(數(shù)據(jù)更新),也可以在應(yīng)用程序端直接實(shí)現(xiàn) Cache 與 Search 的數(shù)據(jù)更新。數(shù)據(jù)庫(kù)和 Cache 與 Search 可以處于整體架構(gòu)中不合理利用第 Cache 解決方目前比較流行的第 Cache 解決方案主要有基于對(duì)象的分布式內(nèi)存 Cache Memcached 和數(shù)據(jù)庫(kù)編程庫(kù)BerkeleyDB 這兩種。下面我將分別針對(duì)這兩種解決方 通信協(xié)議簡(jiǎn)單,API Cache lib

2、event BSD 們重點(diǎn)看看如何通過(guò) Memcached 來(lái)幫助Memcached Memcached 有一個(gè)Cache MySQL 數(shù)據(jù)庫(kù)Cache 如果僅僅只是系統(tǒng)通過(guò)Memcached 來(lái)提升系統(tǒng)性能,作為一個(gè)Cache ,那么 的是需要通過(guò)應(yīng)用程序來(lái) Memcached 中的數(shù)據(jù)與數(shù)據(jù)庫(kù)中數(shù)據(jù)的同步更新。這時(shí)候的 Memcached 基本可以理解為比 MySQL 數(shù)據(jù)庫(kù)更為前端的一個(gè) Cache 層。如果 Memcached 作為應(yīng)用系統(tǒng)的一個(gè)數(shù)據(jù)Cache 服務(wù),那么對(duì)于MySQL 數(shù)據(jù) Memcached Cache INSERTUPDATE DELETE則需要在 UPDATE

3、或者 DELETE MySQL 中數(shù)據(jù)的同時(shí),刪除 Memcached 中的數(shù)據(jù),以此保 證整體數(shù)據(jù)的一致性。而所有的讀請(qǐng)求首先會(huì)發(fā)往 Memcached 中,如果到數(shù)據(jù)則直接返回,如果沒(méi)有到數(shù)據(jù),則再到MySQL Slaves 中數(shù)據(jù),并將得到的數(shù)據(jù)寫(xiě)Memcached CacheMySQL 數(shù)MySQL 首先看看如何將 Memcached 和 MySQL 數(shù)據(jù)庫(kù)整一個(gè)整體來(lái)對(duì)外提供服務(wù)吧。一般來(lái)說(shuō),有兩種方式將 Memcached 和 MySQL 數(shù)據(jù)庫(kù)整一個(gè)整體來(lái)對(duì)外提供數(shù)據(jù)Memcached MySQL MySQL Server 的緩存大小,另一種是通過(guò) MySQL 的 UDF 來(lái)和

4、Memcached 進(jìn)行數(shù)據(jù)通信,和更新 Memcached 中的數(shù)據(jù),而應(yīng)用端則直接通過(guò) Memcached 來(lái)數(shù)據(jù)。過(guò)對(duì)應(yīng)用程序進(jìn)行改造利用上數(shù)據(jù)庫(kù)之外的 Cache 的場(chǎng)景。目 Waffle Grid 就是需要借助的外部力量。IWaffle Grid 是國(guó)外的幾位 DBA 在工作之余突發(fā)奇想出來(lái)的一個(gè)點(diǎn)子:既然 PC Server 的低廉成本如此的吸引,而其ScaleUp 的能力又很難有一個(gè)較大的突破,何Memcached PCServer WaffleGrid MySQL Memcached雙雙開(kāi)源的特性,結(jié)合 Memcached 通信協(xié)議簡(jiǎn)單的特點(diǎn),將 Memcached 成功實(shí)現(xiàn)成

5、為 MySQL 主機(jī)的外部“二級(jí)緩存”,目前僅支持用于 Innodb 的 Buffer Pool。WaffleGrid Innodb 據(jù)之前,先通過(guò)Memcached 的通信API 接口嘗試從Memcached 中相應(yīng)的緩存數(shù)據(jù)(我們稱(chēng)之為 Remote Buffer 吧),只有在 Remote Buffer 中也不存在需要的數(shù)據(jù)的時(shí)候, Innodb 才會(huì)磁盤(pán)文件來(lái)數(shù)據(jù)。而且,只有處于 Innodb Buffer pool 中的 LRUList 中的數(shù)據(jù)會(huì)被發(fā)送到 Remote Buffer Pool 中,而這些數(shù)據(jù)一旦被修改,就會(huì) Innodb就會(huì)將之移入 FLUSH List ,Waff

6、le Grid 同時(shí)會(huì)將進(jìn)入 FLUSH List 的數(shù)據(jù)從 Remote Buffer Pool 中清除掉。所以可以說(shuō),Remote Buffer Pool 中不會(huì)存在 Dirty Pages, RemoteBufferPool 出現(xiàn)故障的時(shí)候不會(huì)產(chǎn)生數(shù)據(jù)丟失的問(wèn)題。下圖是使用 Waffle Grid 項(xiàng)目時(shí)候的架構(gòu)簡(jiǎn)圖: Memcached 服務(wù)器通信。為了保證網(wǎng)絡(luò)通信的性能,MySQL Memcached 之間盡可另外,這里的架構(gòu)圖中并沒(méi)有再將數(shù)據(jù)庫(kù)區(qū)分 Master 和 Slave 了,并不是說(shuō)一定不 Slave Waffle Grid 即可,Master 本身并不需要如此大的內(nèi)存???/p>

7、了 Waffle Grid 的實(shí)現(xiàn)原理,可能有些讀者朋友會(huì)有些疑問(wèn)了。這樣做不是所有需要產(chǎn)生物理讀的 Query 的性能就會(huì)受到直接影響了嗎?所有 Remote Buffer 的操作 Waffle 的實(shí)測(cè)數(shù) 下面再來(lái)介紹一下Memcached 和MySQL 的另外一種整合方式,也就是通過(guò)MySQL所提供的 UDF 功能,自行編寫(xiě)相應(yīng)的程序來(lái)實(shí)現(xiàn) MySQL 與 Memcached 的數(shù)據(jù)通信更新操WaffleGrid Memcached MySQL ,而是由應(yīng)用程序和MySQL 一起來(lái)數(shù)據(jù)。每次應(yīng)用程序從Memcached 數(shù)據(jù)的 Memcached MySQL Memcached 中數(shù)據(jù)的失

8、效清理工作,每次數(shù)據(jù)庫(kù)中有數(shù)據(jù)被更新或者被刪除的時(shí)候,MySQL UDF Memcached的 API 來(lái)通知 Memcached 某些數(shù)據(jù)已經(jīng)失效并刪除該數(shù)據(jù)。如圖中所示,此架構(gòu)和上面將 Memcached 完全和 MySQL 讀離開(kāi)作為常規(guī)的 Cache 服 務(wù)器來(lái)比較,最大的區(qū)別在于 Memcached 的數(shù)據(jù)變?yōu)橛?MySQL 數(shù)據(jù)庫(kù)來(lái)更新,而不 是應(yīng)用程序來(lái)更新。首先數(shù)據(jù)被應(yīng)用程序?qū)懭?MySQL 數(shù)據(jù)庫(kù),這時(shí)候?qū)?huì)觸發(fā) MySQL 上面用戶自行編寫(xiě)的相關(guān) UDF,然后通過(guò)該 UDF 調(diào)用 Memcached 的相關(guān)通口,將數(shù)據(jù) MemcachedMySQL 中的數(shù)據(jù)被更新或者刪除的

9、時(shí)候,MySQL UDF 同樣會(huì)更新或者刪除 Memcached 中的數(shù)據(jù)。當(dāng)然,也可以讓MySQL 做更少一些的事情,僅僅只是遇到數(shù)據(jù)被更新或者刪除的時(shí)候,通過(guò) UDF 來(lái)刪除 Memcached 中的數(shù)據(jù),寫(xiě)入 由于 Memcached 基于對(duì)象的數(shù)據(jù)存取,以及通過(guò) Hash 進(jìn)行數(shù)據(jù)檢索的特性,所以所有在 Memcached 中的數(shù)據(jù)都需要設(shè)定一個(gè)用于標(biāo)識(shí)該數(shù)據(jù)的 Key,所有數(shù)據(jù)的存Key MySQL Query 語(yǔ)句一樣通過(guò) 呼 Berkeley DB 了,那就姑且使用網(wǎng)上較為通用的叫法吧。Memcached 所實(shí)現(xiàn)的是內(nèi)存式Cache,如果對(duì)性能的要求并沒(méi)有如此之高,在方面也不是太

10、充裕的話,還可以選擇 Berkeley DB 這樣的數(shù)據(jù)庫(kù)型 Cache ??赡芎芏嘧x者朋友又會(huì)產(chǎn)生疑惑了,使用的 MySQL 數(shù)據(jù)庫(kù),為什么還要再使用一個(gè) Berkeley DB 這樣的“數(shù)據(jù)庫(kù)”呢?實(shí)際上 Berkeley DB 在之前也是 MySQL 的引擎之一,只不過(guò)后期不知道是何原因(獲取與商業(yè)競(jìng)爭(zhēng)有關(guān)吧),被MySQL 從支持的引擎中移除了。之所以在使用數(shù)據(jù)庫(kù)的同時(shí)還使用 Berkeley DB 這樣的數(shù)據(jù)庫(kù)型 Cache,是因?yàn)?Berkeley DB 高效的鍵值對(duì)方式作為高效數(shù)據(jù)檢索的性能補(bǔ)充,以得到更好的數(shù)據(jù)服務(wù)Berkeley DB 自身架構(gòu)可以分為五個(gè)功能模塊,五個(gè)模塊的

11、在整個(gè)系統(tǒng)中相對(duì)比較獨(dú)數(shù)據(jù)存取子系統(tǒng)主要負(fù)責(zé)最主要也是最基本的數(shù)據(jù)存與取的工作。而且 Berkeley DB 同時(shí)支持了以下四種數(shù)據(jù)的結(jié)果方式:Hash,B-Tree,F(xiàn)ixed Length 以及 DynamicLength。實(shí)際上,這四種方式對(duì)應(yīng)了四種數(shù)據(jù)文件的實(shí)際格式。數(shù)據(jù)ACID 事務(wù)屬理共享 Cache 和 Buffer 的,為系統(tǒng)提升性能而提供數(shù)據(jù)緩存服務(wù)。日志系統(tǒng)主要服務(wù)于事務(wù)管理系統(tǒng),為保證事務(wù)的一致性,BerkeleyDB 也采用先基于BerkeleyDB 的特性,很難像使用Memcached 那樣將他和MySQL 數(shù)據(jù)庫(kù)結(jié) 大多數(shù)時(shí)候都主要是使用Hash 和B-Tree 這

12、兩種結(jié)構(gòu)的數(shù)據(jù)格式,尤其是Hash格式,在應(yīng)用程序中,每次數(shù)據(jù)請(qǐng)求,都先通過(guò)預(yù)先設(shè)定的 Key 到 Berkeley DB 中取查找一將到的數(shù)據(jù)按照預(yù)先設(shè)定的 Key,整條存入 Berkeley DB 中,再返回給客戶端。而當(dāng)MySQL BerkeleyDB 中的數(shù)據(jù)刪除。當(dāng)然,如果您愿意,也可以直接修改 Berkeley DB 中的數(shù)據(jù),但是這樣就可能 從原理來(lái)看,使用 Berkeley DB 的方式和將 Memcached 作為純 Cache 來(lái)使用差別不大嘛,為什么不用Memcached 來(lái)做呢?其實(shí)主要有兩個(gè)原因,一個(gè)是Memcached 是使用純內(nèi)存來(lái)存放數(shù)據(jù)的,而 Berkeley

13、 DB 則可以使用物理磁盤(pán),兩者在成本方面還是有較 大差別的。另外一個(gè)原因就是 Berkeley DB 所能支持的數(shù)據(jù)方式除了 Memcached 所使用的 Hash 格式之外,同時(shí)還可以使用其他格式,如 B-Tree 等。 Cache 還可以通過(guò)自行實(shí)現(xiàn)的 Cache 來(lái)達(dá)到完全相同的效果。要您不要一開(kāi)始就希望作出一個(gè)能夠解決所有問(wèn)題,而且包含所有其他第 Cache 自主研發(fā)實(shí)現(xiàn)Cache 服務(wù)的前提是系統(tǒng)中存在比較特殊的應(yīng)用場(chǎng)景,通過(guò)自主研 技術(shù)實(shí)現(xiàn)可能會(huì)成為研發(fā)過(guò)程中很大的一個(gè)難點(diǎn),能否有穩(wěn)定可靠的數(shù)據(jù)同步()更新機(jī)制決定了該 Cache 最終的成敗。當(dāng)然,你可以說(shuō)數(shù)據(jù)同步(或異步)更新

14、完全一個(gè)Cache 的同時(shí),還需要前端應(yīng)用程序作出巨大的調(diào)整來(lái)適應(yīng)這個(gè)Cache 是一千萬(wàn)不要忽視了系統(tǒng)的成本,一個(gè)一旦開(kāi)始使用之后,主要工作就是對(duì)其進(jìn)行各種。如果可性太差,很可能帶來(lái)極大的工作量,甚至帶來(lái)一線應(yīng)用Cache 服務(wù)基于不同的功能特性,可能會(huì)有不同的架構(gòu)組成,但基本上和上面使用 Memcached 所使用的架構(gòu)區(qū)別不大了,所以這里也就不再詳細(xì)了。 服務(wù))的時(shí)候,應(yīng)該盡可能將該Cache 與的MySQL 數(shù)據(jù)庫(kù)進(jìn)行一定能做到后端數(shù)據(jù)服務(wù)(Cache)層在進(jìn)行任何擴(kuò)展的時(shí)候,影響到的僅僅只是中間 Search Memcached BerkeleyDB ,大多數(shù)時(shí)候都只能通過(guò)特定的方式

15、來(lái) MySQL MyISAM 存 說(shuō)的 Search(搜索引擎)對(duì)數(shù)據(jù)進(jìn)行全文索引,才能達(dá)到較為高效的數(shù)據(jù)檢索效率。同樣,Search 的使用也有使用較為成第解決方案與自行研發(fā)兩種方式。目前最為有名的第解決方案主要就是基于Java 實(shí)現(xiàn)的Lucene,隸屬于Apache 基金 Jakarta 項(xiàng)目組下面的一個(gè)子項(xiàng)目。當(dāng)然,他并不是一個(gè)完整的搜索引擎工具,而是這里我就不深入 Lucene 本身的技術(shù)細(xì)節(jié)了,感的讀者朋友可以通過(guò) 站點(diǎn)()來(lái)了解也更為的細(xì)節(jié)。我這里主要是介紹一下 Luence 能夠給帶來(lái)什么,可以怎樣來(lái)使用他。由于Lucene 高效的全文索引和分詞算法,以及高效的數(shù)據(jù)檢索實(shí)現(xiàn),完全

16、可以很好的利用這一優(yōu)點(diǎn)來(lái)解決數(shù)據(jù)庫(kù)和傳統(tǒng)的 Cache 完全無(wú)法解決的全文模糊搜索功能。 面的數(shù)據(jù),只需要將數(shù)據(jù)庫(kù)中被持久化下來(lái)的數(shù)據(jù)通過(guò)應(yīng)用程序調(diào)用 Lucene 的相關(guān) API 寫(xiě)入,并利用 Lucene 創(chuàng)建好索引,然后就可以通過(guò)調(diào)用 Lucene 所提供的數(shù)據(jù)檢索 API 得到需要的數(shù)據(jù),而且可以進(jìn)行全模糊匹配。由于從數(shù)據(jù)庫(kù)到Lucene 這一過(guò)程完Lucene 的數(shù)據(jù)也是存放在磁盤(pán)上而不是內(nèi)存中,但是由于高效的分詞算法和索引結(jié)構(gòu),其效率也是非常的好??吹胶芏嗑W(wǎng)友在網(wǎng)上,當(dāng)數(shù)據(jù)量稍微大一些如幾十個(gè) GLucene 的效率會(huì)下降的非常快,其實(shí)這是不科學(xué)的說(shuō)法,就從我親眼所見(jiàn)的場(chǎng)景中, 除

17、了使用第的 Search 如 Lucene 之外,也可以自行研發(fā)更適用于自身應(yīng)用場(chǎng)景的 Search 。就像我目前所供職的公司一樣,自行研發(fā)了一套純內(nèi)存的更適合于自身應(yīng)用場(chǎng)景的高性能分布式 Search ,讓各個(gè)應(yīng)用系統(tǒng)能夠作出很多高效的當(dāng)然,自行研發(fā) Search 的技術(shù)門(mén)檻可能也比較高,有此技術(shù)實(shí)力的開(kāi)發(fā)團(tuán)隊(duì)并不是很多,所以在決定自行研發(fā)之前,一定要做好各方面的評(píng)估。不過(guò),如果無(wú)法實(shí)現(xiàn)一個(gè)很通用的 Search ,但是僅僅只是針對(duì)某些特定功能來(lái)說(shuō),可能實(shí)現(xiàn)也并沒(méi)有那么復(fù)雜,更何況如今的開(kāi)源世界里各種各樣的數(shù)不勝數(shù),利用現(xiàn)有的工具,加上自身加入了Search 來(lái)實(shí)現(xiàn)高效的全文檢索功能之后,的架構(gòu)可以通過(guò)如下這IT 界的目前比較流行的分布式并行計(jì)算框架主要就是以 的 MapReduce 和 Yahoo 的 Hadoop 二者。其實(shí)更為準(zhǔn)確的說(shuō)應(yīng)該是 的 MapReduce + GFS + BigTable 以及 Yahoo 的 Hadoop + HDFS + HBase 這兩大架構(gòu)體系。二者都是由三個(gè)負(fù)責(zé)不同功能的組件組成,MapReduce Hadoop 同為解決認(rèn)任務(wù)分解與合并的功能,GFS HDF

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論