一種緩存系統(tǒng)數(shù)據(jù)存取方法
【專利摘要】本發(fā)明涉及一種緩存系統(tǒng)數(shù)據(jù)存取方法,數(shù)據(jù)存儲(chǔ)系統(tǒng)通過(guò)該存取方法并發(fā)訪問(wèn)Memcache緩存系統(tǒng)的數(shù)據(jù)時(shí),每個(gè)線程均擁有一個(gè)獨(dú)立的、屬于自己的Memcache操作句柄和一個(gè)唯一標(biāo)識(shí)符,線程使用自己的Memcache操作句柄進(jìn)行數(shù)據(jù)存取,每個(gè)所述線程的唯一標(biāo)識(shí)符和Memcache操作句柄以Key-Value鍵值對(duì)的形成存儲(chǔ)在句柄管理器中。與現(xiàn)有技術(shù)相比,本發(fā)明將多連接方式和多線程技術(shù)結(jié)合應(yīng)用,加快Memcache緩存系統(tǒng)的訪問(wèn)速度,提高它的操作頻率,以擴(kuò)大其在分布式文件系統(tǒng)中作為緩存提高數(shù)據(jù)訪問(wèn)速度的效果。
【專利說(shuō)明】一種緩存系統(tǒng)數(shù)據(jù)存取方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種數(shù)據(jù)存取方法,尤其是涉及一種緩存系統(tǒng)數(shù)據(jù)存取方法。
【背景技術(shù)】
[0002]信息技術(shù)的發(fā)展便利了人民的生活,改變了人們的生活方式,人們產(chǎn)生的數(shù)據(jù)量正在日益膨脹。對(duì)于傳統(tǒng)的數(shù)據(jù)存儲(chǔ)系統(tǒng)來(lái)說(shuō),快速處理這些龐大的數(shù)據(jù)正在變得越來(lái)越困難,大量的數(shù)據(jù)會(huì)導(dǎo)致處理能力有限的存儲(chǔ)系統(tǒng)無(wú)法應(yīng)付,產(chǎn)生的結(jié)果便是耗時(shí)巨大,難以滿足人們對(duì)快速處理數(shù)據(jù)的要求,因此需要尋找新的技術(shù)改進(jìn),以提高存儲(chǔ)系統(tǒng)處理大量數(shù)據(jù)的能力。
[0003]如今越來(lái)越多的數(shù)據(jù)存儲(chǔ)系統(tǒng)開始使用緩存技術(shù)。緩存能夠快速響應(yīng)用戶寫入、讀取數(shù)據(jù)的操作,是數(shù)據(jù)存儲(chǔ)系統(tǒng)與用戶交換數(shù)據(jù)的中間介質(zhì),它可分為寫緩存和讀緩存。寫緩存用于接收用戶發(fā)來(lái)的數(shù)據(jù),用戶將數(shù)據(jù)發(fā)送給寫緩存后,數(shù)據(jù)存儲(chǔ)系統(tǒng)便將寫緩存中的數(shù)據(jù)逐步接收并寫入到磁盤中。讀緩存用于讓用戶能快速訪問(wèn)存儲(chǔ)系統(tǒng)中的數(shù)據(jù),存儲(chǔ)系統(tǒng)把用戶經(jīng)常需要獲取的數(shù)據(jù)寫入讀緩存中,用戶便可直接讀取讀緩存中的數(shù)據(jù),而無(wú)需直接和底層存儲(chǔ)系統(tǒng)打交道。但當(dāng)多個(gè)用戶同時(shí)發(fā)送大量數(shù)據(jù)給數(shù)據(jù)存儲(chǔ)系統(tǒng)時(shí),存儲(chǔ)系統(tǒng)如何快速?gòu)膶懢彺嫔辖邮諗?shù)據(jù)并寫入讀緩存,又成為一個(gè)問(wèn)題。
[0004]一個(gè)有效且通用的方法便是使用多線程并發(fā)訪問(wèn)的方式,提高數(shù)據(jù)的訪問(wèn)速度。但當(dāng)多個(gè)線程具有共用的獨(dú)占式資源時(shí),各個(gè)線程往往會(huì)由于需要訪問(wèn)這些共用的資源而進(jìn)行加鎖、解鎖操作,以保證對(duì)這些資源的獨(dú)占。而加鎖、解鎖、使用獨(dú)占式資源又會(huì)帶來(lái)新的問(wèn)題,一個(gè)線程在使用獨(dú)占式資源時(shí),其它線程必須等待其使用結(jié)束、釋放相關(guān)的鎖之后才能占用該資源,這就造成了線程為獲得獨(dú)占式資源而等待的現(xiàn)象,而且,當(dāng)一個(gè)線程使用完獨(dú)占式資源并釋放鎖時(shí),其它線程為了獲得該資源而發(fā)生的“鎖競(jìng)爭(zhēng)”現(xiàn)象也會(huì)導(dǎo)致一定的性能開銷。這樣,帶有鎖的多線程并發(fā)訪問(wèn)方式未必能顯著提高數(shù)據(jù)的存取速度,這對(duì)于具有高實(shí)時(shí)性的數(shù)據(jù)存取系統(tǒng)來(lái)說(shuō),無(wú)疑是致命的缺陷。
[0005]Memcache是一個(gè)高性能、分布式的內(nèi)存對(duì)象緩存系統(tǒng),采用的是Key-Value存儲(chǔ)結(jié)構(gòu)。通過(guò)在內(nèi)存中維護(hù)一個(gè)巨大的哈希鏈表,Memcache可以存儲(chǔ)各種格式的數(shù)據(jù),并且可通過(guò)目前已經(jīng)趨于成熟的API接口對(duì)這些數(shù)據(jù)進(jìn)行增、刪、改、查等操作。它可通過(guò)客戶端實(shí)現(xiàn)分布式結(jié)構(gòu)組織,從而擴(kuò)大數(shù)據(jù)容量、提高數(shù)據(jù)的穩(wěn)定性。Memcache的訪問(wèn)性能極高,單條連接對(duì)Memcache服務(wù)器的每秒訪問(wèn)次數(shù)可達(dá)到30000以上。目前很多大型的數(shù)據(jù)存儲(chǔ)系統(tǒng)已經(jīng)使用了 Memcache作為緩存工具,以提高整個(gè)系統(tǒng)的數(shù)據(jù)訪問(wèn)速度。大型的數(shù)據(jù)存儲(chǔ)系統(tǒng)一般會(huì)建立一條對(duì)Memcache服務(wù)器的連接,然后利用該連接,使用多線程并發(fā)的方式訪問(wèn)數(shù)據(jù),以提高數(shù)據(jù)的存取速度。但由于這條連接中有不少獨(dú)占式資源是各個(gè)訪問(wèn)線程共有的,因此每個(gè)線程在獲取這些獨(dú)占式資源前必須對(duì)這些資源進(jìn)行加鎖并在使用完之后進(jìn)行解鎖,以保證它對(duì)這些資源的充分獨(dú)占。這就會(huì)使其它線程為等待資源被釋放而被掛起,從而降低存取操作的速度。所以,即使使用了多線程并發(fā)訪問(wèn)的方式,對(duì)提高M(jìn)emcache的訪問(wèn)性能效果也不會(huì)很顯著。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的目的就是為了克服上述現(xiàn)有技術(shù)存在的缺陷而提供一種緩存系統(tǒng)數(shù)據(jù)存取方法,將多連接方式和多線程技術(shù)結(jié)合應(yīng)用,加快Memcache緩存系統(tǒng)的訪問(wèn)速度,提高它的操作頻率,以擴(kuò)大其在分布式文件系統(tǒng)中作為緩存提高數(shù)據(jù)訪問(wèn)速度的效果。
[0007]本發(fā)明的目的可以通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn):
[0008]一種緩存系統(tǒng)數(shù)據(jù)存取方法,數(shù)據(jù)存儲(chǔ)系統(tǒng)通過(guò)該存取方法并發(fā)訪問(wèn)Memcache緩存系統(tǒng)的數(shù)據(jù)時(shí),每個(gè)線程均擁有一個(gè)獨(dú)立的、屬于自己的Memcache操作句柄和一個(gè)唯一標(biāo)識(shí)符,線程使用自己的Memcache操作句柄進(jìn)行數(shù)據(jù)存取,每個(gè)所述線程的唯一標(biāo)識(shí)符和Memcache操作句柄以Key-Value鍵值對(duì)的形成存儲(chǔ)在句柄管理器中,每個(gè)線程訪問(wèn)Memcache緩存系統(tǒng)的具體步驟包括:
[0009]I)獲取線程本身的唯一標(biāo)識(shí)符;
[0010]2)查找句柄管理器中是否存在鍵為當(dāng)前唯一標(biāo)識(shí)符的元素,若是,則將該鍵對(duì)應(yīng)的值作為當(dāng)前線程的Memcache操作句柄輸出,若否,則進(jìn)行創(chuàng)建一個(gè)新句柄作為當(dāng)前線程的Memcache操作句柄;
[0011]3)使用步驟2)獲得的Memcache操作句柄對(duì)緩存系統(tǒng)進(jìn)行存取操作。
[0012]所述的唯一標(biāo)示符為每個(gè)線程的線程號(hào)。
[0013]所述的步驟2)中創(chuàng)建一個(gè)新句柄的具體步驟為:
[0014]I)獲取當(dāng)前線程的線程號(hào),即線程的唯一標(biāo)識(shí)符;
[0015]2)在內(nèi)存中創(chuàng)建一個(gè)新的Memcache操作句柄;
[0016]3)獲取新建句柄在內(nèi)存中的地址;
[0017]4)在句柄管理器中插入一個(gè)新的元素,該元素以線程號(hào)作為Key,以新建句柄的地址作為Value。
[0018]所述的句柄管理器設(shè)置在數(shù)據(jù)存儲(chǔ)系統(tǒng)服務(wù)器端。
[0019]與現(xiàn)有技術(shù)相比,本發(fā)明如下有益效果:
[0020]I)提升了在大并發(fā)訪問(wèn)的情況下的緩存系統(tǒng)數(shù)據(jù)存取速度,經(jīng)測(cè)試,在8線程使用各自句柄并發(fā)訪問(wèn)Memcache緩存系統(tǒng)時(shí),其訪問(wèn)速度為使用公用句柄時(shí)的4至8倍。
[0021]2)由于使用了各自的句柄,各線程在訪問(wèn)緩存系統(tǒng)時(shí),無(wú)需為爭(zhēng)奪共用的句柄而產(chǎn)生鎖競(jìng)爭(zhēng),提高了獲取句柄的速度。
[0022]3)由于各線程使用了各自的句柄,也就擁有了各自的連接,一個(gè)線程的句柄發(fā)生異常不會(huì)影響其它線程對(duì)緩存系統(tǒng)的訪問(wèn),因此可以有效提高系統(tǒng)的穩(wěn)定性。
【專利附圖】
【附圖說(shuō)明】
[0023]圖1為本發(fā)明的整體結(jié)構(gòu)示意圖;
[0024]圖2為線程創(chuàng)建句柄過(guò)程示意圖;
[0025]圖3為線程獲取句柄過(guò)程示意圖;
[0026]圖4為數(shù)據(jù)存儲(chǔ)系統(tǒng)內(nèi)部結(jié)構(gòu)示意圖
[0027]圖5為數(shù)據(jù)存儲(chǔ)系統(tǒng)使用實(shí)例結(jié)構(gòu)圖。【具體實(shí)施方式】
[0028]下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)說(shuō)明。本實(shí)施例以本發(fā)明技術(shù)方案為前提進(jìn)行實(shí)施,給出了詳細(xì)的實(shí)施方式和具體的操作過(guò)程,但本發(fā)明的保護(hù)范圍不限于下述的實(shí)施例。
[0029]一種緩存系統(tǒng)數(shù)據(jù)存取方法,數(shù)據(jù)存儲(chǔ)系統(tǒng)通過(guò)該存取方法并發(fā)訪問(wèn)Memcache緩存系統(tǒng)的數(shù)據(jù)時(shí),使用多個(gè)線程,每個(gè)線程均擁有一個(gè)獨(dú)立的、屬于自己的Memcache操作句柄(即一條訪問(wèn)Memcache緩存系統(tǒng)的連接),如圖1中,線程I?4均分別對(duì)應(yīng)操作句柄I?4。而為了能夠建立線程和Memcache句柄的——對(duì)應(yīng)關(guān)系,需使用一些變量唯一地標(biāo)識(shí)各個(gè)線程,即每個(gè)線程都需要一個(gè)唯一標(biāo)識(shí)符(Unique Identifier)。線程使用自己的Memcache操作句柄進(jìn)行數(shù)據(jù)存取,多個(gè)線程不再共用單獨(dú)的一條連接。數(shù)據(jù)存儲(chǔ)系統(tǒng)服務(wù)器端中維護(hù)一個(gè)句柄管理器(map容器),每個(gè)所述線程的唯一標(biāo)識(shí)符和Memcache操作句柄以Key-Value鍵值對(duì)的形成存儲(chǔ)在句柄管理器中。句柄管理器用于存儲(chǔ)鍵和值之間的一一對(duì)應(yīng)關(guān)系,其保證在多線程并發(fā)訪問(wèn)Memcache時(shí),各線程能夠快速定位屬于自己的操作句柄,并將其取出后使用。
[0030]每個(gè)線程訪問(wèn)Memcache緩存系統(tǒng)的具體步驟包括:
[0031](I)獲取線程本身的唯一標(biāo)識(shí)符;
[0032](2)查找句柄管理器中是否存在鍵為此唯一標(biāo)識(shí)符的元素,如果存在,則該線程對(duì)應(yīng)的Memcache操作句柄便是元素的值,執(zhí)行句柄獲取步驟;如果不存在,則表示目前沒(méi)有與該線程對(duì)應(yīng)的Memcaehe操作句柄,執(zhí)行句柄創(chuàng)建步驟。
[0033](3)使用取出的或新創(chuàng)建的Memcache操作句柄,對(duì)緩存系統(tǒng)進(jìn)行存取操作。
[0034]每個(gè)線程都有一個(gè)唯一的線程號(hào),可以唯一地標(biāo)識(shí)線程自身。而map容器的Key-Value存儲(chǔ)特性可以很好地將線程號(hào)和屬于線程的句柄建立一一對(duì)應(yīng)的關(guān)系,因此線程的線程號(hào)可以是作為線程的唯一標(biāo)識(shí)符的良好選擇。
[0035]句柄創(chuàng)建步驟:
[0036]如圖2所示,為每個(gè)線程創(chuàng)建新句柄的過(guò)程如下:
[0037](I)獲取當(dāng)前線程的線程號(hào);
[0038](2)在內(nèi)存中創(chuàng)建一個(gè)新的Memcache句柄;
[0039](3)獲取新建句柄在內(nèi)存中的地址;
[0040](4)在句柄管理map容器中插入一個(gè)新的元素,該元素以線程號(hào)作為Key,以新建句柄的地址作為Value。
[0041]句柄獲取步驟:
[0042]如圖3所示,獲取屬于每個(gè)線程的句柄的過(guò)程如下:
[0043](I)獲取當(dāng)前線程的線程號(hào);
[0044](2)檢查句柄管理map容器中是否存在鍵為該線程號(hào)的元素;
[0045](3)如果存在該元素,則返回該元素的值,即為對(duì)應(yīng)于該線程的句柄,否則執(zhí)行句柄創(chuàng)建步驟。
[0046]如圖4所示,數(shù)據(jù)存儲(chǔ)系統(tǒng)服務(wù)端創(chuàng)建一個(gè)句柄管理器,專門用于維護(hù)與Memcache緩存系統(tǒng)連接的各個(gè)句柄。各句柄的屬性由句柄管理器統(tǒng)一設(shè)置。數(shù)據(jù)存儲(chǔ)系統(tǒng)獲取操作緩存系統(tǒng)的句柄都需要通過(guò)句柄管理器獲得,句柄管理器對(duì)各個(gè)線程各自的緩存操作句柄進(jìn)行維護(hù)。
[0047]如圖5所示,以4個(gè)客戶端為例,各客戶端向存儲(chǔ)系統(tǒng)寫入數(shù)據(jù)時(shí),需先把數(shù)據(jù)寫入寫緩存系統(tǒng),由數(shù)據(jù)存儲(chǔ)系統(tǒng)自行從寫緩存系統(tǒng)中讀取數(shù)據(jù)并存儲(chǔ)于磁盤,再將數(shù)據(jù)寫入讀緩存系統(tǒng),供客戶端能夠快速讀取數(shù)據(jù)。由于Memcache容量有限,當(dāng)其容量滿之后再次往其中寫入數(shù)據(jù)將會(huì)導(dǎo)致之前數(shù)據(jù)丟失,故只適合作為讀緩存系統(tǒng),而寫緩存系統(tǒng)需要使用磁盤緩存。客戶端發(fā)送數(shù)據(jù)到數(shù)據(jù)存儲(chǔ)系統(tǒng)的過(guò)程如下:
[0048](I)各客戶端建立一個(gè)與寫緩存系統(tǒng)的連接;
[0049](2)各客戶端將各自的大量數(shù)據(jù)發(fā)送給寫緩存系統(tǒng);
[0050](3)數(shù)據(jù)存儲(chǔ)系統(tǒng)為各個(gè)客戶端創(chuàng)建一個(gè)線程用于讀取其發(fā)送的數(shù)據(jù);
[0051](4)通過(guò)各個(gè)線程,數(shù)據(jù)存儲(chǔ)系統(tǒng)為各個(gè)客戶端創(chuàng)建一個(gè)線程用于訪問(wèn)寫緩存系統(tǒng),每個(gè)線程擁有一個(gè)緩存訪問(wèn)句柄,即對(duì)寫緩存系統(tǒng)的連接;
[0052](5)使用各個(gè)連接,將屬于各客戶端的數(shù)據(jù)并發(fā)地從寫緩存系統(tǒng)中讀入數(shù)據(jù)存儲(chǔ)系統(tǒng),并存儲(chǔ)在底層磁盤介質(zhì)中;
[0053](6)數(shù)據(jù)存儲(chǔ)系統(tǒng)為各個(gè)客戶端創(chuàng)建一個(gè)線程用于將其寫入的數(shù)據(jù)發(fā)送至讀緩存系統(tǒng);
[0054](7)數(shù)據(jù)存儲(chǔ)系統(tǒng)為各個(gè)客戶端創(chuàng)建一個(gè)線程用于訪問(wèn)讀緩存系統(tǒng),每個(gè)線程擁有一個(gè)緩存訪問(wèn)句柄,即對(duì)讀緩存系統(tǒng)的連接;
[0055](8)使用各個(gè)連接,將各客戶端的數(shù)據(jù)并發(fā)地寫入讀緩存系統(tǒng)中。
【權(quán)利要求】
1.一種緩存系統(tǒng)數(shù)據(jù)存取方法,其特征在于,數(shù)據(jù)存儲(chǔ)系統(tǒng)通過(guò)該存取方法并發(fā)訪問(wèn)Memcache緩存系統(tǒng)的數(shù)據(jù)時(shí),每個(gè)線程均擁有一個(gè)獨(dú)立的、屬于自己的Memcache操作句柄和一個(gè)唯一標(biāo)識(shí)符,線程使用自己的Memcache操作句柄進(jìn)行數(shù)據(jù)存取,每個(gè)所述線程的唯一標(biāo)識(shí)符和Memcache操作句柄以Key-Value鍵值對(duì)的形成存儲(chǔ)在句柄管理器中,每個(gè)線程訪問(wèn)Memcache緩存系統(tǒng)的具體步驟包括: 1)獲取線程本身的唯一標(biāo)識(shí)符; 2)查找句柄管理器中是否存在鍵為當(dāng)前唯一標(biāo)識(shí)符的元素,若是,則將該鍵對(duì)應(yīng)的值作為當(dāng)前線程的Memcache操作句柄輸出,若否,則進(jìn)行創(chuàng)建一個(gè)新句柄作為當(dāng)前線程的Memcache操作句柄; 3)使用步驟2)獲得的Memcache操作句柄對(duì)緩存系統(tǒng)進(jìn)行存取操作。
2.根據(jù)權(quán)利要求1所述的一種緩存系統(tǒng)數(shù)據(jù)存取方法,其特征在于,所述的唯一標(biāo)示符為每個(gè)線程的線程號(hào)。
3.根據(jù)權(quán)利要求1所述的一種緩存系統(tǒng)數(shù)據(jù)存取方法,其特征在于,所述的步驟2)中創(chuàng)建一個(gè)新句柄的具體步驟為: 1)獲取當(dāng)前線程的線程號(hào),即線程的唯一標(biāo)識(shí)符; 2)在內(nèi)存中創(chuàng)建一個(gè)新的Memcache操作句柄; 3)獲取新建句柄在內(nèi)存中的地址; 4)在句柄管理器中插入一個(gè)新的元素,該元素以線程號(hào)作為Key,以新建句柄的地址作為Value。
4.根據(jù)權(quán)利要求1所述的一種緩存系統(tǒng)數(shù)據(jù)存取方法,其特征在于,所述的句柄管理器設(shè)置在數(shù)據(jù)存儲(chǔ)系統(tǒng)服務(wù)器端。
【文檔編號(hào)】G06F12/08GK103853504SQ201410049160
【公開日】2014年6月11日 申請(qǐng)日期:2014年2月12日 優(yōu)先權(quán)日:2014年2月12日
【發(fā)明者】朱溢能 申請(qǐng)人:上海愛(ài)數(shù)軟件有限公司