本發(fā)明屬于存儲(chǔ)系統(tǒng)技術(shù)領(lǐng)域,特別是涉及一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法和裝置。
背景技術(shù):
眾所周知,復(fù)雜的業(yè)務(wù)系統(tǒng)會(huì)依賴多種類型的數(shù)據(jù),為了保證系統(tǒng)的解耦,系統(tǒng)之間往往通過服務(wù)的方式提供數(shù)據(jù),實(shí)際上,應(yīng)用本身可能有數(shù)據(jù),但是某一些數(shù)據(jù)并不是應(yīng)用本身的,需要從其他系統(tǒng)獲取到。這種方式會(huì)給系統(tǒng)帶來許多的強(qiáng)依賴,依賴過多之后,就會(huì)使應(yīng)用變得不穩(wěn)定,很容易被依賴的二方服務(wù)(公司內(nèi)部提供出來的公共服務(wù))所影響。
技術(shù)實(shí)現(xiàn)要素:
為解決上述問題,本發(fā)明提供了一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法和裝置,提高數(shù)據(jù)讀取性能,去除對(duì)二方服務(wù)的強(qiáng)依賴,增強(qiáng)應(yīng)用的穩(wěn)定性。
本發(fā)明提供的一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法,包括:
對(duì)每個(gè)待寫入的數(shù)據(jù)進(jìn)行解析,得到與所述數(shù)據(jù)相對(duì)應(yīng)的key;
對(duì)所述key進(jìn)行索引,得到與所述key相對(duì)應(yīng)的目錄;
以所述key作為文件名,在與所述key相對(duì)應(yīng)的目錄內(nèi)生成文件,將所述數(shù)據(jù)寫入所述文件中。
優(yōu)選的,在上述基于文件系統(tǒng)的嵌入式存儲(chǔ)方法中,將所述數(shù)據(jù)寫入所述文件中之后,還包括:
接收待讀取數(shù)據(jù)的key并進(jìn)行解析,計(jì)算出與所述待讀取數(shù)據(jù)的key相對(duì)應(yīng)的目錄;
拼接所述待讀取數(shù)據(jù)的key和其對(duì)應(yīng)的目錄,得到文件的完整路徑;
根據(jù)所述文件的完整路徑,讀取所述文件的內(nèi)容得到所述待讀取數(shù)據(jù)。
優(yōu)選的,在上述基于文件系統(tǒng)的嵌入式存儲(chǔ)方法中,所述對(duì)所述key進(jìn)行索引為:
對(duì)所述key進(jìn)行至少一次hash。
優(yōu)選的,在上述基于文件系統(tǒng)的嵌入式存儲(chǔ)方法中,所述對(duì)所述key進(jìn)行至少一次hash為:
對(duì)所述key進(jìn)行至三次hash。
本發(fā)明提供的一種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置,包括:
第一解析單元,用于對(duì)每個(gè)待寫入的數(shù)據(jù)進(jìn)行解析,得到與所述數(shù)據(jù)相對(duì)應(yīng)的key;
索引單元,用于對(duì)所述key進(jìn)行索引,得到與所述key相對(duì)應(yīng)的目錄;
寫入單元,用于以所述key作為文件名,在與所述key相對(duì)應(yīng)的目錄內(nèi)生成文件,將所述數(shù)據(jù)寫入所述文件中。
優(yōu)選的,在上述基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置中,還包括:
第二解析單元,用于接收待讀取數(shù)據(jù)的key并進(jìn)行解析,計(jì)算出與所述待讀取數(shù)據(jù)的key相對(duì)應(yīng)的目錄;
文件路徑生成單元,用于拼接所述待讀取數(shù)據(jù)的key和其對(duì)應(yīng)的目錄,得到文件的完整路徑;
讀取單元,用于根據(jù)所述文件的完整路徑,讀取所述文件的內(nèi)容得到所述待讀取數(shù)據(jù)。
優(yōu)選的,在上述基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置中,所述索引單元具體用于對(duì)所述key進(jìn)行至少一次hash。
優(yōu)選的,在上述基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置中,所述索引單元具體用于對(duì)所述key進(jìn)行至三次hash。
通過上述描述可知,本發(fā)明提供的上述基于文件系統(tǒng)的嵌入式存儲(chǔ)方法和裝置,由于該方法包括對(duì)每個(gè)待寫入的數(shù)據(jù)進(jìn)行解析,得到與所述數(shù)據(jù)相對(duì)應(yīng)的key;對(duì)所述key進(jìn)行索引,得到與所述key相對(duì)應(yīng)的目錄;以所述key作為文件名,在與所述key相對(duì)應(yīng)的目錄內(nèi)生成文件,將所述數(shù)據(jù)寫入所述文件中,因此提高數(shù)據(jù)讀取性能,去除對(duì)二方服務(wù)的強(qiáng)依賴,增強(qiáng)應(yīng)用的穩(wěn)定性。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本申請(qǐng)實(shí)施例提供的第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法的示意圖;
圖2為數(shù)據(jù)寫入過程的示意圖;
圖3為數(shù)據(jù)讀取過程的示意圖;
圖4為本申請(qǐng)實(shí)施例提供的第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置的示意圖。
具體實(shí)施方式
本發(fā)明的核心思想在于提供一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法和裝置,提高數(shù)據(jù)讀取性能,去除對(duì)二方服務(wù)的強(qiáng)依賴,增強(qiáng)應(yīng)用的穩(wěn)定性。
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本申請(qǐng)實(shí)施例提供的第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法如圖1所示,圖1為本申請(qǐng)實(shí)施例提供的第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法的示意圖,該方法包括如下步驟:
s1:對(duì)每個(gè)待寫入的數(shù)據(jù)進(jìn)行解析,得到與所述數(shù)據(jù)相對(duì)應(yīng)的key;
s2:對(duì)所述key進(jìn)行索引,得到與所述key相對(duì)應(yīng)的目錄;
s3:以所述key作為文件名,在與所述key相對(duì)應(yīng)的目錄內(nèi)生成文件,將所述數(shù)據(jù)寫入所述文件中。
參考圖2,圖2為數(shù)據(jù)寫入過程的示意圖,圖中以hash來表示索引過程,但是此次并不構(gòu)成限制,還可以采用其他方式進(jìn)行索引,而且圖中是以三級(jí)索引為例進(jìn)行說明,實(shí)際上,可以根據(jù)實(shí)際情況增加或減少索引層級(jí),保證數(shù)據(jù)被分散到足夠多的目錄中,避免單個(gè)目錄的文件數(shù)過多。具體的,在數(shù)據(jù)寫入時(shí),會(huì)解析數(shù)據(jù),將對(duì)應(yīng)的數(shù)據(jù)key解析出來,并使用該key進(jìn)行包括hash在內(nèi)的索引,再以數(shù)據(jù)key為文件名,在之前的目錄下生成這個(gè)文件,再將數(shù)據(jù)寫入該文件,完成數(shù)據(jù)的寫入過程。
需要說明的是,現(xiàn)有的單文件存儲(chǔ)方案在數(shù)據(jù)全量時(shí)非常簡單,但是其增量的實(shí)現(xiàn)非常困難,會(huì)導(dǎo)致整個(gè)文件重寫一遍,具體而言,假設(shè)一個(gè)文件中存儲(chǔ)了100條數(shù)據(jù),增量的時(shí)候只修改了第10條數(shù)據(jù),這時(shí)單文件存儲(chǔ)的處理步驟如下:新建一個(gè)文件,將前9條數(shù)據(jù)寫入新文件,寫入新的第10條數(shù)據(jù),再繼續(xù)寫入后面的90條數(shù)據(jù),可見,這個(gè)過程相當(dāng)于整個(gè)文件重新寫了一次,效率非常低,且需要考慮到并發(fā)場景,引入鎖得更加復(fù)雜的方案。而如果是本實(shí)施例提供的單文件方案就解決了上述問題,直接找到這條數(shù)據(jù)對(duì)應(yīng)的文件,把這個(gè)文件的內(nèi)容改掉就夠了,且現(xiàn)有的方案中,對(duì)于數(shù)據(jù)的查詢也非常消耗性能,極端情況下需要將整個(gè)數(shù)據(jù)文件掃描一遍,而本實(shí)施例解決了這個(gè)問題,它將每一個(gè)數(shù)據(jù)拆分成一個(gè)單獨(dú)的文件,這樣數(shù)據(jù)進(jìn)行增量更新時(shí),只需要簡單的將一個(gè)數(shù)據(jù)文件修改掉就可以了。同時(shí)針對(duì)數(shù)據(jù)key進(jìn)行索引,生成一個(gè)文件存儲(chǔ)的完整路徑,以這樣的方式將文件打散到多個(gè)不同的目錄下,每個(gè)目錄下的文件數(shù)就得以減少,正是由于該方式是直接使用的文件的索引,所以文件查找非常迅速。
通過上述描述可知,本申請(qǐng)實(shí)施例提供的第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法,由于包括對(duì)每個(gè)待寫入的數(shù)據(jù)進(jìn)行解析,得到與所述數(shù)據(jù)相對(duì)應(yīng)的key;對(duì)所述key進(jìn)行索引,得到與所述key相對(duì)應(yīng)的目錄;以所述key作為文件名,在與所述key相對(duì)應(yīng)的目錄內(nèi)生成文件,將所述數(shù)據(jù)寫入所述文件中,因此提高數(shù)據(jù)讀取性能,去除對(duì)二方服務(wù)的強(qiáng)依賴,增強(qiáng)應(yīng)用的穩(wěn)定性。
本申請(qǐng)實(shí)施例提供的第二種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法,是在上述第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法的基礎(chǔ)上,還包括如下技術(shù)特征:
將所述數(shù)據(jù)寫入所述文件中之后,還包括:
接收待讀取數(shù)據(jù)的key并進(jìn)行解析,計(jì)算出與所述待讀取數(shù)據(jù)的key相對(duì)應(yīng)的目錄;
拼接所述待讀取數(shù)據(jù)的key和其對(duì)應(yīng)的目錄,得到文件的完整路徑;
根據(jù)所述文件的完整路徑,讀取所述文件的內(nèi)容得到所述待讀取數(shù)據(jù)。
參考圖3,圖3為數(shù)據(jù)讀取過程的示意圖,在這種情況下,數(shù)據(jù)解析過程更加簡單,直接使用傳入的待讀取數(shù)據(jù)的key,使用數(shù)據(jù)寫入時(shí)相對(duì)的算法,包括但不限于hash方式,計(jì)算出待讀取數(shù)據(jù)的key對(duì)應(yīng)的目錄,拼接上待讀取數(shù)據(jù)的key,即得到了文件的完整路徑,然后直接讀取該文件內(nèi)容,即為該數(shù)據(jù)的完整內(nèi)容。
本申請(qǐng)實(shí)施例提供的第三種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法,是在上述第一種至第二種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法中任一種的基礎(chǔ)上,還包括如下技術(shù)特征:
所述對(duì)所述key進(jìn)行索引為:
對(duì)所述key進(jìn)行至少一次hash。
需要說明的是,當(dāng)數(shù)據(jù)總量不大時(shí),可以采用一次hash即可,而當(dāng)數(shù)據(jù)比較大時(shí),就需要增加hash的次數(shù),以避免同一個(gè)目錄中的數(shù)據(jù)超過承載能力,也就是說,可以根據(jù)實(shí)際的需要來決定hash的次數(shù),此處并不做具體限制。
本申請(qǐng)實(shí)施例提供的第四種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法,是在上述第三種基于文件系統(tǒng)的嵌入式存儲(chǔ)方法的基礎(chǔ)上,還包括如下技術(shù)特征:
所述對(duì)所述key進(jìn)行至少一次hash為:
對(duì)所述key進(jìn)行至三次hash。
需要說明的是,這里采用的hash過程的次數(shù)是完全可配置化的,需要hash的次數(shù)取決數(shù)據(jù)的多少,數(shù)據(jù)越多,hash的次數(shù)就可配置得越多,保證單個(gè)目錄下文件不會(huì)太多。利用該實(shí)施例的三次hash的過程如下:對(duì)key進(jìn)行第1次hash,做為一級(jí)目錄名,再用一級(jí)目錄名進(jìn)行第二次hash,做為二級(jí)目錄名,用二級(jí)目錄名進(jìn)行第三次hash,做為三級(jí)目錄名,分別將三次hash的值拼接,就能夠形成一個(gè)文件路徑,將數(shù)據(jù)寫入該文件中,就完成了數(shù)據(jù)的寫入過程。
本申請(qǐng)實(shí)施例提供的第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置如圖4所示,圖4為本申請(qǐng)實(shí)施例提供的第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置的示意圖,該裝置包括:
第一解析單元201,用于對(duì)每個(gè)待寫入的數(shù)據(jù)進(jìn)行解析,得到與所述數(shù)據(jù)相對(duì)應(yīng)的key;
索引單元202,用于對(duì)所述key進(jìn)行索引,得到與所述key相對(duì)應(yīng)的目錄;
寫入單元203,用于以所述key作為文件名,在與所述key相對(duì)應(yīng)的目錄內(nèi)生成文件,將所述數(shù)據(jù)寫入所述文件中。
需要說明的是,現(xiàn)有的單文件存儲(chǔ)方案在數(shù)據(jù)全量時(shí)非常簡單,但是其增量的實(shí)現(xiàn)非常困難,會(huì)導(dǎo)致整個(gè)文件重寫一遍,具體而言,假設(shè)一個(gè)文件中存儲(chǔ)了100條數(shù)據(jù),增量的時(shí)候只修改了第10條數(shù)據(jù),這時(shí)單文件存儲(chǔ)的處理步驟如下:新建一個(gè)文件,將前9條數(shù)據(jù)寫入新文件,寫入新的第10條數(shù)據(jù),再繼續(xù)寫入后面的90條數(shù)據(jù),可見,這個(gè)過程相當(dāng)于整個(gè)文件重新寫了一次,效率非常低,且需要考慮到并發(fā)場景,引入鎖得更加復(fù)雜的方案。而如果是本實(shí)施例提供的單文件方案就解決了上述問題,直接找到這條數(shù)據(jù)對(duì)應(yīng)的文件,把這個(gè)文件的內(nèi)容改掉就夠了,且現(xiàn)有的方案中,對(duì)于數(shù)據(jù)的查詢也非常消耗性能,極端情況下需要將整個(gè)數(shù)據(jù)文件掃描一遍,而本實(shí)施例解決了這個(gè)問題,它將每一個(gè)數(shù)據(jù)拆分成一個(gè)單獨(dú)的文件,這樣數(shù)據(jù)進(jìn)行增量更新時(shí),只需要簡單的將一個(gè)數(shù)據(jù)文件修改掉就可以了。同時(shí)針對(duì)數(shù)據(jù)key進(jìn)行索引,生成一個(gè)文件存儲(chǔ)的完整路徑,以這樣的方式將文件打散到多個(gè)不同的目錄下,每個(gè)目錄下的文件數(shù)就得以減少,正是由于該方式是直接使用的文件的索引,所以文件查找非常迅速。
本申請(qǐng)實(shí)施例提供的第二種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置,是在上述第一種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置的基礎(chǔ)上,還包括如下技術(shù)特征:
還包括:
第二解析單元,用于接收待讀取數(shù)據(jù)的key并進(jìn)行解析,計(jì)算出與所述待讀取數(shù)據(jù)的key相對(duì)應(yīng)的目錄;
文件路徑生成單元,用于拼接所述待讀取數(shù)據(jù)的key和其對(duì)應(yīng)的目錄,得到文件的完整路徑;
讀取單元,用于根據(jù)所述文件的完整路徑,讀取所述文件的內(nèi)容得到所述待讀取數(shù)據(jù)。
在這種情況下,數(shù)據(jù)解析過程更加簡單,直接使用傳入的待讀取數(shù)據(jù)的key,使用數(shù)據(jù)寫入時(shí)相對(duì)的算法,包括但不限于hash方式,計(jì)算出待讀取數(shù)據(jù)的key對(duì)應(yīng)的目錄,拼接上待讀取數(shù)據(jù)的key,即得到了文件的完整路徑,然后直接讀取該文件內(nèi)容,即為該數(shù)據(jù)的完整內(nèi)容。
本申請(qǐng)實(shí)施例提供的第三種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置,是在上述第一種至第二種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置中任一種的基礎(chǔ)上,還包括如下技術(shù)特征:
所述索引單元具體用于對(duì)所述key進(jìn)行至少一次hash。
需要說明的是,當(dāng)數(shù)據(jù)總量不大時(shí),可以采用一次hash即可,而當(dāng)數(shù)據(jù)比較大時(shí),就需要增加hash的次數(shù),以避免同一個(gè)目錄中的數(shù)據(jù)超過承載能力,也就是說,可以根據(jù)實(shí)際的需要來決定hash的次數(shù),此處并不做具體限制。
本申請(qǐng)實(shí)施例提供的第四種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置,是在上述第三種基于文件系統(tǒng)的嵌入式存儲(chǔ)裝置的基礎(chǔ)上,還包括如下技術(shù)特征:
所述索引單元具體用于對(duì)所述key進(jìn)行至三次hash。
需要說明的是,這里采用的hash過程的次數(shù)是完全可配置化的,需要hash的次數(shù)取決數(shù)據(jù)的多少,數(shù)據(jù)越多,hash的次數(shù)就可配置得越多,保證單個(gè)目錄下文件不會(huì)太多。利用該實(shí)施例的三次hash的過程如下:對(duì)key進(jìn)行第1次hash,做為一級(jí)目錄名,再用一級(jí)目錄名進(jìn)行第二次hash,做為二級(jí)目錄名,用二級(jí)目錄名進(jìn)行第三次hash,做為三級(jí)目錄名,分別將三次hash的值拼接,就能夠形成一個(gè)文件路徑,將數(shù)據(jù)寫入該文件中,就完成了數(shù)據(jù)的寫入過程。
對(duì)所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。