文件存儲(chǔ)方法及裝置制造方法
【專利摘要】本發(fā)明公開一種文件存儲(chǔ)方法及裝置,其方法包括:記錄父文件夾的元信息,保存在主key中;當(dāng)父文件夾下包括至少一子文件夾列表和/或文件列表時(shí),將父文件夾下的至少一子文件夾列表和/或文件列表的內(nèi)容保存至基于主key的副key中。本發(fā)明實(shí)現(xiàn)了數(shù)據(jù)的無限擴(kuò)展,且在數(shù)據(jù)累積變大的情況下,可避免來自底層數(shù)據(jù)存儲(chǔ)的瓶頸,達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。相比現(xiàn)有技術(shù),本發(fā)明將大數(shù)據(jù)分拆成多個(gè)key來保存,使得數(shù)據(jù)均勻,提高了系統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)穩(wěn)定性,更利于數(shù)據(jù)的擴(kuò)容以及系統(tǒng)業(yè)務(wù)運(yùn)營。
【專利說明】文件存儲(chǔ)方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)【技術(shù)領(lǐng)域】,尤其涉及一種文件存儲(chǔ)方法及裝置。
【背景技術(shù)】
[0002]傳統(tǒng)的PC系統(tǒng)通常采用目錄樹文件夾+文件的存儲(chǔ)模式來對文件進(jìn)行存儲(chǔ),其數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)如圖1所示。其中,最頂層的文件夾稱為根目錄,根目錄下的文件夾列表稱為子目錄。每個(gè)文件夾都可以保存子文件夾和文件列表,各文件夾、子文件夾和文件列表構(gòu)成一種遞歸的數(shù)據(jù)結(jié)構(gòu)。
[0003]在上述樹形結(jié)構(gòu)存儲(chǔ)模式中,采用key-value數(shù)據(jù)庫來保存數(shù)據(jù),即,每個(gè)文件夾作為一個(gè)key保存,value則作為當(dāng)前文件夾的子目錄列表和文件名。其存儲(chǔ)記錄關(guān)系如圖2所示。在圖2中,橢圓圈內(nèi)表示以其左邊的folderkey保存一條記錄的value。
[0004]現(xiàn)有的這種樹形結(jié)構(gòu)中,在每次讀取目錄樹時(shí),需要逐層拉取數(shù)據(jù)。即首先必須拉取根目錄,然后再拉取下一層的目錄,不能越級(jí)拉取目錄信息。而且,對于一般的key-value數(shù)據(jù)庫來說,每層文件夾和文件列表的數(shù)據(jù)不能太大,數(shù)據(jù)過大則會(huì)影響系統(tǒng)性能。
[0005]因此,當(dāng)某個(gè)用戶的文件夾或者文件增多時(shí),則可能遇到來自底層的數(shù)據(jù)訪問性能瓶頸,尤其是在現(xiàn)有的網(wǎng)絡(luò)文件系統(tǒng)中,比如QQ相冊、網(wǎng)盤,云存儲(chǔ)等應(yīng)用,采用現(xiàn)有的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),則會(huì)遭遇存儲(chǔ)與訪問上的性能瓶頸,因?yàn)榇髷?shù)據(jù)將導(dǎo)致存儲(chǔ)和訪問上的困難,當(dāng)數(shù)據(jù)大到系統(tǒng)支撐的閥值時(shí),則需要采用更為復(fù)雜的系統(tǒng)來解決大數(shù)據(jù)問題;此外,現(xiàn)有的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中,數(shù)據(jù)的分布無法控制,對于key-value數(shù)據(jù)庫,則是依據(jù)key來路由,因此,不同的Fo I derkey需要寫到不同的網(wǎng)絡(luò)存儲(chǔ)塊,而網(wǎng)絡(luò)存儲(chǔ)塊采用固定的規(guī)則分配,無法考慮到數(shù)據(jù)存儲(chǔ)的擴(kuò)容以及特定的需求等問題。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的主要目的在于提供一種文件存儲(chǔ)方法及裝置,旨在提高數(shù)據(jù)存儲(chǔ)穩(wěn)定性及可擴(kuò)展性,達(dá)到無限制文件夾系統(tǒng)目錄樹的存儲(chǔ)目的。
[0007]為了達(dá)到上述目的,本發(fā)明提出一種文件存儲(chǔ)方法,包括以下步驟:
[0008]記錄父文件夾的元信息,保存在主key中;
[0009]當(dāng)所述父文件夾下包括至少一子文件夾列表和/或文件列表時(shí),將所述父文件夾下的所述至少一子文件夾列表和/或文件列表的內(nèi)容保存至基于所述主key的副key中。
[0010]優(yōu)選地,所述副key為多個(gè),每個(gè)所述副key分別獨(dú)立保存相應(yīng)的子文件夾列表和/或文件列表的內(nèi)容。
[0011 ] 優(yōu)選地,該方法還包括:
[0012]在相應(yīng)的副key中添加、刪除或重命名所述父文件夾下的子文件夾列表和/或文件列表。
[0013]優(yōu)選地,所述在相應(yīng)的副key中添加、刪除或重命名所述父文件夾下的子文件夾列表和/或文件列表的步驟之后還包括:[0014]更新所述主key中的元信息。
[0015]優(yōu)選地,所述記錄父目錄下文件夾的元信息,保存在主key中的步驟之前還包括:
[0016]基于所述主key生成所述副key。
[0017]優(yōu)選地,所述主key保存的元信息至少包括:當(dāng)前最大文件標(biāo)識(shí)、當(dāng)前數(shù)據(jù)所在set、文件刪除信息和/或文件夾及文件的寫入時(shí)間。
[0018]本發(fā)明還提出一種文件存儲(chǔ)裝置,包括:
[0019]主存儲(chǔ)模塊,用于記錄父文件夾的元信息,保存在主key中;
[0020]副存儲(chǔ)模塊,用于當(dāng)所述父文件夾下包括至少一子文件夾列表和/或文件列表時(shí),將所述父文件夾下的所述至少一子文件夾列表和/或文件列表的內(nèi)容保存至基于所述主key的副key中。
[0021]優(yōu)選地,所述副key為多個(gè),每個(gè)所述副key分別獨(dú)立保存相應(yīng)的子文件夾列表和/或文件列表的內(nèi)容。
[0022]優(yōu)選地,該裝置還包括:
[0023]處理模塊,用于在相應(yīng)的副key中添加、刪除或重命名所述父文件夾下的子文件夾列表和/或文件列表;
[0024]更新模塊,用于更新所述主key中的元信息。
[0025]優(yōu)選地,該裝置還包括:
[0026]生成模塊,用于基于所述主key生成所述副key。
[0027]本發(fā)明提出的一種文件存儲(chǔ)方法及裝置,改變現(xiàn)有的目錄樹數(shù)據(jù)的存儲(chǔ)模式,采用父文件夾以主key寫一條元信息,其文件夾列表和文件列表以多個(gè)副key的方式寫入數(shù)據(jù),從而實(shí)現(xiàn)了數(shù)據(jù)的無限擴(kuò)展,且在數(shù)據(jù)累積變大的情況下,可避免來自底層數(shù)據(jù)存儲(chǔ)的瓶頸,達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。相比現(xiàn)有技術(shù),本發(fā)明將大數(shù)據(jù)分拆成多個(gè)key來保存,使得數(shù)據(jù)均勻,提高了系統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)穩(wěn)定性,更利于數(shù)據(jù)的擴(kuò)容以及系統(tǒng)業(yè)務(wù)運(yùn)營。
【專利附圖】
【附圖說明】
[0028]圖1是現(xiàn)有技術(shù)中目錄樹式的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)示意圖;
[0029]圖2是圖1所示的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)中的存儲(chǔ)記錄關(guān)系示意圖;
[0030]圖3是本發(fā)明文件存儲(chǔ)方法第一實(shí)施例的流程示意圖;
[0031]圖4是本發(fā)明中父文件夾的主key保存的元信息結(jié)構(gòu)示意圖;
[0032]圖5是本發(fā)明中以主key以及其副key構(gòu)成的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)示意圖;
[0033]圖6是本發(fā)明文件存儲(chǔ)方法第二實(shí)施例的流程示意圖;
[0034]圖7是本發(fā)明文件存儲(chǔ)方法第三實(shí)施例的流程示意圖;
[0035]圖8是本發(fā)明文件存儲(chǔ)裝置第一實(shí)施例的結(jié)構(gòu)示意圖;
[0036]圖9是本發(fā)明文件存儲(chǔ)裝置第二實(shí)施例的結(jié)構(gòu)示意圖;
[0037]圖10是本發(fā)明文件存儲(chǔ)裝置第三實(shí)施例的結(jié)構(gòu)示意圖。
[0038]為了使本發(fā)明的技術(shù)方案更加清楚、明了,下面將結(jié)合附圖作進(jìn)一步詳述。
【具體實(shí)施方式】[0039]本發(fā)明實(shí)施例解決方案主要是:不使用唯一的一個(gè)key保存某個(gè)文件夾的文件夾列表和文件列表,而是采用以主key保存父文件夾的元信息,以多個(gè)副key的形式保存父文件夾下的多個(gè)子文件夾列表和文件列表,以實(shí)現(xiàn)數(shù)據(jù)的無限擴(kuò)展,避免數(shù)據(jù)累積變大時(shí)遭遇來自底層存儲(chǔ)的瓶頸。
[0040]如圖3所示,本發(fā)明第一實(shí)施例提出一種文件存儲(chǔ)方法,包括:
[0041]步驟S101,記錄父文件夾的元信息,保存在主key中;
[0042]步驟S102,當(dāng)所述父文件夾下包括至少一子文件夾列表和/或文件列表時(shí),將所述父文件夾下的所述至少一子文件夾列表和/或文件列表的內(nèi)容保存至基于所述主key的副key中。
[0043]本實(shí)施例針對現(xiàn)有的目錄樹數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),將原來的某個(gè)父目錄的數(shù)據(jù)(包括文件夾列表和文件列表)采用一個(gè)parentkey保存一條數(shù)據(jù)的方式,改變?yōu)橐愿改夸浀膒arentkey作為主key寫入一條元信息,該父目錄的文件夾列表和文件夾列表則采用多個(gè)副key的方式,寫入多條數(shù)據(jù),達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。
[0044]上述父目錄可以為目錄樹結(jié)構(gòu)中的根目錄。
[0045]本實(shí)施例設(shè)定父目錄所在文件夾為父文件夾,父目錄下的各文件夾列表和文件列表為子文件夾列表和文件列表,其中,每個(gè)父文件夾作為一條主數(shù)據(jù),具有獨(dú)立性,每個(gè)父文件夾有一個(gè)主key對應(yīng),其子文件夾和文件列表保存在基于上述主key的副key中。
[0046]所述父文件夾下可以有數(shù)據(jù),也可以沒有數(shù)據(jù),即父文件夾下可以包括至少一子文件夾列表和/或文件列表;也可以為空文件夾,沒有文件夾列表和文件列表。當(dāng)父文件夾為空文件夾時(shí),則僅將父文件夾的元信息寫入主key中。
[0047]如圖4所示,圖4為本實(shí)施例中父文件夾的主key保存的元信息結(jié)構(gòu)示意圖,該兀信息包括:Key> Parentkey> FolderNum、MaxFieID> SeticU Delinfo、TimeStampl 以及TimeStamp2,其中:
[0048]Key即為父文件夾的主key,該主key為整個(gè)文件系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu),用于標(biāo)識(shí)父文件夾的關(guān)鍵字;在整個(gè)系統(tǒng)中,主key是唯一的,其所有的副key均與主key關(guān)聯(lián),而各副key之間又相互獨(dú)立,因此,整個(gè)系統(tǒng)的主key和副key不會(huì)重復(fù)。
[0049]Parentkey為當(dāng)前父文件夾的上一級(jí)的父文件夾的主key ;FolderNum表示目前總的子文件夾的數(shù)量,用于記錄每個(gè)父文件夾的子文件夾的個(gè)數(shù),這樣當(dāng)子文件夾數(shù)量增多時(shí),用于處理子文件夾列表存儲(chǔ)的邏輯,如果子文件夾列表多到無法在一檔數(shù)據(jù)中存儲(chǔ)時(shí),則可以根據(jù)次FolderNum計(jì)算其所在副key,即對文件夾列表數(shù)據(jù)也進(jìn)行分檔,達(dá)到無限制存儲(chǔ)子文件夾內(nèi)容的目的。
[0050]當(dāng)增加子文件夾時(shí),F(xiàn)olderNum+1,當(dāng)刪除子文件夾時(shí),F(xiàn)olderNum的值不改變,其作用是根據(jù)一定的邏輯,計(jì)算子文件夾數(shù)據(jù)由哪些副key來存儲(chǔ),由此,再根據(jù)這些副key拉取子文件夾列表。
[0051]MaxFileID用于標(biāo)識(shí)當(dāng)前的最大的文件id (標(biāo)識(shí));
[0052]Setid表示當(dāng)前數(shù)據(jù)所在的set。根據(jù)Setid將子文件夾列表和文件的數(shù)據(jù)寫在不同的set。在網(wǎng)絡(luò)文件系統(tǒng)中,通常由很多機(jī)器組成一個(gè)集群,這樣的一個(gè)集群可以稱為一個(gè)set。在大型的存儲(chǔ)架構(gòu)中,一個(gè)set通常是一個(gè)管理單元,包括擴(kuò)容、遷移、上架以及下架等。簡單的說,一個(gè)set是一組機(jī)器(通常為10-30臺(tái),或者更多),在這組機(jī)器上部署了一個(gè)存儲(chǔ)系統(tǒng)完成工作所必須的模塊,比如,接入模塊、邏輯處理模塊、數(shù)據(jù)庫模塊等。因此,一個(gè)set可以獨(dú)立運(yùn)營,是一個(gè)邏輯完備的存儲(chǔ)系統(tǒng)。
[0053]DelInfo用于保存刪除的文件信息,文件夾刪除則不需要記錄刪除信息;
[0054]TimeStampl, TimeStamp2表示最近所寫子文件夾和文件的時(shí)間。
[0055]上述副key可以設(shè)置為多個(gè),每個(gè)所述副key分別獨(dú)立保存相應(yīng)的子文件夾列表和/或文件列表的內(nèi)容。該副key基于主key而生成,比如可以采用主key+數(shù)字的方式生成副key,當(dāng)然也可以采用其他方式生成副key。
[0056]本實(shí)施例以主key以及其副key構(gòu)成的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)如圖5所示。
[0057]其中,主key記錄并保存父文件夾的元信息,主key下包含多個(gè)副key,用于分別記錄父文件夾下各個(gè)子文件夾列表和文件列表;每個(gè)副key可以保存多個(gè)子文件夾列表和/或文件列表。
[0058]多個(gè)副key可以按照0_N檔的順序依次編號(hào),若文件夾列表太大,則可以從-1檔開始存儲(chǔ),此時(shí)元信息中所述的Foldernum在拉取文件夾列表時(shí)則起著很重要的作用。如前所述,F(xiàn)olderNum表示目前總的子文件夾的數(shù)量,當(dāng)子文件夾數(shù)量增多時(shí),用于處理子文件夾列表存儲(chǔ)的邏輯,如果子文件夾列表多到無法在一檔數(shù)據(jù)中存儲(chǔ)時(shí),則可以根據(jù)次FolderNum計(jì)算其所在副key ;當(dāng)增加子文件夾時(shí),F(xiàn)oIderNum+1,當(dāng)刪除子文件夾時(shí),F(xiàn)olderNum的值不改變,其作用是根據(jù)一定的邏輯,計(jì)算子文件夾數(shù)據(jù)由哪些副key來存儲(chǔ),由此,再根據(jù)這些副key拉取子文件夾列表。其中,每個(gè)檔的數(shù)據(jù)條數(shù)一定,在系統(tǒng)初始化時(shí)配置,后續(xù)不再改變。
[0059]由上述數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)可以看出,由于每個(gè)父文件夾具有一個(gè)主key對應(yīng),其子文件夾列表和文件列表通過副key保存,每個(gè)文件夾和文件數(shù)據(jù)存儲(chǔ)相對獨(dú)立,由此,使得文件夾具有遞歸性,數(shù)據(jù)存儲(chǔ)可以無限擴(kuò)展,且在數(shù)據(jù)累積變大的情況下,可避免來自底層數(shù)據(jù)存儲(chǔ)的瓶頸,達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。尤其是針對網(wǎng)絡(luò)文件系統(tǒng)中,比如若將上述數(shù)據(jù)存儲(chǔ)方案應(yīng)用到QQ空間相冊的圖片存儲(chǔ),用戶創(chuàng)建了很多相冊,相冊中有很多相片。這里相冊對應(yīng)文件夾,相片則對應(yīng)文件。采用上述無限制的文件目錄存儲(chǔ)方案,則可以使存儲(chǔ)用戶存儲(chǔ)上萬張圖片和多個(gè)相冊的需求得到了滿足。因?yàn)橄鄬τ谟脩舻臄?shù)據(jù)增長來說,不會(huì)遇到數(shù)據(jù)存儲(chǔ)和訪問上的瓶頸。此外,本實(shí)施例方案還可以應(yīng)用其他方面,比如網(wǎng)盤,云存儲(chǔ)等。
[0060]此外,本實(shí)施例改進(jìn)了數(shù)據(jù)的擴(kuò)展屬性,能夠平衡數(shù)據(jù)的大小,將大數(shù)據(jù)分拆成多個(gè)key來保存,使得數(shù)據(jù)分布均勻,數(shù)據(jù)庫保存數(shù)據(jù)的性能更好,進(jìn)而提高了系統(tǒng)數(shù)據(jù)服務(wù)的穩(wěn)定性;由于數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)得到擴(kuò)充,同時(shí)引進(jìn)了 setid概念,從而改進(jìn)了數(shù)據(jù)的擴(kuò)容性,更利于系統(tǒng)長期穩(wěn)定運(yùn)營。當(dāng)然,本實(shí)施例上述數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),為數(shù)據(jù)的讀寫操作提供了更大的方便。
[0061]需要說明的是,作為本實(shí)施例的擴(kuò)展,對于每一個(gè)子文件夾之下還可以設(shè)置多個(gè)子文件夾列表和/或文件列表,并對應(yīng)設(shè)置相應(yīng)的副key來進(jìn)行數(shù)據(jù)保存。
[0062]如圖6所示,本發(fā)明第二實(shí)施例提出一種文件存儲(chǔ)方法,在上述第一實(shí)施例的基礎(chǔ)上,在上述步驟S102之后還包括:
[0063]步驟S103,在相應(yīng)的副key中添加、刪除或重命名所述父文件夾下的子文件夾列表和/或文件列表。[0064]步驟S104,更新所述主key中的元信息。
[0065]本實(shí)施例與上述第一實(shí)施例的區(qū)別在于,本實(shí)施例還包括對后續(xù)文件夾內(nèi)容的添加、刪除或重命名等操作。
[0066]具體地,在后續(xù)文件處理過程中,若有需要添加、刪除或重命名文件夾或文件,則采用以下操作方式:
[0067]對于文件夾的處理
[0068]若需要新建一子文件夾,則在父文件夾中相應(yīng)的副key中保存該子文件夾的內(nèi)容,同時(shí)更新父文件夾主key的元信息;或者根據(jù)實(shí)際需要,在父文件夾中添加一副key,在該副key中保存該子文件夾的內(nèi)容,同時(shí)更新父文件夾主key的元信息。
[0069]若需要?jiǎng)h除某一子文件夾keyfolder,則修改父文件夾的相關(guān)信息,刪除該子文件夾的所有信息,同時(shí)更新父文件夾主key的元信息。
[0070]若需要重命名某子文件夾,則將原來的子文件夾的所有內(nèi)容讀出,被采用新的子文件夾來寫一份數(shù)據(jù),以新的子文件夾的副key寫入數(shù)據(jù),并把原來的子文件夾的副key中保存的數(shù)據(jù)刪除。
[0071]對于文件的處理:
[0072]若需要添加一個(gè)文件,則修改其父文件夾的屬性,并且在父文件夾parentkey的副key中寫一條數(shù)據(jù),并保存文件名;同時(shí)更新父文件夾主key的元信息。
[0073]若需要?jiǎng)h除文件,則直接刪除其父文件夾parentkey的副key中的某個(gè)數(shù)據(jù),并且修改該父文件夾的元信息。
[0074]若需要重命名文件,直接修改其父文件夾parentkey的副key中的某個(gè)數(shù)據(jù),并且修改該父文件夾的元信息。
[0075]本實(shí)施例不僅實(shí)現(xiàn)了數(shù)據(jù)的無限擴(kuò)展,在數(shù)據(jù)累積變大的情況下,可避免來自底層數(shù)據(jù)存儲(chǔ)的瓶頸,達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。而且將大數(shù)據(jù)分拆成多個(gè)key來保存,使得數(shù)據(jù)均勻,對數(shù)據(jù)的讀寫操作更加方便,提高了系統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)穩(wěn)定性,更利于數(shù)據(jù)的擴(kuò)容以及系統(tǒng)業(yè)務(wù)運(yùn)營。
[0076]圖7所示,本發(fā)明第三實(shí)施例提出一種文件存儲(chǔ)方法,在上述第一實(shí)施例的基礎(chǔ)上,在上述步驟SlOl記錄父目錄下文件夾的元信息,保存在主key中的步驟之前還包括:
[0077]步驟S100,基于所述主key生成所述副key。
[0078]本實(shí)施例與上述第一實(shí)施例的區(qū)別在于,本實(shí)施例還包括生成副key的過程。具體地,該副key采用主key+數(shù)字的方式生成,由此,使得副key與主key相關(guān)聯(lián),達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的,提高數(shù)據(jù)存儲(chǔ)的可擴(kuò)展性。
[0079]需要說明的是,上述第二實(shí)施例與第三實(shí)施例還可以組合實(shí)施。
[0080]如圖8所示,本發(fā)明第一實(shí)施例提出一種文件存儲(chǔ)裝置,包括:主存儲(chǔ)模塊801以及副存儲(chǔ)模塊802,其中:
[0081]主存儲(chǔ)模塊801,用于記錄父文件夾的元信息,保存在主key中;
[0082]副存儲(chǔ)模塊802,用于當(dāng)所述父文件夾下包括至少一子文件夾列表和/或文件列表時(shí),將所述父文件夾下的所述至少一子文件夾列表和/或文件列表的內(nèi)容保存至基于所述主key的副key中。
[0083]本實(shí)施例針對現(xiàn)有的目錄樹數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),將原來的某個(gè)父目錄的數(shù)據(jù)(包括文件夾列表和文件列表)采用一個(gè)parentkey保存一條數(shù)據(jù)的方式,改變?yōu)橐愿改夸浀膒arentkey作為主key寫入一條元信息,該父目錄的文件夾列表和文件夾列表則采用多個(gè)副key的方式,寫入多條數(shù)據(jù),達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。
[0084]上述父目錄可以為目錄樹結(jié)構(gòu)中的根目錄。
[0085]具體地,通過主存儲(chǔ)模塊801記錄父文件夾的元信息并保存在主key中;通過副存儲(chǔ)模塊802將父文件夾下的子文件夾列表和文件列表的內(nèi)容保存至基于主key的副key中。
[0086]本實(shí)施例設(shè)定父目錄所在文件夾為父文件夾,父目錄下的各文件夾列表和文件列表為子文件夾列表和文件列表,其中,每個(gè)父文件夾作為一條主數(shù)據(jù),具有獨(dú)立性,每個(gè)父文件夾有一個(gè)主key對應(yīng),其子文件夾和文件列表保存在基于上述主key的副key中。
[0087]所述父文件夾下可以有數(shù)據(jù),也可以沒有數(shù)據(jù),即父文件夾下可以包括至少一子文件夾列表和/或文件列表;也可以為空文件夾,沒有文件夾列表和文件列表。當(dāng)父文件夾為空文件夾時(shí),則僅將父文件夾的元信息寫入主key中。
[0088]如圖4所示,圖4為本實(shí)施例中父文件夾的主key保存的元信息結(jié)構(gòu)示意圖,該兀信息包括:Key> Parentkey> FolderNum、MaxFieID> Setid、Delinfo、TimeStampl 以及TimeStamp2,其中:
[0089]Key即為父文件夾的主key,該主key為整個(gè)文件系統(tǒng)的核心數(shù)據(jù)結(jié)構(gòu),用于標(biāo)識(shí)父文件夾的關(guān)鍵字;在整個(gè)系統(tǒng)中,主key是唯一的,其所有的副key均與主key關(guān)聯(lián),而各副key之間又相互獨(dú)立,因此,整個(gè)系統(tǒng)的主key和副key不會(huì)重復(fù)。
[0090]Parentkey為當(dāng)前父文件夾的上一級(jí)的父文件夾的主key ;FolderNum表示目前總的子文件夾的數(shù)量,用于記錄每個(gè)父文件夾的子文件夾的個(gè)數(shù),這樣當(dāng)子文件夾數(shù)量增多時(shí),用于處理子文件夾列表存儲(chǔ)的邏輯,如果子文件夾列表多到無法在一檔數(shù)據(jù)中存儲(chǔ)時(shí),則可以根據(jù)次FolderNum計(jì)算其所在副key,即對文件夾列表數(shù)據(jù)也進(jìn)行分檔,達(dá)到無限制存儲(chǔ)子文件夾內(nèi)容的目的。
[0091]當(dāng)增加子文件夾時(shí),F(xiàn)olderNum+Ι,當(dāng)刪除子文件夾時(shí),F(xiàn)olderNum的值不改變,其作用是根據(jù)一定的邏輯,計(jì)算子文件夾數(shù)據(jù)由哪些副key來存儲(chǔ),由此,再根據(jù)這些副key拉取子文件夾列表。
[0092]MaxFileID標(biāo)識(shí)當(dāng)前的最大的文件id (標(biāo)識(shí));
[0093]Setid表示當(dāng)前數(shù)據(jù)所在的set。根據(jù)Setid將子文件夾列表和文件的數(shù)據(jù)寫在不同的set。在網(wǎng)絡(luò)文件系統(tǒng)中,通常由很多機(jī)器組成一個(gè)集群,這樣的一個(gè)集群可以稱為一個(gè)set。在大型的存儲(chǔ)架構(gòu)中,一個(gè)set通常是一個(gè)管理單元,包括擴(kuò)容、遷移、上架以及下架等。簡單的說,一個(gè)set是一組機(jī)器(通常為10-30臺(tái),或者更多),在這組機(jī)器上部署了一個(gè)存儲(chǔ)系統(tǒng)完成工作所必須的模塊,比如,接入模塊、邏輯處理模塊、數(shù)據(jù)庫模塊等。因此,一個(gè)set可以獨(dú)立運(yùn)營,是一個(gè)邏輯完備的存儲(chǔ)系統(tǒng)。
[0094]DelInfo用于保存刪除的文件信息,文件夾刪除則不需要記錄刪除信息;
[0095]TimeStampl, TimeStamp2表示最近所寫子文件夾和文件的時(shí)間。
[0096]上述副key可以設(shè)置為多個(gè),每個(gè)所述副key分別獨(dú)立保存相應(yīng)的子文件夾列表和/或文件列表的內(nèi)容。該副key基于主key而生成,比如可以采用主key+數(shù)字的方式生成副key,當(dāng)然也可以采用其他方式生成副key。[0097]本實(shí)施例以主key以及其副key構(gòu)成的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)如圖5所示。
[0098]其中,主key記錄并保存父文件夾的元信息,主key下包含多個(gè)副key,用于分別記錄父文件夾下各個(gè)子文件夾列表和文件列表;每個(gè)副key可以保存多個(gè)子文件夾列表和/或文件列表。
[0099]多個(gè)副key可以按照0_N檔的順序依次編號(hào),若文件夾列表太大,則可以從-1檔開始存儲(chǔ)。此時(shí)元信息中所述的Foldernum在拉取文件夾列表時(shí)則起著很重要的作用。如前所述,F(xiàn)olderNum表示目前總的子文件夾的數(shù)量,當(dāng)子文件夾數(shù)量增多時(shí),用于處理子文件夾列表存儲(chǔ)的邏輯,如果子文件夾列表多到無法在一檔數(shù)據(jù)中存儲(chǔ)時(shí),則可以根據(jù)次FolderNum計(jì)算其所在副key ;當(dāng)增加子文件夾時(shí),F(xiàn)oIderNum+1,當(dāng)刪除子文件夾時(shí),F(xiàn)olderNum的值不改變,其作用是根據(jù)一定的邏輯,計(jì)算子文件夾數(shù)據(jù)由哪些副key來存儲(chǔ),由此,再根據(jù)這些副key拉取子文件夾列表。其中,每個(gè)檔的數(shù)據(jù)條數(shù)一定,在系統(tǒng)初始化時(shí)配置,后續(xù)不再改變。
[0100]由上述數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)可以看出,由于每個(gè)父文件夾具有一個(gè)主key對應(yīng),其子文件夾列表和文件列表通過副key保存,每個(gè)文件夾和文件數(shù)據(jù)存儲(chǔ)相對獨(dú)立,由此,使得文件夾具有遞歸性,數(shù)據(jù)存儲(chǔ)可以無限擴(kuò)展,且在數(shù)據(jù)累積變大的情況下,可避免來自底層數(shù)據(jù)存儲(chǔ)的瓶頸,達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。尤其是針對網(wǎng)絡(luò)文件系統(tǒng)中,比如若將上述數(shù)據(jù)存儲(chǔ)方案應(yīng)用到QQ空間相冊的圖片存儲(chǔ),用戶創(chuàng)建了很多相冊,相冊中有很多相片。這里相冊對應(yīng)文件夾,相片則對應(yīng)文件。采用上述無限制的文件目錄存儲(chǔ)方案,則可以使存儲(chǔ)用戶存儲(chǔ)上萬張圖片和多個(gè)相冊的需求得到了滿足。因?yàn)橄鄬τ谟脩舻臄?shù)據(jù)增長來說,不會(huì)遇到數(shù)據(jù)存儲(chǔ)和訪問上的瓶頸。此外,本實(shí)施例方案還可以應(yīng)用其他方面,比如網(wǎng)盤,云存儲(chǔ)等。
[0101]此外,本實(shí)施例改進(jìn)了數(shù)據(jù)的擴(kuò)展屬性,能夠平衡數(shù)據(jù)的大小,將大數(shù)據(jù)分拆成多個(gè)key來保存,使得數(shù)據(jù)分布均勻,數(shù)據(jù)庫保存數(shù)據(jù)的性能更好,進(jìn)而提高了系統(tǒng)數(shù)據(jù)服務(wù)的穩(wěn)定性;由于數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)得到擴(kuò)充,同時(shí)引進(jìn)了 setid概念,從而改進(jìn)了數(shù)據(jù)的擴(kuò)容性,更利于系統(tǒng)長期穩(wěn)定運(yùn)營。當(dāng)然,本實(shí)施例上述數(shù)據(jù)存儲(chǔ)結(jié)構(gòu),為數(shù)據(jù)的讀寫操作提供了更大的方便。
[0102]如圖9所示,本發(fā)明第二實(shí)施例提出一種文件存儲(chǔ)裝置,在上述第一實(shí)施例的基礎(chǔ)上,還包括:
[0103]處理模塊803,用于在相應(yīng)的副key中添加、刪除或重命名所述父文件夾下的子文件夾列表和/或文件列表;
[0104]更新模塊804,用于更新所述主key中的元信息。
[0105]本實(shí)施例與上述第一實(shí)施例的區(qū)別在于,本實(shí)施例還包括對后續(xù)文件夾內(nèi)容的添加、刪除或重命名等操作。
[0106]具體地,在后續(xù)文件處理過程中,若有需要添加、刪除或重命名文件夾或文件,則采用以下操作方式:
[0107]對于文件夾的處理
[0108]若需要新建一子文件夾,處理模塊803則在父文件夾中相應(yīng)的副key中保存該子文件夾的內(nèi)容,同時(shí)更新父文件夾主key的元信息;或者根據(jù)實(shí)際需要,在父文件夾中添加一副key,在該副key中保存該子文件夾的內(nèi)容,同時(shí)通過更新模塊804更新父文件夾主key的元信息。
[0109]若需要?jiǎng)h除某一子文件夾keyfolder,處理模塊803則修改父文件夾的相關(guān)信息,刪除該子文件夾的所有信息,同時(shí)通過更新模塊804更新父文件夾主key的元信息。
[0110]若需要重命名某子文件夾,處理模塊803則將原來的子文件夾的所有內(nèi)容讀出,被采用新的子文件夾來寫一份數(shù)據(jù),以新的子文件夾的副key寫入數(shù)據(jù),并把原來的子文件夾的副key中保存的數(shù)據(jù)刪除。同時(shí)通過更新模塊804更新父文件夾主key的元信息。
[0111]對于文件的處理:
[0112]若需要添加一個(gè)文件,處理模塊803則修改其父文件夾的屬性,并且在父文件夾parentkey的副key中寫一條數(shù)據(jù),并保存文件名;同時(shí)通過更新模塊804更新父文件夾主key的元信息。
[0113]若需要?jiǎng)h除文件,處理模塊803則直接刪除其父文件夾parentkey的副key中的某個(gè)數(shù)據(jù),并通過更新模塊804修改該父文件夾的元信息。
[0114]若需要重命名文件,則處理模塊803直接修改其父文件夾parentkey的副key中的某個(gè)數(shù)據(jù),并通過更新模塊804修改該父文件夾的元信息。
[0115]本實(shí)施例不僅實(shí)現(xiàn)了數(shù)據(jù)的無限擴(kuò)展,在數(shù)據(jù)累積變大的情況下,可避免來自底層數(shù)據(jù)存儲(chǔ)的瓶頸,達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。而且將大數(shù)據(jù)分拆成多個(gè)key來保存,使得數(shù)據(jù)均勻,對數(shù)據(jù)的讀寫操作更加方便,提高了系統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)穩(wěn)定性,更利于數(shù)據(jù)的擴(kuò)容以及系統(tǒng)業(yè)務(wù)運(yùn)營。
[0116]如圖10所示,本發(fā)明第三實(shí)施例提出一種文件存儲(chǔ)裝置,在上述第一實(shí)施例的基礎(chǔ)上,還包括:
[0117]生成模塊800,用于基于所述主key生成所述副key。
[0118]本實(shí)施例與上述第一實(shí)施例的區(qū)別在于,本實(shí)施例還包括生成副key的過程。具體地,生成模塊800采用主key+數(shù)字的方式生成該副key,由此,使得副key與主key相關(guān)聯(lián),達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的,提高數(shù)據(jù)存儲(chǔ)的可擴(kuò)展性。
[0119]需要說明的是,上述第二實(shí)施例與第三實(shí)施例還可以組合實(shí)施。
[0120]本實(shí)施例文件存儲(chǔ)方法及裝置,改變現(xiàn)有的目錄樹數(shù)據(jù)的存儲(chǔ)模式,采用父文件夾以主key寫一條元信息,其文件夾列表和文件列表以多個(gè)副key的方式寫入數(shù)據(jù),從而實(shí)現(xiàn)了數(shù)據(jù)的無限擴(kuò)展,且在數(shù)據(jù)累積變大的情況下,可避免來自底層數(shù)據(jù)存儲(chǔ)的瓶頸,達(dá)到無限制文件夾系統(tǒng)目錄樹存儲(chǔ)的目的。相比現(xiàn)有技術(shù),本發(fā)明將大數(shù)據(jù)分拆成多個(gè)key來保存,使得數(shù)據(jù)均勻,提高了系統(tǒng)數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)穩(wěn)定性,更利于數(shù)據(jù)的擴(kuò)容以及系統(tǒng)業(yè)務(wù)運(yùn)營。
[0121]以上所述僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或流程變換,或直接或間接運(yùn)用在其它相關(guān)的【技術(shù)領(lǐng)域】,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。
【權(quán)利要求】
1.一種文件存儲(chǔ)方法,其特征在于,包括以下步驟: 記錄父文件夾的元信息,保存在主key中; 當(dāng)所述父文件夾下包括至少一子文件夾列表和/或文件列表時(shí),將所述父文件夾下的所述至少一子文件夾列表和/或文件列表的內(nèi)容保存至基于所述主key的副key中。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述副key為多個(gè),每個(gè)所述副key分別獨(dú)立保存相應(yīng)的子文件夾列表和/或文件列表的內(nèi)容。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 在相應(yīng)的副key中添加、刪除或重命名所述父文件夾下的子文件夾列表和/或文件列表。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述在相應(yīng)的副key中添加、刪除或重命名所述父文件夾下的子文件夾列表和/或文件列表的步驟之后還包括: 更新所述主key中的元信息。
5.根據(jù)權(quán)利要求1-4中任一項(xiàng)所述的方法,其特征在于,所述記錄父目錄下文件夾的元信息,保存在主key中的步驟之前還包括: 基于所述主key生成所述副key。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述主key保存的元信息至少包括:當(dāng)前最大文件標(biāo)識(shí)、當(dāng)前數(shù)據(jù)所在set、文件刪除信息和/或文件夾及文件的寫入時(shí)間。
7.一種文件存儲(chǔ)裝置,其特征在于,包括: 主存儲(chǔ)模塊,用于記錄父文件夾的元信息,保存在主key中; 副存儲(chǔ)模塊,用于當(dāng)所述父文件夾下包括至少一子文件夾列表和/或文件列表時(shí),將所述父文件夾下的所述至少一子文件夾列表和/或文件列表的內(nèi)容保存至基于所述主key的副key中。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述副key為多個(gè),每個(gè)所述副key分別獨(dú)立保存相應(yīng)的子文件夾列表和/或文件列表的內(nèi)容。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,還包括: 處理模塊,用于在相應(yīng)的副key中添加、刪除或重命名所述父文件夾下的子文件夾列表和/或文件列表; 更新模塊,用于更新所述主key中的元信息。
10.根據(jù)權(quán)利要求7、8或9所述的裝置,其特征在于,還包括: 生成模塊,用于基于所述主key生成所述副key。
【文檔編號(hào)】G06F17/30GK103544156SQ201210238427
【公開日】2014年1月29日 申請日期:2012年7月10日 優(yōu)先權(quán)日:2012年7月10日
【發(fā)明者】唐孟松 申請人:騰訊科技(深圳)有限公司