本發(fā)明涉及計(jì)算機(jī)軟件領(lǐng)域,具體涉及一種數(shù)據(jù)存儲(chǔ)和查找方法及裝置。
背景技術(shù):
在處理數(shù)據(jù)時(shí),涉及到對(duì)數(shù)據(jù)的存儲(chǔ)、查找等多方面的相關(guān)操作。數(shù)據(jù)的存儲(chǔ)方式會(huì)影響到數(shù)據(jù)查找時(shí)的速度、效率等。尤其在數(shù)據(jù)量比較大的情況下,在大量的存儲(chǔ)數(shù)據(jù)中進(jìn)行數(shù)據(jù)查找時(shí),會(huì)花費(fèi)更多的時(shí)間和處理器的開(kāi)銷,以及影響到后續(xù)的數(shù)據(jù)處理等操作。
例如,將數(shù)據(jù)按照在已存儲(chǔ)數(shù)據(jù)的末尾追加存儲(chǔ)的方式進(jìn)行存儲(chǔ)。在查找時(shí),需要將數(shù)據(jù)按照存儲(chǔ)的順序從頭至尾進(jìn)行查找,若存儲(chǔ)的數(shù)據(jù)有5000個(gè)時(shí),最差的情況可能需要進(jìn)行5000次的查找,才能找到數(shù)據(jù)?;ㄙM(fèi)的時(shí)間和處理器的開(kāi)銷會(huì)非常大,查找的速度慢,效率低下。因此,需要一種數(shù)據(jù)存儲(chǔ)和查找方法,有效的提高數(shù)據(jù)查找的速度和效率。
技術(shù)實(shí)現(xiàn)要素:
鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的數(shù)據(jù)存儲(chǔ)和查找方法及裝置。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種數(shù)據(jù)存儲(chǔ)和查找方法,其包括:
接收數(shù)據(jù)存儲(chǔ)請(qǐng)求,確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型;
若請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則將數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式按照鏈表順序進(jìn)行存儲(chǔ),數(shù)據(jù)鍵值對(duì)包含數(shù)據(jù)鍵和數(shù)據(jù)值;
接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型;
若請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則根據(jù)鏈表順序,獲取對(duì)應(yīng)的數(shù)據(jù)值。
根據(jù)本發(fā)明的另一方面,提供了一種數(shù)據(jù)存儲(chǔ)和查找裝置,其包括:
存儲(chǔ)請(qǐng)求模塊,適于接收數(shù)據(jù)存儲(chǔ)請(qǐng)求,確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型;
存儲(chǔ)模塊,適于若請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則將數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式按照鏈表順序進(jìn)行存儲(chǔ),數(shù)據(jù)鍵值對(duì)包含數(shù)據(jù)鍵和數(shù)據(jù)值;
查找請(qǐng)求模塊,適于接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型;
查找模塊,適于若請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則根據(jù)鏈表順序,獲取對(duì)應(yīng)的數(shù)據(jù)值。
根據(jù)本發(fā)明提供的數(shù)據(jù)存儲(chǔ)和查找方法及裝置,接收數(shù)據(jù)存儲(chǔ)請(qǐng)求,確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型;若請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則將數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式按照鏈表順序進(jìn)行存儲(chǔ)。接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型;若請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則根據(jù)鏈表順序,獲取對(duì)應(yīng)的數(shù)據(jù)值。通過(guò)將數(shù)據(jù)類型為鏈表的數(shù)據(jù)按照數(shù)據(jù)鍵值對(duì)方式以鏈表順序進(jìn)行存儲(chǔ),以便在查找時(shí),可以根據(jù)鏈表順序進(jìn)行查找。利用鏈表本身具有順序的特性,極大的提高了查找的速度,節(jié)省查找時(shí)花費(fèi)的時(shí)間和終端設(shè)備的開(kāi)銷。
上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書(shū)的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式。
附圖說(shuō)明
通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中:
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)存儲(chǔ)和查找方法的流程示意圖;
圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的數(shù)據(jù)存儲(chǔ)和查找方法的流程示意圖;
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)存儲(chǔ)和查找裝置的功能框圖。
具體實(shí)施方式
下面將參照附圖更詳細(xì)地描述本公開(kāi)的示例性實(shí)施例。雖然附圖中顯示了本公開(kāi)的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開(kāi)而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開(kāi),并且能夠?qū)⒈竟_(kāi)的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)存儲(chǔ)和查找方法的流程示意圖。如圖1所示,數(shù)據(jù)存儲(chǔ)和查找方法具體包括如下步驟:
步驟S101,接收數(shù)據(jù)存儲(chǔ)請(qǐng)求,確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型。
接收數(shù)據(jù)存儲(chǔ)請(qǐng)求后,先確定該請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型。請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型可能存在多種多樣,如鏈表數(shù)據(jù)類型、哈希數(shù)據(jù)類型、set數(shù)據(jù)類型、zset數(shù)據(jù)類型、key-value數(shù)據(jù)類型、超時(shí)key-value數(shù)據(jù)類型等。其中,鏈表數(shù)據(jù)類型的數(shù)據(jù)與其他各種數(shù)據(jù)類型不同之處在于鏈表數(shù)據(jù)類型的數(shù)據(jù)具有前后順序,而其他各種數(shù)據(jù)類型不具有前后順序。本發(fā)明主要針對(duì)數(shù)據(jù)類型為鏈表數(shù)據(jù)類型的數(shù)據(jù)存儲(chǔ)請(qǐng)求進(jìn)行處理。
步驟S102,判斷請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型是否為鏈表。
在確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型后,判斷請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型是否為鏈表,若是,執(zhí)行步驟S103。否則,本方法結(jié)束,不做處理。
步驟S103,將數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式按照鏈表順序進(jìn)行存儲(chǔ)。
存儲(chǔ)時(shí),將請(qǐng)求存儲(chǔ)的數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式進(jìn)行存儲(chǔ)。其中,數(shù)據(jù)鍵值對(duì)中包含了數(shù)據(jù)鍵和數(shù)據(jù)值,即Key和Value。數(shù)據(jù)值為鏈表中的數(shù)據(jù),數(shù)據(jù)鍵可以為鏈表中的順序,如1、2、3、4等;或者還可以為預(yù)先設(shè)置的用于標(biāo)識(shí)鏈表中數(shù)據(jù)的特定值,此處不做限定。
同時(shí),在存儲(chǔ)時(shí),數(shù)據(jù)存儲(chǔ)的順序按照鏈表本身的前后順序進(jìn)行存儲(chǔ)。為記錄鏈表順序,在數(shù)據(jù)鍵中除記錄當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵,還記錄當(dāng)前數(shù)據(jù)的前一數(shù)據(jù)的數(shù)據(jù)鍵、當(dāng)前數(shù)據(jù)的后一數(shù)據(jù)的數(shù)據(jù)鍵。如當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵為3,當(dāng)前數(shù)據(jù)的前一數(shù)據(jù)的數(shù)據(jù)鍵為2,當(dāng)前數(shù)據(jù)的后一數(shù)據(jù)的數(shù)據(jù)鍵為4,當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵可以記錄為3-2-4;通過(guò)數(shù)據(jù)鍵可以很清楚的了解到數(shù)據(jù)的順序?yàn)?、3、4;或者當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵為1,當(dāng)前數(shù)據(jù)沒(méi)有前一數(shù)據(jù),當(dāng)前數(shù)據(jù)的后一數(shù)據(jù)的數(shù)據(jù)鍵為2,當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵可以記錄為1-X-2;通過(guò)數(shù)據(jù)鍵可以很清楚的了解到數(shù)據(jù)的順序?yàn)?、2;或者當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵為5,當(dāng)前數(shù)據(jù)沒(méi)有后一數(shù)據(jù),當(dāng)前數(shù)據(jù)的前一數(shù)據(jù)的數(shù)據(jù)鍵為4,當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵可以記錄為5-4-X;通過(guò)數(shù)據(jù)鍵可以很清楚的了解到數(shù)據(jù)的順序?yàn)?、5。上述舉例說(shuō)明中,數(shù)據(jù)鍵第一位為當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵,第二位為當(dāng)前數(shù)據(jù)的前一數(shù)據(jù)的數(shù)據(jù)鍵,第三位為當(dāng)前數(shù)據(jù)的后一數(shù)據(jù)的數(shù)據(jù)鍵,之間通過(guò)“-”進(jìn)行連接,當(dāng)前一數(shù)據(jù)的數(shù)據(jù)鍵或后一數(shù)據(jù)的數(shù)據(jù)鍵不存在時(shí),用“X”代替。在具體記錄時(shí),關(guān)于當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵、當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵的前一數(shù)據(jù)的數(shù)據(jù)鍵和后一數(shù)據(jù)的數(shù)據(jù)鍵的記錄方式、連接方式等,可以根據(jù)實(shí)施情況進(jìn)行設(shè)置,此處不做限定。
步驟S104,接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型。
接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型。請(qǐng)求查找的數(shù)據(jù)可以為如鏈表數(shù)據(jù)類型、哈希數(shù)據(jù)類型、set數(shù)據(jù)類型、zset數(shù)據(jù)類型、key-value數(shù)據(jù)類型、超時(shí)key-value數(shù)據(jù)類型等。此處的數(shù)據(jù)類型均為廣義的數(shù)據(jù)類型,即符合該數(shù)據(jù)類型特點(diǎn)的數(shù)據(jù),而不是僅僅限定為數(shù)據(jù)類型定義為具體的如List、Hash Table等的數(shù)據(jù)類型。
步驟S105,判斷請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型是否為鏈表。
在確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型后,判斷請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型是否為鏈表,若是,執(zhí)行步驟S106。否則,本方法結(jié)束,不做處理。本發(fā)明主要針對(duì)數(shù)據(jù)類型為鏈表數(shù)據(jù)類型的數(shù)據(jù)查找請(qǐng)求進(jìn)行處理。
此處所指的鏈表為廣義的鏈表,即符合鏈表特征,數(shù)據(jù)間具有順序限定的所有數(shù)據(jù)類型。如步驟S103存儲(chǔ)方式的鏈表類型。數(shù)據(jù)間通過(guò)數(shù)據(jù)鍵標(biāo)明了數(shù)據(jù)間的順序。這種數(shù)據(jù)的數(shù)據(jù)類型也符合本步驟判斷的鏈表。
步驟S106,根據(jù)鏈表順序,獲取對(duì)應(yīng)的數(shù)據(jù)值。
由于鏈表數(shù)據(jù)類型本身的順序特性,數(shù)據(jù)間具有前后順序關(guān)系。因此根據(jù)鏈表順序,可以快速的獲取到對(duì)應(yīng)的數(shù)據(jù)值。根據(jù)請(qǐng)求查找的數(shù)據(jù)中的順序關(guān)系和接收到的數(shù)據(jù)查找請(qǐng)求,如請(qǐng)求查找的數(shù)據(jù)包括數(shù)據(jù)鍵1-X-2,數(shù)據(jù)值a;數(shù)據(jù)鍵2-1-3,數(shù)據(jù)值b;數(shù)據(jù)鍵3-2-4,數(shù)據(jù)值c;數(shù)據(jù)鍵4-3-5,數(shù)據(jù)值d;數(shù)據(jù)鍵5-4-X,數(shù)據(jù)值e。數(shù)據(jù)查找請(qǐng)求為查找數(shù)據(jù)鍵為3的請(qǐng)求,可以根據(jù)請(qǐng)求查找的數(shù)據(jù)間的順序,執(zhí)行依次向后或向前的操作,來(lái)獲取到數(shù)據(jù)鍵為3的數(shù)據(jù)值。以上為舉例說(shuō)明,實(shí)施時(shí)根據(jù)具體情況進(jìn)行設(shè)置,此處不做限定。
需要說(shuō)明的是,此處,不限定步驟S101-S103與步驟S104-S106的前后執(zhí)行順序。步驟S101-S103為數(shù)據(jù)存儲(chǔ)步驟,步驟S104-S106為數(shù)據(jù)查找步驟,步驟S101-S103與步驟S104-S106在接收到相應(yīng)的請(qǐng)求后,執(zhí)行對(duì)應(yīng)的步驟。
根據(jù)本發(fā)明提供的數(shù)據(jù)存儲(chǔ)和查找方法,接收數(shù)據(jù)存儲(chǔ)請(qǐng)求,確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型;若請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則將數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式按照鏈表順序進(jìn)行存儲(chǔ)。確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型;若請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則根據(jù)鏈表順序,獲取對(duì)應(yīng)的數(shù)據(jù)值。通過(guò)將數(shù)據(jù)類型為鏈表的數(shù)據(jù)按照數(shù)據(jù)鍵值對(duì)方式以鏈表順序進(jìn)行存儲(chǔ),以便在查找時(shí),可以根據(jù)鏈表順序進(jìn)行查找。利用鏈表本身具有順序的特性,極大的提高了查找的速度,節(jié)省查找時(shí)花費(fèi)的時(shí)間和終端設(shè)備的開(kāi)銷。
圖2示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的數(shù)據(jù)存儲(chǔ)和查找方法的流程示意圖。如圖2所示,數(shù)據(jù)存儲(chǔ)和查找方法具體包括如下步驟:
步驟S201,接收數(shù)據(jù)存儲(chǔ)請(qǐng)求,確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型。
步驟S202,判斷請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型是否為鏈表。
步驟S203,將數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式按照鏈表順序進(jìn)行存儲(chǔ)。
以上步驟可參考圖1中步驟S101-S103的描述,在此不再贅述。
步驟S204,統(tǒng)計(jì)請(qǐng)求存儲(chǔ)的數(shù)據(jù)的元信息,將元信息以數(shù)據(jù)鍵值對(duì)的方式進(jìn)行存儲(chǔ)。
統(tǒng)計(jì)請(qǐng)求存儲(chǔ)的數(shù)據(jù)的元信息,其中,元信息包括如數(shù)據(jù)個(gè)數(shù)、數(shù)據(jù)長(zhǎng)度等信息,將元信息所包括的信息進(jìn)行存儲(chǔ)。存儲(chǔ)時(shí),以數(shù)據(jù)鍵值對(duì)的方式,如數(shù)據(jù)鍵標(biāo)明要存儲(chǔ)的信息,數(shù)據(jù)值存儲(chǔ)具體的數(shù)據(jù);具體的如數(shù)據(jù)鍵為size,數(shù)據(jù)值為5,標(biāo)明數(shù)據(jù)個(gè)數(shù)為5個(gè)等。具體存儲(chǔ)的元信息可以根據(jù)實(shí)際情況進(jìn)行設(shè)置,此處不做限定。
步驟S205,接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型。
接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型。如請(qǐng)求查找的數(shù)據(jù)可以為如鏈表數(shù)據(jù)類型、哈希數(shù)據(jù)類型、set數(shù)據(jù)類型、zset數(shù)據(jù)類型、key-value數(shù)據(jù)類型、超時(shí)key-value數(shù)據(jù)類型等。此處的數(shù)據(jù)類型均為廣義的數(shù)據(jù)類型,即符合該數(shù)據(jù)類型特點(diǎn)的數(shù)據(jù),而不是僅僅限定為數(shù)據(jù)類型定義為具體的如List、Hash Table等的數(shù)據(jù)類型。
步驟S206,判斷請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型是否為鏈表。
在確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型后,判斷請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型是否為鏈表,若是,執(zhí)行步驟S207。否則,本方法結(jié)束,不做處理。本發(fā)明主要針對(duì)數(shù)據(jù)類型為鏈表數(shù)據(jù)類型的數(shù)據(jù)查找請(qǐng)求進(jìn)行處理。
步驟S207,根據(jù)鏈表順序,執(zhí)行向前或向后查找的操作,獲取待查找數(shù)據(jù)的數(shù)據(jù)鍵及其對(duì)應(yīng)的數(shù)據(jù)值。
若數(shù)據(jù)查找請(qǐng)求中攜帶有待查找數(shù)據(jù)的數(shù)據(jù)鍵,如請(qǐng)求查找的數(shù)據(jù)包括數(shù)據(jù)鍵1-X-2,數(shù)據(jù)值a;數(shù)據(jù)鍵2-1-3,數(shù)據(jù)值b;數(shù)據(jù)鍵3-2-4,數(shù)據(jù)值c;數(shù)據(jù)鍵4-3-5,數(shù)據(jù)值d;數(shù)據(jù)鍵5-4-X,數(shù)據(jù)值e。數(shù)據(jù)查找請(qǐng)求中攜帶有待查找數(shù)據(jù)的數(shù)據(jù)鍵為3,若在查找時(shí)并不清楚請(qǐng)求查找的數(shù)據(jù)中的任何順序,可以先查看請(qǐng)求查找的數(shù)據(jù)開(kāi)始位置的數(shù)據(jù)鍵1-X-2,再執(zhí)行依次向后查找的操作。再次查看數(shù)據(jù)鍵2-1-3,可以得知數(shù)據(jù)鍵3為本次數(shù)據(jù)鍵2的后一數(shù)據(jù),執(zhí)行向后查找操作即可獲取到數(shù)據(jù)鍵3及其對(duì)應(yīng)的數(shù)據(jù)值c;或者在查找時(shí)已經(jīng)獲取到數(shù)據(jù)鍵2-1-3,根據(jù)數(shù)據(jù)鍵中所標(biāo)明的順序,可以執(zhí)行向后查找的操作,獲取到數(shù)據(jù)鍵3及其對(duì)應(yīng)的數(shù)據(jù)值c;或者在查找時(shí)已經(jīng)獲取到數(shù)據(jù)鍵4-3-5,根據(jù)數(shù)據(jù)鍵中所標(biāo)明的順序,可以執(zhí)行向前查找的操作,獲取到數(shù)據(jù)鍵3及其對(duì)應(yīng)的數(shù)據(jù)值c。
進(jìn)一步,若數(shù)據(jù)查找請(qǐng)求中攜帶有待查找數(shù)據(jù)的鏈表順序序號(hào)時(shí),步驟S207還可以進(jìn)一步替換為根據(jù)待查找數(shù)據(jù)的鏈表順序序號(hào),獲取待查找數(shù)據(jù)的數(shù)據(jù)鍵及其對(duì)應(yīng)的數(shù)據(jù)值(圖中未示出)。如請(qǐng)求查找的數(shù)據(jù)本身具有順序,第1個(gè)數(shù)據(jù)的數(shù)據(jù)鍵1-X-2,數(shù)據(jù)值a;第2個(gè)數(shù)據(jù)的數(shù)據(jù)鍵2-1-3,數(shù)據(jù)值b;第3個(gè)數(shù)據(jù)的數(shù)據(jù)鍵3-2-4,數(shù)據(jù)值c;第4個(gè)數(shù)據(jù)的數(shù)據(jù)鍵4-3-5,數(shù)據(jù)值d;第5個(gè)數(shù)據(jù)的數(shù)據(jù)鍵5-4-X,數(shù)據(jù)值e。數(shù)據(jù)查找請(qǐng)求中攜帶有待查找數(shù)據(jù)的鏈表順序序號(hào)為4,可以直接從請(qǐng)求查找的數(shù)據(jù)中獲取第4個(gè)數(shù)據(jù)的數(shù)據(jù)鍵4-3-5,及其對(duì)應(yīng)的數(shù)據(jù)值d。
以上為舉例說(shuō)明,實(shí)施時(shí)根據(jù)具體情況進(jìn)行設(shè)置,此處不做限定。
根據(jù)本發(fā)明提供的數(shù)據(jù)存儲(chǔ)和查找方法,在存儲(chǔ)時(shí)可以進(jìn)一步存儲(chǔ)請(qǐng)求存儲(chǔ)的數(shù)據(jù)的元信息,方便用戶對(duì)請(qǐng)求存儲(chǔ)的數(shù)據(jù)的相關(guān)信息如數(shù)據(jù)個(gè)數(shù)、數(shù)據(jù)長(zhǎng)度等更了解,以便執(zhí)行對(duì)數(shù)據(jù)的相關(guān)操作。同時(shí),根據(jù)數(shù)據(jù)查找請(qǐng)求所攜帶的信息不同,可以根據(jù)鏈表順序,執(zhí)行向前或向后查找的操作,獲取待查找數(shù)據(jù)的數(shù)據(jù)鍵及其對(duì)應(yīng)的數(shù)據(jù)值,或者根據(jù)待查找數(shù)據(jù)的鏈表順序序號(hào),獲取待查找數(shù)據(jù)的數(shù)據(jù)鍵及其對(duì)應(yīng)的數(shù)據(jù)值。充分利用鏈表本身具有順序的特性,極大的提高了查找的速度,節(jié)省查找時(shí)花費(fèi)的時(shí)間和終端設(shè)備的開(kāi)銷。
圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的數(shù)據(jù)存儲(chǔ)和查找裝置的功能框圖。如圖3所示,數(shù)據(jù)存儲(chǔ)和查找裝置包括如下模塊:
存儲(chǔ)請(qǐng)求模塊310,適于接收數(shù)據(jù)存儲(chǔ)請(qǐng)求,確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型。
存儲(chǔ)請(qǐng)求模塊310接收數(shù)據(jù)存儲(chǔ)請(qǐng)求后,先確定該請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型。請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型可能存在多種多樣,如鏈表數(shù)據(jù)類型、哈希數(shù)據(jù)類型、set數(shù)據(jù)類型、zset數(shù)據(jù)類型、key-value數(shù)據(jù)類型、超時(shí)key-value數(shù)據(jù)類型等。其中,鏈表數(shù)據(jù)類型的數(shù)據(jù)與其他各種數(shù)據(jù)類型不同之處在于鏈表數(shù)據(jù)類型的數(shù)據(jù)具有前后順序,而其他各種數(shù)據(jù)類型不具有前后順序。本發(fā)明主要針對(duì)數(shù)據(jù)類型為鏈表數(shù)據(jù)類型的數(shù)據(jù)存儲(chǔ)請(qǐng)求進(jìn)行處理。
存儲(chǔ)模塊320,適于若請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則將數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式按照鏈表順序進(jìn)行存儲(chǔ)。
存儲(chǔ)請(qǐng)求模塊310確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型后,若請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,存儲(chǔ)模塊320對(duì)請(qǐng)求存儲(chǔ)的數(shù)據(jù)進(jìn)行存儲(chǔ)。存儲(chǔ)時(shí),存儲(chǔ)模塊320將請(qǐng)求存儲(chǔ)的數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式進(jìn)行存儲(chǔ)。其中,數(shù)據(jù)鍵值對(duì)中包含了數(shù)據(jù)鍵和數(shù)據(jù)值,即Key和Value。數(shù)據(jù)值為鏈表中的數(shù)據(jù),數(shù)據(jù)鍵可以為鏈表中的順序,如1、2、3、4等;或者存儲(chǔ)模塊320還可以為預(yù)先設(shè)置的用于標(biāo)識(shí)鏈表中數(shù)據(jù)的特定值,此處不做限定。
同時(shí),存儲(chǔ)模塊320在存儲(chǔ)時(shí),數(shù)據(jù)存儲(chǔ)的順序按照鏈表本身的前后順序進(jìn)行存儲(chǔ)。為記錄鏈表順序,存儲(chǔ)模塊320在數(shù)據(jù)鍵中除記錄當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵,還記錄當(dāng)前數(shù)據(jù)的前一數(shù)據(jù)的數(shù)據(jù)鍵、當(dāng)前數(shù)據(jù)的后一數(shù)據(jù)的數(shù)據(jù)鍵。如當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵為3,當(dāng)前數(shù)據(jù)的前一數(shù)據(jù)的數(shù)據(jù)鍵為2,當(dāng)前數(shù)據(jù)的后一數(shù)據(jù)的數(shù)據(jù)鍵為4,存儲(chǔ)模塊320將當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵可以記錄為3-2-4;通過(guò)數(shù)據(jù)鍵可以很清楚的了解到數(shù)據(jù)的順序?yàn)?、3、4;或者當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵為1,當(dāng)前數(shù)據(jù)沒(méi)有前一數(shù)據(jù),當(dāng)前數(shù)據(jù)的后一數(shù)據(jù)的數(shù)據(jù)鍵為2,存儲(chǔ)模塊320將當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵可以記錄為1-X-2;通過(guò)數(shù)據(jù)鍵可以很清楚的了解到數(shù)據(jù)的順序?yàn)?、2;或者當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵為5,當(dāng)前數(shù)據(jù)沒(méi)有后一數(shù)據(jù),當(dāng)前數(shù)據(jù)的前一數(shù)據(jù)的數(shù)據(jù)鍵為4,存儲(chǔ)模塊320將當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵可以記錄為5-4-X;通過(guò)數(shù)據(jù)鍵可以很清楚的了解到數(shù)據(jù)的順序?yàn)?、5。上述舉例說(shuō)明中,數(shù)據(jù)鍵第一位為當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵,第二位為當(dāng)前數(shù)據(jù)的前一數(shù)據(jù)的數(shù)據(jù)鍵,第三位為當(dāng)前數(shù)據(jù)的后一數(shù)據(jù)的數(shù)據(jù)鍵,存儲(chǔ)模塊320將之間通過(guò)“-”進(jìn)行連接,當(dāng)前一數(shù)據(jù)的數(shù)據(jù)鍵或后一數(shù)據(jù)的數(shù)據(jù)鍵不存在時(shí),存儲(chǔ)模塊320用“X”代替。在具體記錄時(shí),關(guān)于當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵、當(dāng)前數(shù)據(jù)的數(shù)據(jù)鍵的前一數(shù)據(jù)的數(shù)據(jù)鍵和后一數(shù)據(jù)的數(shù)據(jù)鍵的記錄方式、連接方式等,可以根據(jù)實(shí)施情況進(jìn)行設(shè)置,此處不做限定。
進(jìn)一步,存儲(chǔ)模塊320還適于統(tǒng)計(jì)請(qǐng)求存儲(chǔ)的數(shù)據(jù)的元信息,其中,元信息包括如數(shù)據(jù)個(gè)數(shù)、數(shù)據(jù)長(zhǎng)度等信息。存儲(chǔ)模塊320將元信息以數(shù)據(jù)鍵值對(duì)的方式進(jìn)行存儲(chǔ)。存儲(chǔ)時(shí),存儲(chǔ)模塊320以數(shù)據(jù)鍵值對(duì)的方式,如數(shù)據(jù)鍵標(biāo)明要存儲(chǔ)的信息,數(shù)據(jù)值存儲(chǔ)具體的數(shù)據(jù);具體的如數(shù)據(jù)鍵為size,數(shù)據(jù)值為5,標(biāo)明數(shù)據(jù)個(gè)數(shù)為5個(gè)等。存儲(chǔ)模塊320存儲(chǔ)的元信息可以根據(jù)實(shí)際情況進(jìn)行設(shè)置,此處不做限定。
查找請(qǐng)求模塊330,適于接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型。
查找請(qǐng)求模塊330接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型。請(qǐng)求查找的數(shù)據(jù)可以為如鏈表數(shù)據(jù)類型、哈希數(shù)據(jù)類型、set數(shù)據(jù)類型、zset數(shù)據(jù)類型、key-value數(shù)據(jù)類型、超時(shí)key-value數(shù)據(jù)類型等。此處的數(shù)據(jù)類型均為廣義的數(shù)據(jù)類型,即符合該數(shù)據(jù)類型特點(diǎn)的數(shù)據(jù),而不是僅僅限定為數(shù)據(jù)類型定義為具體的如List、Hash Table等的數(shù)據(jù)類型。
查找模塊340,適于若請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則根據(jù)鏈表順序,獲取對(duì)應(yīng)的數(shù)據(jù)值。
查找請(qǐng)求模塊330在確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型后,若請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,查找模塊340根據(jù)鏈表順序,獲取對(duì)應(yīng)的數(shù)據(jù)值。此處所指的鏈表為廣義的鏈表,即符合鏈表特征,數(shù)據(jù)間具有順序限定的所有數(shù)據(jù)類型。
由于鏈表數(shù)據(jù)類型本身的順序特性,數(shù)據(jù)間具有前后順序關(guān)系。因此查找模塊340根據(jù)鏈表順序,可以快速的獲取到對(duì)應(yīng)的數(shù)據(jù)值。查找模塊340根據(jù)請(qǐng)求查找的數(shù)據(jù)中的順序關(guān)系和接收到的數(shù)據(jù)查找請(qǐng)求,如請(qǐng)求查找的數(shù)據(jù)包括數(shù)據(jù)鍵1-X-2,數(shù)據(jù)值a;數(shù)據(jù)鍵2-1-3,數(shù)據(jù)值b;數(shù)據(jù)鍵3-2-4,數(shù)據(jù)值c;數(shù)據(jù)鍵4-3-5,數(shù)據(jù)值d;數(shù)據(jù)鍵5-4-X,數(shù)據(jù)值e。數(shù)據(jù)查找請(qǐng)求為查找數(shù)據(jù)鍵為3的請(qǐng)求,查找模塊340可以根據(jù)請(qǐng)求查找的數(shù)據(jù)間的順序,執(zhí)行依次向后或向前的操作,來(lái)獲取到數(shù)據(jù)鍵為3的數(shù)據(jù)值。
查找模塊340進(jìn)一步適于根據(jù)鏈表順序,執(zhí)行向前或向后查找的操作,以獲取待查找數(shù)據(jù)的數(shù)據(jù)鍵及其對(duì)應(yīng)的數(shù)據(jù)值。若數(shù)據(jù)查找請(qǐng)求中攜帶有待查找數(shù)據(jù)的數(shù)據(jù)鍵,如請(qǐng)求查找的數(shù)據(jù)包括數(shù)據(jù)鍵1-X-2,數(shù)據(jù)值a;數(shù)據(jù)鍵2-1-3,數(shù)據(jù)值b;數(shù)據(jù)鍵3-2-4,數(shù)據(jù)值c;數(shù)據(jù)鍵4-3-5,數(shù)據(jù)值d;數(shù)據(jù)鍵5-4-X,數(shù)據(jù)值e。數(shù)據(jù)查找請(qǐng)求中攜帶有待查找數(shù)據(jù)的數(shù)據(jù)鍵為3,若在查找時(shí)并不清楚請(qǐng)求查找的數(shù)據(jù)中的任何順序,查找模塊340可以先查看請(qǐng)求查找的數(shù)據(jù)開(kāi)始位置的數(shù)據(jù)鍵1-X-2,再執(zhí)行依次向后查找的操作。查找模塊340再次查看數(shù)據(jù)鍵2-1-3,可以得知數(shù)據(jù)鍵3為本次數(shù)據(jù)鍵2的后一數(shù)據(jù),查找模塊340執(zhí)行向后查找操作即可獲取到數(shù)據(jù)鍵3及其對(duì)應(yīng)的數(shù)據(jù)值c;或者在查找時(shí)查找模塊340已經(jīng)獲取到數(shù)據(jù)鍵2-1-3,根據(jù)數(shù)據(jù)鍵中所標(biāo)明的順序,查找模塊340可以執(zhí)行向后查找的操作,獲取到數(shù)據(jù)鍵3及其對(duì)應(yīng)的數(shù)據(jù)值c;或者查找模塊340在查找時(shí)已經(jīng)獲取到數(shù)據(jù)鍵4-3-5,根據(jù)數(shù)據(jù)鍵中所標(biāo)明的順序,查找模塊340可以執(zhí)行向前查找的操作,獲取到數(shù)據(jù)鍵3及其對(duì)應(yīng)的數(shù)據(jù)值c。
查找模塊340進(jìn)一步適于根據(jù)待查找數(shù)據(jù)的鏈表順序序號(hào),獲取待查找數(shù)據(jù)的數(shù)據(jù)鍵及其對(duì)應(yīng)的數(shù)據(jù)值。若數(shù)據(jù)查找請(qǐng)求中攜帶有待查找數(shù)據(jù)的鏈表順序序號(hào),如請(qǐng)求查找的數(shù)據(jù)本身具有順序,第1個(gè)數(shù)據(jù)的數(shù)據(jù)鍵1-X-2,數(shù)據(jù)值a;第2個(gè)數(shù)據(jù)的數(shù)據(jù)鍵2-1-3,數(shù)據(jù)值b;第3個(gè)數(shù)據(jù)的數(shù)據(jù)鍵3-2-4,數(shù)據(jù)值c;第4個(gè)數(shù)據(jù)的數(shù)據(jù)鍵4-3-5,數(shù)據(jù)值d;第5個(gè)數(shù)據(jù)的數(shù)據(jù)鍵5-4-X,數(shù)據(jù)值e。數(shù)據(jù)查找請(qǐng)求中攜帶有待查找數(shù)據(jù)的鏈表順序序號(hào)為4,查找模塊340可以直接從請(qǐng)求查找的數(shù)據(jù)中獲取第4個(gè)數(shù)據(jù)的數(shù)據(jù)鍵4-3-5,及其對(duì)應(yīng)的數(shù)據(jù)值d。
以上為舉例說(shuō)明,實(shí)施時(shí)根據(jù)具體情況進(jìn)行設(shè)置,此處不做限定。
根據(jù)本發(fā)明提供的數(shù)據(jù)存儲(chǔ)和查找裝置,接收數(shù)據(jù)存儲(chǔ)請(qǐng)求,確定請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型;若請(qǐng)求存儲(chǔ)的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則將數(shù)據(jù)以數(shù)據(jù)鍵值對(duì)的方式按照鏈表順序進(jìn)行存儲(chǔ)。在存儲(chǔ)時(shí)還可以進(jìn)一步存儲(chǔ)請(qǐng)求存儲(chǔ)的數(shù)據(jù)的元信息,方便用戶對(duì)請(qǐng)求存儲(chǔ)的數(shù)據(jù)的相關(guān)信息如數(shù)據(jù)個(gè)數(shù)、數(shù)據(jù)長(zhǎng)度等更了解,以便執(zhí)行對(duì)數(shù)據(jù)的相關(guān)操作。接收數(shù)據(jù)查找請(qǐng)求,確定請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型;若請(qǐng)求查找的數(shù)據(jù)的數(shù)據(jù)類型為鏈表,則根據(jù)鏈表順序,獲取對(duì)應(yīng)的數(shù)據(jù)值。同時(shí),根據(jù)數(shù)據(jù)查找請(qǐng)求所攜帶的信息不同,可以根據(jù)鏈表順序,執(zhí)行向前或向后查找的操作,獲取待查找數(shù)據(jù)的數(shù)據(jù)鍵及其對(duì)應(yīng)的數(shù)據(jù)值,或者根據(jù)待查找數(shù)據(jù)的鏈表順序序號(hào),獲取待查找數(shù)據(jù)的數(shù)據(jù)鍵及其對(duì)應(yīng)的數(shù)據(jù)值。充分利用了鏈表本身具有順序的特性,極大的提高了查找的速度,節(jié)省查找時(shí)花費(fèi)的時(shí)間和終端設(shè)備的開(kāi)銷。
在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見(jiàn)的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。
在此處所提供的說(shuō)明書(shū)中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒(méi)有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書(shū)的理解。
類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開(kāi)并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開(kāi)的方法解釋成反映如下意圖:即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書(shū)所反映的那樣,發(fā)明方面在于少于前面公開(kāi)的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式的權(quán)利要求書(shū)由此明確地并入該具體實(shí)施方式,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。
本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中。可以把實(shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的所有特征以及如此公開(kāi)的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(shū)(包括伴隨的權(quán)利要求、摘要和附圖)中公開(kāi)的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。
此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書(shū)中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。
本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP)來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的數(shù)據(jù)存儲(chǔ)和查找裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。
應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。