一種存儲數(shù)據(jù)的方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種存儲數(shù)據(jù)的方法和裝置,屬于計算機(jī)【技術(shù)領(lǐng)域】。所述方法包括:接收待存儲于內(nèi)存的數(shù)據(jù),并獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型;當(dāng)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置;當(dāng)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表或哈希表時,為數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置;根據(jù)數(shù)據(jù)的存儲位置,將數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。本發(fā)明根據(jù)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型將數(shù)據(jù)按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題。
【專利說明】一種存儲數(shù)據(jù)的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)【技術(shù)領(lǐng)域】,特別涉及一種存儲數(shù)據(jù)的方法和裝置。
【背景技術(shù)】
[0002]隨著Java語言編程的發(fā)展,使用Java應(yīng)用程序時對于內(nèi)存的存儲過程出現(xiàn)了一些問題。傳統(tǒng)上使用Java語言開發(fā)的應(yīng)用程序在使用時對內(nèi)存進(jìn)行的存儲操作是由JVM(Java Virtual Machine, Java 虛擬機(jī))分配并靠 GC (Garbage Collection,垃圾回收)機(jī)制管理的堆內(nèi)存上進(jìn)行的,由于GC機(jī)制會造成的應(yīng)用程序不可控且不可預(yù)知的運(yùn)行暫停,進(jìn)而會降低應(yīng)用程序運(yùn)行時的吞吐量,隨著應(yīng)用程序內(nèi)存使用規(guī)模的擴(kuò)大,堆內(nèi)存與GC所造成的吞吐量下降程度會呈線性級甚至指數(shù)級增長,因此會導(dǎo)致應(yīng)用程序的單機(jī)和集群兩個維度的內(nèi)存規(guī)模受到很大程度的制約。
[0003]現(xiàn)有技術(shù)中通過系統(tǒng)層的解決思路,對Linux系統(tǒng)的內(nèi)核和JVM內(nèi)核進(jìn)行修改,使得應(yīng)用程序的在進(jìn)行內(nèi)存的存儲過程中消除GC所帶來的負(fù)面影響。
[0004]在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:
[0005]修改后的Linux系統(tǒng)的內(nèi)核和JVM內(nèi)核,無法兼容標(biāo)準(zhǔn)的Linux系統(tǒng)和JVM,進(jìn)而造成修改后的Linux系統(tǒng)的內(nèi)核和JVM內(nèi)核的升級和維護(hù)的困難,無法更新的升級的Linux系統(tǒng)以及JVM會降低用戶使用應(yīng)用程序的效率。
【發(fā)明內(nèi)容】
[0006]為了解決現(xiàn)有技術(shù)中對系統(tǒng)內(nèi)核以及虛擬機(jī)內(nèi)核修改后,無法對系統(tǒng)以及虛擬機(jī)進(jìn)行升級導(dǎo)致降低使用應(yīng)用程序的效率的問題,本發(fā)明實施例提供了一種存儲數(shù)據(jù)的方法和裝置。所述技術(shù)方案如下:
[0007]—方面,提供了一種存儲數(shù)據(jù)的方法,所述方法包括:
[0008]接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型;
[0009]當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為所述數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置;
[0010]當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表或哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置;
[0011]根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0012]其中,所述當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置,包括:
[0013]當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0014]根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0015]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的。
[0016]其中,所述根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中,包括:
[0017]根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0018]其中,所述當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置,包括:
[0019]當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0020]根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0021]在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號;
[0022]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
[0023]其中,所述在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號,包括:
[0024]在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用存儲空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0025]根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0026]根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
[0027]其中,所述根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中,包括:
[0028]根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中;
[0029]根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0030]其中,所述當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置,包括:
[0031]當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,根據(jù)哈希函數(shù)計算出所述數(shù)據(jù)對應(yīng)的哈希桶的存儲位置信息;
[0032]根據(jù)所述哈希桶的存儲位置信息,查找到所述哈希桶中保存的哈希鏈的存儲位置
信息;
[0033]在所述哈希桶中保存的哈希鏈的存儲位置信息對應(yīng)的哈希鏈中,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0034]根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0035]在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號;[0036]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
[0037]其中,所述在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號,包括:
[0038]在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于預(yù)設(shè)的變長存儲方式中的第一級存儲結(jié)構(gòu)中的索引序號;
[0039]根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0040]根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
[0041]其中,所述根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中,包括:
[0042]根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中;
[0043]根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0044]另一方面,提供了一種存儲數(shù)據(jù)的裝置,所述裝置包括:
[0045]接收模塊,用于接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型;
[0046]第一確定存儲位置模塊,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為所述數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置;
[0047]第二確定存儲位置模塊,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表或哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置;
[0048]存儲模塊,用于根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0049]其中,所述第二確定存儲位置模塊,包括:
[0050]第一索引序號確定單元,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0051]第二索引序號確定單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0052]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的。
[0053]其中,所述存儲模塊,包括:
[0054]第一鏈表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0055]其中,所述第二確定存儲位置模塊,包括:
[0056]第三索引序號確定單元,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0057]第四索引序號確定單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0058]第五索引序號確定單元,用于在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號。
[0059]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
[0060]其中,所述第五索引序號確定單元,包括:
[0061]第一索引序號確定子單元,用于在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用存儲空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0062]第二索引序號確定子單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0063]第三索引序號確定子單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
[0064]其中,所述存儲模塊,包括:
[0065]第二鏈表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中;
[0066]第三鏈表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0067]其中,所述第二確定存儲位置模塊,包括:
[0068]計算單元,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,根據(jù)哈希函數(shù)計算出所述數(shù)據(jù)對應(yīng)的哈希桶的存儲位置信息;
[0069]查找單元,用于根據(jù)所述哈希桶的存儲位置信息,查找到所述哈希桶中保存的哈希鏈的存儲位置信息;
[0070]第六索引序號確定單元,用于在所述哈希桶中保存的哈希鏈的存儲位置信息對應(yīng)的哈希鏈中,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0071]第七索引序號確定單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;[0072]第八索引序號確定單元,用于在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號;
[0073]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
[0074]其中,所述第八索引序號確定單元,包括:
[0075]第四索引序號確定子單元,用于在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于預(yù)設(shè)的變長存儲方式中的第一級存儲結(jié)構(gòu)中的索引序號;
[0076]第五索引序號確定子單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0077]第六索引序號確定子單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
[0078]其中,所述存儲模塊,包括:
[0079]第一哈希表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中;
[0080]第二哈希表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0081]本發(fā)明實施例提供的技術(shù)方案帶來的有益效果是:
[0082]通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
【專利附圖】
【附圖說明】
[0083]為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0084]圖1是本發(fā)明實施例一提供的存儲數(shù)據(jù)的方法流程圖;
[0085]圖2是本發(fā)明實施例一提供的存儲數(shù)據(jù)的方法中變長存儲方式的結(jié)構(gòu)示意圖;
[0086]圖3是本發(fā)明實施例一提供的存儲數(shù)據(jù)的方法中定長存儲方式的結(jié)構(gòu)示意圖;
[0087]圖4是本發(fā)明實施例二提供的存儲數(shù)據(jù)的方法流程圖;
[0088]圖5是本發(fā)明實施例三提供的存儲數(shù)據(jù)的方法流程圖;
[0089]圖6是本發(fā)明實施例四提供的存儲數(shù)據(jù)的方法流程圖;
[0090] 圖7是本發(fā)明實施例五提供的存儲數(shù)據(jù)的裝置結(jié)構(gòu)示意圖;
[0091]圖8是本發(fā)明實施例六提供的存儲數(shù)據(jù)的裝置結(jié)構(gòu)示意圖;
[0092]圖9是本發(fā)明實施例七提供的存儲數(shù)據(jù)的裝置結(jié)構(gòu)示意圖;
[0093]圖10是本發(fā)明實施例八提供的存儲數(shù)據(jù)的裝置結(jié)構(gòu)示意圖。
【具體實施方式】
[0094]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進(jìn)一步地詳細(xì)描述。
[0095]實施例一
[0096]本發(fā)明實施例提供了一種存儲數(shù)據(jù)的方法,參見圖1。
[0097]需要說明的是,在實現(xiàn)本發(fā)明的存儲數(shù)據(jù)的方法之前,構(gòu)建了一種JAVA編程庫,它自下而上分為兩個層次,分別是:存儲引擎層和數(shù)據(jù)結(jié)構(gòu)層。其中,存儲引擎層包括變長存儲引擎和定長存儲引擎兩個部分,數(shù)據(jù)結(jié)構(gòu)層包括數(shù)組、鏈表和哈希表等常用的數(shù)據(jù)結(jié)構(gòu)。存儲引擎層整體上基于直接內(nèi)存進(jìn)行構(gòu)建,從而避免了堆內(nèi)存的使用和GC的影響,其中直接內(nèi)存即為Linux系統(tǒng)直接進(jìn)行管理的內(nèi)存。數(shù)據(jù)結(jié)構(gòu)層整體上基于存儲引擎層進(jìn)行構(gòu)建,提供了常用的數(shù)據(jù)結(jié)構(gòu),從而讓應(yīng)用的開發(fā)可以使用這些數(shù)據(jù)結(jié)構(gòu)來方便地實現(xiàn)高效率超大內(nèi)存的應(yīng)用程序。
[0098]變長存儲引擎是一種SlabFamily/Slab/Chunk的三級存儲結(jié)構(gòu),其結(jié)構(gòu)參見如圖
2。該結(jié)構(gòu)將要管理的全部內(nèi)存空間劃分為多個SlabFamily (0,I,…,M),每個SlabFamily劃分為多個Slab (0,1,…,N),每個Slab又劃分為多個Chunk (0,1,…,P)。
[0099]變長存儲引擎包含三個預(yù)先指定的參數(shù),分別是MinSize (最小數(shù)據(jù)塊大小)、MaxSize(最大數(shù)據(jù)塊大小)和Factor(比例因子)。從MinSize到MaxSize按照Factor計算出一個等比數(shù)列 SizeO, Sizel,..., SizeM,其中 SizeO 即 MinSize, SizeM 是不小于 MaxSize的第一個整數(shù)。這個等比數(shù)列 SizeO, Sizel,…,SizeM 與 SlabFamilyO, SlabFamilyl,…,SlabFamilyM--對應(yīng),即全部的SlabFamily是依據(jù)這個等比數(shù)列創(chuàng)建出來的,將某個SlabFamily在這個等比數(shù)列中的對應(yīng)值叫做這個SlabFamily的“數(shù)據(jù)塊值”。
[0100]對于某個SlabFamilyA(0≤A≤M),它的數(shù)據(jù)塊值是SizeA,因此該SlabFamilyA就用來存儲不大于SizeA的實際數(shù)據(jù)塊。即假如有一個大小為X的實際數(shù)據(jù)塊,通過對等比數(shù)列SizeO, Sizel,…,SizeM進(jìn)行二分查找確定這個實際數(shù)據(jù)塊在其中的插入位置為A(O≤A≤M,Size (A-1) <X ≤ SizeA),那么這個實際數(shù)據(jù)塊就會存放在SlabFamilyA中。
[0101]SlabFamily內(nèi)部包含兩個部分=Slab鏈表和Slab位圖。Slab鏈表用鏈表結(jié)構(gòu)串聯(lián)起來全部Slab(0,I,…,N),實際數(shù)據(jù)塊存放在某個具體的Slab中。Slab位圖是用二進(jìn)制位集合指示各個Slab是否已存滿,用I表示已存滿,用O表示未存滿。在存放數(shù)據(jù)時,對Slab位圖進(jìn)行二分查找,若找到一個未存滿的Slab,則可把實際數(shù)據(jù)塊放入其中;若找不到,則說明空間不足,需要新創(chuàng)建一個Slab再放置數(shù)據(jù)。此外,SlabFamily也會用單獨的線程來定期檢查是否全部Slab都已存滿,如果存滿則SlabFamily將新創(chuàng)建一個Slab并把它掛到Slab鏈表的末尾,以保證有足夠的空間用于存儲。同時,SlabFamily還會定期檢查完全空閑的Slab的數(shù)量,當(dāng)這個數(shù)量較多時,SlabFamily將刪除其中一部分Slab以釋放相應(yīng)的空閑空間。
[0102]Slab由SlabFamily負(fù)責(zé)創(chuàng)建和管理,Slab內(nèi)部包含兩部分:直接內(nèi)存區(qū)和Chunk位圖。直接內(nèi)存區(qū)藉由ByteBuffer.allocateDirect O調(diào)用創(chuàng)建出來,可以讓應(yīng)用程序高效方便地對進(jìn)行數(shù)據(jù)讀寫。Slab的直接內(nèi)存區(qū)是實際數(shù)據(jù)塊的存放地,它是一個長度固定的內(nèi)存區(qū)塊(通常是IM字節(jié)大小),并且在邏輯上被劃分為若干個大小相同的Chunk(O, I, , P)。Chunk的大小等同于這個Slab所在的SlabFamily的數(shù)據(jù)塊值,Chunk是實際數(shù)據(jù)塊的最終存儲地。Chunk位圖用二進(jìn)制位集合指示各個Chunk是否已被占用,用I表示已占用,用O表示未占用。在存放數(shù)據(jù)時對Chunk位圖進(jìn)行二分查找:若找到一個未占用的Chunk,則可讓實際數(shù)據(jù)塊占據(jù)之;若找不到,則說明空間不足,需要換一個Slab再做嘗試。
[0103]對于變長存儲引擎SlabFamily/Slab/Chunk三級存儲結(jié)構(gòu)的原理,應(yīng)用程序存放一個實際數(shù)據(jù)塊到變長存儲引擎中的流程是:(I)根據(jù)實際數(shù)據(jù)塊的大小找到應(yīng)該存放到的SlabFamilyA ; (2)根據(jù)SlabFamilyA的Slab位圖找到可供存放的SlabB ; (3)根據(jù)SlabB的Chunk位圖找到可供存放的ChunkC ; (4)在ChunkC的直接內(nèi)存區(qū)上寫入實際數(shù)據(jù)塊以最終完成存放,并把SlabFamilyA/SlabB/ChunkC的索引序號組A,B,C返回給應(yīng)用程序以告知最終存放位置。反之,對于應(yīng)用程序訪問變長存儲引擎中索引序號組為A,B, C的一個實際數(shù)據(jù)塊的流程是:(O定位到SlabFamilyA ; (2)定位到SlabFamilyA中的SlabB ; (3)定位到SlabB中的ChunkC ; (4)在ChunkC的直接內(nèi)存區(qū)上讀取實際數(shù)據(jù)塊以最終完成訪問。刪除一個實際數(shù)據(jù)塊時,將它對應(yīng)的Chunk位圖中的二進(jìn)制位標(biāo)記為O即可從邏輯意義上刪除它。
[0104]定長存儲引擎可以看作是變長存儲引擎在存儲固定長度數(shù)據(jù)塊時的一個特例,因此其結(jié)構(gòu)與變長存儲引擎類似。定長存儲引擎是一種Slab/Chunk的兩級存儲結(jié)構(gòu),其結(jié)構(gòu)參見圖3,它把要管理的內(nèi)存空間劃分為多個Slab (O, 1,…,M),每個Slab又劃分為多個Chunk(0,I,…,N)。與變長存儲引擎相比,定長存儲引擎事實上就是少了 SlabFamily這個層級,而Slab/Chunk這兩級的原理和實現(xiàn)幾乎是完全相同的。
[0105]定長存儲引擎根據(jù)一個預(yù)先指定的參數(shù)FixSize (固定數(shù)據(jù)塊大小),把創(chuàng)建出Slab從邏輯上劃分為相應(yīng)固定大小的Chunk。定長存儲引擎仍然用Slab鏈表和Slab位圖這兩部分來管理Slab,同樣也用單獨的線程來檢查全部Slab的存滿或空閑狀態(tài)并相應(yīng)進(jìn)行創(chuàng)建或釋放操作。Slab仍然用直接內(nèi)存區(qū)和Chunk位圖來管理Chunk,并最終完成實際數(shù)據(jù)塊的存儲。
[0106]應(yīng)用程序存放一個實際數(shù)據(jù)塊到定長存儲引擎中的流程是:(I)根據(jù)Slab位圖找到可供存放的SlabA ; (2)根據(jù)SlabA的Chunk位圖找到可供存放的ChunkB ; (3)在ChunkB的直接內(nèi)存區(qū)上寫入實際數(shù)據(jù)塊以最終完成存放,并把SlabA/ChunkB的索引序號組A,B返回給應(yīng)用程序以告知最終存放位置。反之,應(yīng)用程序訪問定長存儲引擎中索引序號組為A, B的一個實際數(shù)據(jù)塊的流程是:(I)定位到SlabA ; (2)定位到SlabA中的ChunkB ; (3)在ChunkB的直接內(nèi)存區(qū)上讀取實際數(shù)據(jù)塊以最終完成訪問。刪除一個實際數(shù)據(jù)塊是通過修改Chunk位圖的二進(jìn)制位來實現(xiàn)邏輯意義上的刪除。
[0107]存儲數(shù)據(jù)的方法流程包括:
[0108]101:接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型;
[0109]102:當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為所述數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置;
[0110]103:當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表或哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置;
[0111]104:根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0112]本發(fā)明實施例通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
[0113]實施例二
[0114]本發(fā)明實施例提供了一種存儲數(shù)據(jù)的方法,參見圖4,需要說明的是本發(fā)明實施例是以鏈表類型的數(shù)據(jù)結(jié)構(gòu)對應(yīng)的數(shù)據(jù)進(jìn)行存儲。
[0115]方法流程包括:
[0116]401:接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型。
[0117]402:當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置。
[0118]具體的,對于鏈表類型的數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù),可以根據(jù)該數(shù)據(jù)的數(shù)據(jù)部分的固定長度或非固定長度兩種類型分別使用定長和變長存儲方式進(jìn)行存儲。
[0119]當(dāng)數(shù)據(jù)的數(shù)據(jù)部分為固定長度時:
[0120]步驟402可以具體為:
[0121]4021:當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號。
[0122]當(dāng)數(shù)據(jù)的數(shù)據(jù)類型為固定長度時,將數(shù)據(jù)中的指針部分以及數(shù)據(jù)部分按照定長存儲方式進(jìn)行存儲。其中,定長存儲方式中的第一級位圖即對應(yīng)定長存儲引擎中的Slab位圖,查找空閑的并且可以容納下數(shù)據(jù)的定長存儲方式中的第一級存儲結(jié)構(gòu)SlabA。
[0123]4022:根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號。
[0124]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的。
[0125]在定長存儲方式中的第一級存儲結(jié)構(gòu)SlabA中,查詢SlabA對應(yīng)的Chunk位圖,即在SlabA中查詢第二級位圖中空閑的位置,作為存儲數(shù)據(jù)塊的存儲之地ChunkB。
[0126]在本發(fā)明實施例中,根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中,數(shù)據(jù)的存儲方式為:
[0127]403:根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0128]數(shù)據(jù)的指針部分是所指向的另一個元素存儲在定長存儲引擎中的索引序號組。該索引序號組即為步驟4021和步驟4022中查找到的SlabA和ChunkB中的標(biāo)號A和B,該索引值為兩個長整型數(shù)值,總共固定是16個字節(jié)。
[0129]當(dāng)數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時:
[0130]步驟402可以具體為:
[0131]4024:當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號。
[0132]當(dāng)數(shù)據(jù)的數(shù)據(jù)類型為非固定長度時,將數(shù)據(jù)中的指針部分以及數(shù)據(jù)部分按照定長存儲方式和變長存儲方式混合進(jìn)行存儲。通過定長存儲方式存儲數(shù)據(jù)的指針部分和數(shù)據(jù)部分通過變長存儲方式存儲的存儲位置信息。
[0133]其中,首先對通過定長存儲方式查找數(shù)據(jù)存儲的位置,定長存儲方式中的第一級位圖即對應(yīng)定長存儲引擎中的Slab位圖,查找空閑的并且可以容納下數(shù)據(jù)的定長存儲方式中的第一級存儲結(jié)構(gòu)的索引序號SlabA。
[0134]4025:根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號。
[0135]在定長存儲方式中的第一級存儲結(jié)構(gòu)SlabA中,查詢SlabA對應(yīng)的Chunk位圖,即在SlabA中查詢第二級位圖中空閑的位置,作為存儲數(shù)據(jù)塊的存儲之地ChunkB。
[0136]4026:在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號。[0137]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
[0138]其中,步驟4026可以具體為:
[0139]40261:在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用存儲空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號。
[0140]在變長存儲方式中查找存儲數(shù)據(jù)的數(shù)據(jù)部分的位置。根據(jù)數(shù)據(jù)的數(shù)據(jù)部分大小來確定SlabFamilyA的容量可以滿足該數(shù)據(jù)的存儲。SlabFamilyA即變長存儲方式中的第一級存儲結(jié)構(gòu)的索引序號。
[0141]40262:根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號。
[0142]在SlabFamilyA中的Slab位圖中查找可以存儲該數(shù)據(jù)的SlabB,其中SlabB即第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,Slab位圖即第一級存儲結(jié)構(gòu)中的第二級位圖。
[0143]40263:根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
[0144]在SlabFamilyA中的SlabB中根據(jù)Chunk位圖查找可以存儲該數(shù)據(jù)的ChunkC,其中ChunkC即第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,Chunk位圖即第三級位圖。
[0145]404:根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0146]本步驟對于鏈表數(shù)據(jù)結(jié)構(gòu)類型中,數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時,存儲數(shù)據(jù)的過程。其中步驟404可以具體為:
[0147]4041:根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0148]在SlabFamilyA中的SlabB中的ChunkC上存儲該數(shù)據(jù)的數(shù)據(jù)部分,并將索引序號SlabFamilyA, SlabB, ChunkC返回并通過定長存儲方式進(jìn)行存儲。
[0149]4042:根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0150]本發(fā)明實施例通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
[0151]實施例三
[0152]本發(fā)明實施例提供了一種存儲數(shù)據(jù)的方法,參見圖5,需要說明的是本發(fā)明實施例是以哈希表類型的數(shù)據(jù)結(jié)構(gòu)對應(yīng)的數(shù)據(jù)進(jìn)行存儲。進(jìn)一步的,本發(fā)明中的步驟描述與實施例二中某些的步驟描述相同,在此不再贅述。
[0153]方法流程包括:
[0154]501:接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型。
[0155]502:當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置。
[0156]具體的,對于哈希表類型的數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù),哈希表通常的實現(xiàn)包括兩個部分:哈希桶和哈希鏈。哈希桶通過數(shù)組數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),哈希鏈用變長存儲的方式存儲。哈希桶和哈希鏈?zhǔn)撬袛?shù)據(jù)共享的,是一體的不可分隔的,哈希桶有多個,每個哈希桶關(guān)聯(lián)著一個哈希鏈,每個數(shù)據(jù)在哈希桶和哈希鏈上都有唯一的一個位置。
[0157]因此步驟502可以具體為:
[0158]5021:當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,根據(jù)哈希函數(shù)計算出所述數(shù)據(jù)對應(yīng)的哈希桶的存儲位置信息。
[0159]5022:根據(jù)所述哈希桶的存儲位置信息,查找到所述哈希桶中保存的哈希鏈的存
儲位置信息。
[0160]具體的,在哈希鏈的存儲位置中對待保存的數(shù)據(jù)進(jìn)行保存。哈希鏈上的每個元素作為一個實際數(shù)據(jù)塊存儲到變長存儲引擎中,每個元素包括兩部分:指針部分和數(shù)據(jù)部分。指針部分是所指向的另一個元素存儲在變長存儲引擎中的索引序號組,從前面變長存儲引擎的描述中可知,這個索引序號組是一個形如A,B, C的三元組,即根據(jù)變長存儲方式中得到的三級存儲結(jié)構(gòu)的索引序號。本質(zhì)上是三個長整型數(shù)值,共計24個字節(jié)。數(shù)據(jù)部分是需要存放到哈希表中的鍵值對數(shù)據(jù),是變長數(shù)據(jù)。因此數(shù)據(jù)的指針部分通過定長存儲的方式進(jìn)行保存,數(shù)據(jù)部分通過變長的方式進(jìn)行保存,并將數(shù)據(jù)部分通過變長存儲的方式保存時的索引序號通過定長存儲的方式與數(shù)據(jù)的指針部分一并進(jìn)行保存。具體的保存方式與實施例二中描述非固定長度的數(shù)據(jù)的數(shù)據(jù)部分保存的方式相同,因此在下述的步驟中具體的描述與實施例二中4024-40263中的描述相同,在此不再贅述。
[0161]5023:在所述哈希桶中保存的哈希鏈的存儲位置信息對應(yīng)的哈希鏈中,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號。
[0162]5024:根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號。
[0163]5025:在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號;
[0164]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
[0165]其中,步驟5025具體為:
[0166]50251:在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用存儲空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號。
[0167]50252:根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號。
[0168]50253:根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
[0169]503:根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0170]其中步驟503可以具體為:
[0171]5031:根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0172]5032:根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0173]本發(fā)明實施例通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
[0174]實施例四
[0175]本發(fā)明實施例提供了一種存儲數(shù)據(jù)的方法,參見圖6,需要說明的是本發(fā)明實施例是以數(shù)組類型的數(shù)據(jù)結(jié)構(gòu)對應(yīng)的數(shù)據(jù)進(jìn)行存儲。
[0176]601:接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型;
[0177]602:當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為所述數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置。
[0178]直接內(nèi)存區(qū)由ByteBuffer.alocateDirect O調(diào)用創(chuàng)建出來,由于它本身可以通過索引值訪問任意一個字節(jié)數(shù)據(jù),這樣就可把它等價視為一個字節(jié)數(shù)組。因此基于直接內(nèi)存區(qū)來實現(xiàn)數(shù)組的數(shù)據(jù)結(jié)構(gòu)的過程,例如:實現(xiàn)一個長整形數(shù)組,每個數(shù)組元素長度為8字節(jié),只需要從邏輯上把直接內(nèi)存區(qū)每8個字節(jié)劃分為一個長整型數(shù)據(jù),并使用putLongO和getLongO方法來進(jìn)行寫入和讀取就可以了。
[0179]603:根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0180]本發(fā)明實施例通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
[0181]實施例五
[0182]本發(fā)明實施例提供了 一種存儲數(shù)據(jù)的裝置,參見圖7,所述裝置包括:
[0183]接收模塊701,用于接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型;
[0184]第一確定存儲位置模塊702,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為所述數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置;
[0185]第二確定存儲位置模塊703,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表或哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置;
[0186]存儲模塊704,用于根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0187]本發(fā)明實施例通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
[0188]實施例六[0189]本發(fā)明實施例提供了 一種存儲數(shù)據(jù)的裝置,參見圖8,所述裝置包括:
[0190]接收模塊801,用于接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型;
[0191]第二確定存儲位置模塊802,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置;
[0192]存儲模塊803,用于根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0193]其中,在【具體實施方式】中第二確定存儲位置模塊802在存儲的數(shù)據(jù)的數(shù)據(jù)部分為固定長度時,包括:
[0194]第一索引序號確定單元8021,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0195]第二索引序號確定單元8022,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0196]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的。
[0197]所述存儲模塊803,包括:
[0198]第一鏈表類型存儲單元8031,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0199]其中,在【具體實施方式】中確定存儲位置模塊802在存儲的數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時,包括:
[0200]第三索引序號確定單元8023,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0201]第四索引序號確定單元8024,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0202]第五索引序號確定單元8025,用于在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號。
[0203]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
[0204]其中,所述第五索引序號確定單元8025,包括:
[0205]第一索引序號確定子單元80251,用于在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用存儲空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0206]第二索引序號確定子單元80252,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0207]第三索引序號確定子單元80253,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
[0208]所述存儲模塊803,包括:
[0209]第二鏈表類型存儲單元8032,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中;
[0210]第三鏈表類型存儲單元8033,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0211]本發(fā)明實施例通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
[0212]實施例七
[0213]本發(fā)明實施例提供了 一種存儲數(shù)據(jù)的裝置,參見圖9,所述裝置包括:
[0214]接收模塊901,用于接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型;[0215]第二確定存儲位置模塊902,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置;
[0216]存儲模塊903,用于根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0217]其中,在【具體實施方式】中所述第二確定存儲位置模塊902,包括:
[0218]計算單元9021,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,根據(jù)哈希函數(shù)計算出所述數(shù)據(jù)對應(yīng)的哈希桶的存儲位置信息;
[0219]查找單元9022,用于根據(jù)所述哈希桶的存儲位置信息,查找到所述哈希桶中保存的哈希鏈的存儲位置信息;
[0220]第六索引序號確定單元9023,用于在所述哈希桶中保存的哈希鏈的存儲位置信息對應(yīng)的哈希鏈中,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號;
[0221]第七索引序號確定單元9024,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0222]第八索引序號確定單元9025,用于在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號;
[0223]其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
[0224]其中,所述第八索引序號確定單元9025,包括:
[0225]第四索引序號確定子單元90251,用于在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于預(yù)設(shè)的變長存儲方式中的第一級存儲結(jié)構(gòu)中的索引序號;
[0226]第五索引序號確定子單元90252,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號;
[0227]第六索引序號確定子單元90253,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。[0228]其中,所述存儲模塊903,包括:
[0229]第一哈希表類型存儲單元9031,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中;
[0230]第二哈希表類型存儲單元9032,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
[0231]本發(fā)明實施例通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
[0232]實施例八
[0233]本發(fā)明實施例提供了一種存儲數(shù)據(jù)的裝置,參見圖10,所述裝置包括:
[0234]接收模塊1001,用于接收待存儲于內(nèi)存的數(shù)據(jù);
[0235]第一確定存儲位置模塊1002,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為所述數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置;
[0236]存儲模塊1003,用于根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
[0237]本發(fā)明實施例通過將待存儲于內(nèi)存的數(shù)據(jù),根據(jù)數(shù)據(jù)結(jié)構(gòu)類型按照預(yù)設(shè)的存儲方式存儲于系統(tǒng)管理的直接內(nèi)存中,既避免了堆內(nèi)存于垃圾回收機(jī)制造成的應(yīng)用程序吞吐量下降的問題,又避免了修改系統(tǒng)以及虛擬機(jī)內(nèi)核造成的無法升級導(dǎo)致用戶使用應(yīng)用程序效率下降的問題。
[0238]上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
[0239]本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機(jī)可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
[0240]以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種存儲數(shù)據(jù)的方法,其特征在于,所述方法包括: 接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型; 當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為所述數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置; 當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表或哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置; 根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置,包括: 當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號; 根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中,包括: 根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置,包括: 當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號; 根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號;其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號,包括: 在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用存儲空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號; 根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
6.根據(jù)權(quán)利要求4所述的方法,其特征在于,所述根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存 中,包括: 根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中; 根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置,包括: 當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,根據(jù)哈希函數(shù)計算出所述數(shù)據(jù)對應(yīng)的哈希桶的存儲位置信息; 根據(jù)所述哈希桶的存儲位置信息,查找到所述哈希桶中保存的哈希鏈的存儲位置信息; 在所述哈希桶中保存的哈希鏈的存儲位置信息對應(yīng)的哈希鏈中,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號; 根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號; 其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
8.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號,包括: 在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用空間的大小以及所述預(yù)設(shè)的變長存儲方`式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于預(yù)設(shè)的變長存儲方式中的第一級存儲結(jié)構(gòu)中的索引序號; 根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
9.根據(jù)權(quán)利要求7所述的方法,其特征在于,所述根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中,包括: 根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中; 根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
10.一種存儲數(shù)據(jù)的裝置,其特征在于,所述裝置包括: 接收模塊,用于接收待存儲于內(nèi)存的數(shù)據(jù),并獲取所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型; 第一確定存儲位置模塊,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為數(shù)組時,為所述數(shù)據(jù)確定在系統(tǒng)管理的直接內(nèi)存中為數(shù)組型數(shù)據(jù)結(jié)構(gòu)分配的內(nèi)存空間的存儲位置; 第二確定存儲位置模塊,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表或哈希表時,為所述數(shù)據(jù)確定在預(yù)設(shè)的定長存儲方式和/或預(yù)設(shè)的變長存儲方式預(yù)先在系統(tǒng)管理的直接內(nèi)存中分配的內(nèi)存空間的存儲位置; 存儲模塊,用于根據(jù)所述數(shù)據(jù)的存儲位置,將所述數(shù)據(jù)存儲于系統(tǒng)管理的直接內(nèi)存中。
11.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述第二確定存儲位置模塊,包括: 第一索引序號確定單元,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號; 第二索引序號確定單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于所述預(yù)設(shè)的定長存儲方式的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述存儲模塊,包括: 第一鏈表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
13.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述第二確定存儲位置模塊,包括: 第三索引序號確定單元,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為鏈表且所述數(shù)據(jù)的數(shù)據(jù)部分為非固定長度時,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號; 第四索引序號確定單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 第五索引序號確定單元,用于在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號。 其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述第五索引序號確定單元,包括: 第一索引序號確定子單元,用于在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用存儲空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號; 第二索引序號確定子單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 第三索引序號確定子 單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
15.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述存儲模塊,包括: 第二鏈表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中; 第三鏈表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
16.根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述第二確定存儲位置模塊,包括: 計算單元,用于當(dāng)所述數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)類型為哈希表時,根據(jù)哈希函數(shù)計算出所述數(shù)據(jù)對應(yīng)的哈希桶的存儲位置信息;查找單元,用于根據(jù)所述哈希桶的存儲位置信息,查找到所述哈希桶中保存的哈希鏈的存儲位置信息; 第六索引序號確定單元,用于在所述哈希桶中保存的哈希鏈的存儲位置信息對應(yīng)的哈希鏈中,根據(jù)預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級位圖,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號; 第七索引序號確定單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的指針部分以及數(shù)據(jù)部分的存儲位置信息存儲于所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 第八索引序號確定單元,用于在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中各級存儲結(jié)構(gòu)中對應(yīng)的各級索引序號; 其中,所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),每一個所述預(yù)設(shè)的定長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量是相同的;所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中包含多個所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級存儲結(jié)構(gòu),按從小到大的順序排列,所有所述預(yù)設(shè)的變長存儲方式對應(yīng)的第一級別存儲結(jié)構(gòu)的存儲空間的容量之間的關(guān)系是一個等比數(shù)列。
17.根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述第八索引序號確定單元,包括: 第四索引序號確定子單元,用于在預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中,根據(jù)所述數(shù)據(jù)的數(shù)據(jù)部分占用空間的大小以及所述預(yù)設(shè)的變長存儲方式第一級存儲結(jié)構(gòu)中每一個存儲空間的大小,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于預(yù)設(shè)的變長存儲方式中的第一級存儲結(jié)構(gòu)中的索引序號; 第五索引序號確定子單元,用于`根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號; 第六索引序號確定子單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)的中的第三級位圖中的空閑位置,確定所述數(shù)據(jù)的數(shù)據(jù)部分存儲于所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號。
18.根據(jù)權(quán)利要求16所述的裝置,其特征在于,所述存儲模塊,包括: 第一哈希表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的第三級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的數(shù)據(jù)部分存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的變長存儲方式分配的直接內(nèi)存中,并將所述數(shù)據(jù)的數(shù)據(jù)部分通過所述預(yù)設(shè)的變長存儲方式存儲的各級索引序號作為所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息,使得所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中; 第二哈希表類型存儲單元,用于根據(jù)所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的索引序號以及所述預(yù)設(shè)的定長存儲方式分配的內(nèi)存空間中的第一級存儲結(jié)構(gòu)中的第二級存儲結(jié)構(gòu)中的索引序號,將所述數(shù)據(jù)的指針部分以及所述數(shù)據(jù)的數(shù)據(jù)部分在所述預(yù)設(shè)的變長存儲方式分配的內(nèi)存空間中的存儲位置信息存儲于系統(tǒng)管理的根據(jù)所述預(yù)設(shè)的定長存儲方式分配的直接內(nèi)存中。
【文檔編號】G06F17/30GK103678160SQ201210315038
【公開日】2014年3月26日 申請日期:2012年8月30日 優(yōu)先權(quán)日:2012年8月30日
【發(fā)明者】張帆 申請人:騰訊科技(深圳)有限公司