欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法

文檔序號(hào):6626951閱讀:547來(lái)源:國(guó)知局
一種面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法
【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,包括以下步驟:構(gòu)建用于儲(chǔ)存文件目錄結(jié)構(gòu)信息以及節(jié)點(diǎn)元數(shù)據(jù)信息的fs.nodes集合,再創(chuàng)建MongoDB GridFS存儲(chǔ)文件,同時(shí)在創(chuàng)建MongoDB GridFS存儲(chǔ)文件的過(guò)程中自動(dòng)生成用于存儲(chǔ)文件元數(shù)據(jù)信息的fs.files集合及用于存儲(chǔ)文件數(shù)據(jù)信息的fs.chunks集合,Linux文件系統(tǒng)與MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)節(jié)點(diǎn)的創(chuàng)建及刪除過(guò)程中通過(guò)fs.nodes集合、fs.files集合及fs.chunks集合關(guān)聯(lián),具體的,目錄節(jié)點(diǎn)與fs.nodes集合相互關(guān)聯(lián),文件節(jié)點(diǎn)與fs.nodes集合、fs.files集合以及fs.chunks集合元素相互關(guān)聯(lián),節(jié)點(diǎn)與節(jié)點(diǎn)之間的父子關(guān)系由fs.nodes的鏈接結(jié)構(gòu)所決定,本發(fā)明支持目錄操作,并且具有占用存儲(chǔ)空間少,讀寫(xiě)效率高等優(yōu)點(diǎn)。
【專(zhuān)利說(shuō)明】-種面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明屬于云存儲(chǔ)領(lǐng)域,涉及一種用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,具體涉及一種面 向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法。

【背景技術(shù)】
[0002] 在大數(shù)據(jù)的時(shí)代背景下,存儲(chǔ)問(wèn)題重新成為學(xué)術(shù)界和產(chǎn)業(yè)界的焦點(diǎn),傳統(tǒng)的技術(shù) 和方法已經(jīng)很難應(yīng)對(duì)由數(shù)據(jù)量的劇增而帶來(lái)的新的挑戰(zhàn)。云存儲(chǔ)正是在這一背景下在云計(jì) 算概念上延伸和發(fā)展出來(lái)的一個(gè)新的概念,指通過(guò)集群應(yīng)用、網(wǎng)格技術(shù)或分布式文件系統(tǒng) 等功能,將網(wǎng)絡(luò)中大量各種不同類(lèi)型的存儲(chǔ)設(shè)備通過(guò)應(yīng)用軟件集合起來(lái)協(xié)同工作,共同對(duì) 外提供數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)訪(fǎng)問(wèn)功能的一個(gè)系統(tǒng)。在云端,各種存儲(chǔ)設(shè)備通過(guò)應(yīng)用軟件集成管 理起來(lái)(以MongoDB集群服務(wù)器為例),用戶(hù)使用終端(PC、手機(jī)等)通過(guò)互聯(lián)網(wǎng)訪(fǎng)問(wèn)云端 提供的存儲(chǔ)服務(wù)。
[0003] 用戶(hù)空間文件系統(tǒng)(Filesystem in Userspace,簡(jiǎn)稱(chēng)FUSE)指完全在用戶(hù)態(tài)實(shí)現(xiàn) 的文件系統(tǒng)。它方便開(kāi)發(fā)人員在不觸及內(nèi)核的前提下輕松定制新的文件系統(tǒng)。
[0004] 在產(chǎn)業(yè)界,基于FUSE實(shí)現(xiàn)的用戶(hù)空間文件系統(tǒng)已有很多,比較知名的有 ExpanDrive、GlusterFS、SSHFS 等。
[0005]ExpanDrive :是一款很實(shí)用的網(wǎng)盤(pán)和云服務(wù)儲(chǔ)存文件管理軟件,可以讓用戶(hù)本地 化管理網(wǎng)盤(pán)或云存儲(chǔ)中的文件,讓文件修改、下載和刪除等操作變得非常簡(jiǎn)單。
[0006]GlusterFS:是一個(gè)大尺度文件系統(tǒng)。它是各種不同的存儲(chǔ)服務(wù)器之上的組合,這 些服務(wù)器由以太網(wǎng)或無(wú)限帶寬技術(shù)Infiniband以及遠(yuǎn)程直接內(nèi)存訪(fǎng)問(wèn)RDMA互相融匯,最終 所形成的一個(gè)大的并行文件系統(tǒng)網(wǎng)絡(luò)。
[0007] SSHFS :可以把SSH連接到的主機(jī)資源,映射到本機(jī)的文件系統(tǒng)當(dāng)中,然后用戶(hù)可 以像操作本地文件一樣進(jìn)行操作,而實(shí)際的文件改動(dòng)將通過(guò)SSH傳輸?shù)竭h(yuǎn)程主機(jī)當(dāng)中。
[0008] 在學(xué)術(shù)界,相關(guān)文獻(xiàn)有文獻(xiàn)1及文獻(xiàn)2,其中,文獻(xiàn)1為鄧宏濤在江漢大學(xué)學(xué)報(bào), Vol. 38 No. 2, Jun. 2010發(fā)表的關(guān)系數(shù)據(jù)庫(kù)中樹(shù)型結(jié)構(gòu)信息的處理方法研究;文獻(xiàn)2為汪 建,方洪鷹,陳昌川在重慶師范大學(xué)學(xué)報(bào),Vol. 24 No. 4, Oct. 2007發(fā)表的一種改進(jìn)的基于數(shù) 據(jù)庫(kù)的樹(shù)存儲(chǔ)策略。文獻(xiàn)1介紹了樹(shù)型結(jié)構(gòu)的概念與特點(diǎn),討論了數(shù)據(jù)庫(kù)中樹(shù)形結(jié)構(gòu)信息 的關(guān)系表結(jié)構(gòu)設(shè)計(jì)方案,比較了關(guān)系數(shù)據(jù)庫(kù)中樹(shù)型結(jié)構(gòu)信息的多種處理方法,給出了采用 自關(guān)聯(lián)映射的表結(jié)構(gòu)設(shè)計(jì),并結(jié)合遞歸CTE技術(shù)探討了關(guān)系數(shù)據(jù)庫(kù)中樹(shù)型結(jié)構(gòu)信息的具體 實(shí)現(xiàn)方法。文獻(xiàn)2討論了如何在關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)中存放壓縮的一般樹(shù),并在維護(hù)海量 數(shù)據(jù)的同時(shí),降低數(shù)據(jù)冗余。本發(fā)明方法針對(duì)上述文獻(xiàn)對(duì)支持非關(guān)系型數(shù)據(jù)庫(kù)的不足之處, 提出了在非關(guān)系型數(shù)據(jù)庫(kù)MongoDB中存儲(chǔ)樹(shù)的方法。
[0009] GridFS-Fuse是將云端MongoDB GridFS數(shù)據(jù)庫(kù)實(shí)例掛載至本地的一個(gè)用戶(hù)態(tài) 文件系統(tǒng)。2009年P(guān)aul Rosania對(duì)其進(jìn)行嘗試的開(kāi)發(fā),在所公布的發(fā)布版說(shuō)明中指出 GridFS-Fuse當(dāng)前的未解決問(wèn)題為:不支持目錄操作以及讀寫(xiě)效率待驗(yàn)證。


【發(fā)明內(nèi)容】

[0010] 本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺點(diǎn),提供了一種面向MongoDB的用戶(hù)空 間文件系統(tǒng)實(shí)現(xiàn)方法,該實(shí)現(xiàn)方法支持目錄操作,并且具有占用空間少,讀寫(xiě)效率高等優(yōu) 點(diǎn)。
[0011] 為達(dá)到上述目的,本發(fā)明所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法面向 MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,包括以下步驟:構(gòu)建用于儲(chǔ)存文件目 錄結(jié)構(gòu)信息以及節(jié)點(diǎn)元數(shù)據(jù)信息的fs. nodes集合,再利用MongoDB GridFS存儲(chǔ)文件,同時(shí) 在利用MongoDB GridFS存儲(chǔ)文件的過(guò)程中自動(dòng)生成用于存儲(chǔ)文件元數(shù)據(jù)信息的fs. files 集合及用于存儲(chǔ)文件數(shù)據(jù)信息的fs. chunks集合,Linux文件系統(tǒng)與MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn) 節(jié)點(diǎn)的創(chuàng)建及刪除過(guò)程中通過(guò)fs. nodes集合、fs. files集合及fs. chunks集合關(guān)聯(lián),具 體的,目錄節(jié)點(diǎn)與fs. nodes集合相互關(guān)聯(lián),文件節(jié)點(diǎn)與fs. nodes集合、fs. files集合以及 fs. chunks集合相互關(guān)聯(lián),節(jié)點(diǎn)與節(jié)點(diǎn)之間的父子關(guān)系由fs. nodes集合的鏈接結(jié)構(gòu)所決 定。
[0012] 所述fs. nodes集合中的各個(gè)字段的含義如下:
[0013] _id字段:用于記錄節(jié)點(diǎn)的全局唯一標(biāo)識(shí)ID,類(lèi)型為0bject_id,由mongoDB默認(rèn) 自動(dòng)賦值;
[0014] name字段:用于記錄節(jié)點(diǎn)的名稱(chēng),類(lèi)型為字符串;
[0015] type字段:用于記錄節(jié)點(diǎn)的類(lèi)型,類(lèi)型為整型;
[0016] depth字段:用于記錄節(jié)點(diǎn)所在樹(shù)結(jié)構(gòu)的深度,類(lèi)型為整型;
[0017] abs_path字段:用于記錄節(jié)點(diǎn)的絕對(duì)路徑名稱(chēng),即為根節(jié)點(diǎn)到當(dāng)前節(jié)點(diǎn)的路徑, 類(lèi)型為字符串;
[0018] parent_id :用于記錄節(jié)點(diǎn)的父節(jié)點(diǎn)ID,類(lèi)型為0bject_id ;
[0019] meta_data :用于記錄節(jié)點(diǎn)的元數(shù)據(jù)信息,類(lèi)型為BS0N ;
[0020] 其中,meta_data各個(gè)字段含義如下:
[0021] file_id字段:用于記錄文件ID,類(lèi)型為0bject_id,其中,當(dāng)節(jié)點(diǎn)是文件,貝Ufile_id 字段有效;當(dāng)節(jié)點(diǎn)為目錄時(shí),則file_id字段無(wú)效;
[0022] mode字段:用于記錄節(jié)點(diǎn)訪(fǎng)問(wèn)模式,類(lèi)型為整型;
[0023] uid字段:用于記錄用戶(hù)id,類(lèi)型為整型;
[0024] gid字段:用于記錄組id,類(lèi)型為整型;
[0025] nlink字段:用于記錄節(jié)點(diǎn)連接數(shù),類(lèi)型為整型,當(dāng)節(jié)點(diǎn)為文件時(shí),則nlink字段為 該節(jié)點(diǎn)的連接數(shù);當(dāng)節(jié)點(diǎn)為目錄時(shí),則nlink字段為該目錄下所包含的子目錄數(shù);
[0026] atime字段:用于記錄節(jié)點(diǎn)上一次存取時(shí)間;
[0027] mtime字段:用于記錄節(jié)點(diǎn)上一次修改時(shí)間;
[0028] ctime字段:用于記錄上一次狀態(tài)修改時(shí)間。
[0029] 所述節(jié)點(diǎn)的創(chuàng)建包括文件節(jié)點(diǎn)的創(chuàng)建及目錄節(jié)點(diǎn)的創(chuàng)建。
[0030] 所述文件節(jié)點(diǎn)的創(chuàng)建包括以下步驟:
[0031] 檢查所需創(chuàng)建的文件節(jié)點(diǎn)是否為空文件節(jié)點(diǎn),當(dāng)所述文件節(jié)點(diǎn)為空文件節(jié)點(diǎn)時(shí), 則關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)所述文件節(jié)點(diǎn)不為空文件節(jié)點(diǎn)時(shí),則將Linux文件系統(tǒng)連接 MongoDB數(shù)據(jù)庫(kù),并根據(jù)所需創(chuàng)建的文件節(jié)點(diǎn)的絕對(duì)路徑名稱(chēng)在MongoDB數(shù)據(jù)庫(kù)中查找是 否已存在該文件節(jié)點(diǎn),當(dāng)在MongoDB數(shù)據(jù)庫(kù)中已存在該文件節(jié)點(diǎn)時(shí),貝U關(guān)閉MongoDB數(shù)據(jù) 庫(kù),當(dāng)在MongoDB數(shù)據(jù)庫(kù)中不存在該文件節(jié)點(diǎn)時(shí),貝U倉(cāng)ij建MongoDB GridFS對(duì)象,通過(guò)所述 MongoDB GridFS對(duì)象將文件節(jié)點(diǎn)的內(nèi)容寫(xiě)入MongoDB數(shù)據(jù)庫(kù)中,并獲取文件ID,當(dāng)沒(méi)有成 功獲取文件ID,則直接關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)成功獲取文件ID,則根據(jù)當(dāng)前絕對(duì)路徑名 稱(chēng)計(jì)算父節(jié)點(diǎn)的絕對(duì)路徑名,并通過(guò)父節(jié)點(diǎn)的絕對(duì)路徑名查詢(xún)獲取父節(jié)點(diǎn)ID,當(dāng)不能通過(guò) 父節(jié)點(diǎn)的絕對(duì)路徑名查詢(xún)獲取父節(jié)點(diǎn)ID,則直接關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)成功通過(guò)父節(jié)點(diǎn) 的絕對(duì)路徑名查詢(xún)獲取父節(jié)點(diǎn)ID,則填充fs. nodes集合中各字段的值,并將該節(jié)點(diǎn)插入 MongoDB數(shù)據(jù)庫(kù)中,當(dāng)成功將該節(jié)點(diǎn)插入MongoDB數(shù)據(jù)庫(kù)中時(shí),貝U完成文件節(jié)點(diǎn)的創(chuàng)建,當(dāng) 不能將該節(jié)點(diǎn)插入MongoDB數(shù)據(jù)庫(kù)中時(shí),貝U直接關(guān)閉MongoDB數(shù)據(jù)庫(kù)。
[0032] 所述目錄節(jié)點(diǎn)的創(chuàng)建包括以下步驟:
[0033] 根據(jù)所需創(chuàng)建的目錄節(jié)點(diǎn)的絕對(duì)路徑名稱(chēng)查找是否已存在該目錄節(jié)點(diǎn),當(dāng)存在該 目錄節(jié)點(diǎn)時(shí),則關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)不存在該目錄節(jié)點(diǎn)時(shí),則根據(jù)當(dāng)前絕對(duì)路徑名稱(chēng) 計(jì)算父節(jié)點(diǎn)的絕對(duì)路徑名,當(dāng)父節(jié)點(diǎn)為根目錄時(shí),則將當(dāng)前目錄節(jié)點(diǎn)的父節(jié)點(diǎn)ID設(shè)置為 NULL,然后填充當(dāng)前節(jié)點(diǎn)fs. nodes集合中各字段的值,再將將該目錄節(jié)點(diǎn)插入MongoDB數(shù) 據(jù)庫(kù)中;
[0034] 當(dāng)父節(jié)點(diǎn)不為根目錄時(shí),則通過(guò)父節(jié)點(diǎn)的絕對(duì)路徑名查詢(xún)獲取父節(jié)點(diǎn)ID,并修改 父節(jié)點(diǎn)中連接數(shù)字段的值,當(dāng)不能修改父節(jié)點(diǎn)中連接數(shù)字段的值時(shí),則關(guān)閉MongoDB數(shù)據(jù) 庫(kù),當(dāng)成功修改父節(jié)點(diǎn)中連接數(shù)字段的值時(shí),則將當(dāng)前目錄節(jié)點(diǎn)的父節(jié)點(diǎn)ID設(shè)置為NULL, 然后填充當(dāng)前節(jié)點(diǎn)fs. nodes集合中各字段的值,再將將該目錄節(jié)點(diǎn)插入MongoDB數(shù)據(jù)庫(kù) 中。
[0035] 所述節(jié)點(diǎn)的刪除包括文件節(jié)點(diǎn)的刪除及目錄節(jié)點(diǎn)的刪除。
[0036] 所述文件節(jié)點(diǎn)的刪除包括以下步驟:
[0037] 將Linux文件系統(tǒng)連接MongoDB數(shù)據(jù)庫(kù),根據(jù)所需刪除的文件節(jié)點(diǎn)的絕對(duì)路徑名 稱(chēng)查找是否已存在該文件節(jié)點(diǎn),當(dāng)不存在該文件節(jié)點(diǎn)時(shí),則關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)存在該 文件節(jié)點(diǎn)時(shí),貝 1J從fs. nodes集合中刪除該文件節(jié)點(diǎn),當(dāng)不能從fs. nodes集合中刪除該文件 節(jié)點(diǎn)時(shí),貝1J直接關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)成功從fs. nodes集合中刪除該文件節(jié)點(diǎn)時(shí),貝U倉(cāng)1J建 MongoDB GridFS對(duì)象,通過(guò)該MongoDB GridFS對(duì)象從MongoDB數(shù)據(jù)庫(kù)中刪除該文件節(jié)點(diǎn)所 對(duì)應(yīng)的文件信息。
[0038]所述目錄節(jié)點(diǎn)的刪除包括以下步驟:
[0039] 將Linux文件系統(tǒng)連接MongoDB數(shù)據(jù)庫(kù),根據(jù)所需刪除的目錄節(jié)點(diǎn)的絕對(duì)路徑名 稱(chēng)查找是否已存在該目錄節(jié)點(diǎn)。當(dāng)不存在該目錄節(jié)點(diǎn),則關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)存在該目 錄節(jié)點(diǎn)時(shí),則計(jì)算該目錄節(jié)點(diǎn)的父節(jié)點(diǎn)絕對(duì)路徑名稱(chēng),當(dāng)該目錄節(jié)點(diǎn)的父節(jié)點(diǎn)絕對(duì)路徑名 稱(chēng)為根目錄時(shí),則關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)目錄節(jié)點(diǎn)的父節(jié)點(diǎn)絕對(duì)路徑名稱(chēng)不為根目錄時(shí), 則修改父節(jié)點(diǎn)中連接數(shù)字段的值,當(dāng)不能修改父節(jié)點(diǎn)中連接數(shù)字段的值時(shí),則關(guān)閉MongoDB 數(shù)據(jù)庫(kù),當(dāng)成功修改父節(jié)點(diǎn)中連接數(shù)字段的值時(shí),則針對(duì)當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn),依據(jù)子節(jié) 點(diǎn)類(lèi)型,遞歸調(diào)用刪除文件節(jié)點(diǎn)中的Step 1-Step 5或遞歸調(diào)用刪除目錄節(jié)點(diǎn)中的Step l-Step6〇
[0040] 本發(fā)明具有以下有益效果:
[0041] 本發(fā)明所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法通過(guò)目錄節(jié)點(diǎn)與 fs. nodes集合相互關(guān)聯(lián),文件節(jié)點(diǎn)與fs. nodes集合、fs. files集合以及fs. chunks集合元 素相互關(guān)聯(lián),節(jié)點(diǎn)與節(jié)點(diǎn)之間的父子關(guān)系由fs. nodes的鏈接結(jié)構(gòu)所決定,從而實(shí)現(xiàn)節(jié)點(diǎn)的 刪除及創(chuàng)建,并且占用存儲(chǔ)空間少,查詢(xún)效率高,通過(guò)fs. nodes集合不僅記錄了節(jié)點(diǎn)間的 關(guān)聯(lián)關(guān)系,同時(shí)也記錄了節(jié)點(diǎn)自身的元數(shù)據(jù)信息,與分別對(duì)節(jié)點(diǎn)間關(guān)聯(lián)關(guān)系和對(duì)節(jié)點(diǎn)元數(shù) 據(jù)設(shè)計(jì)表相比,節(jié)省了連接字段所占用的存儲(chǔ)空間,針對(duì)文件系統(tǒng)特有的按路徑逐級(jí)查找 文件或目錄的特點(diǎn),該結(jié)構(gòu)又能很好地節(jié)省讀取查詢(xún)中間節(jié)點(diǎn)元數(shù)據(jù)信息的時(shí)間,從而提 高查詢(xún)效率。

【專(zhuān)利附圖】

【附圖說(shuō)明】
[0042]圖1為本發(fā)明中創(chuàng)建及刪除節(jié)點(diǎn)的過(guò)程中的對(duì)應(yīng)關(guān)系圖;
[0043] 圖2為本發(fā)明中創(chuàng)建文件節(jié)點(diǎn)的流程圖;
[0044] 圖3為本發(fā)明創(chuàng)建目錄節(jié)點(diǎn)的流程圖;
[0045] 圖4為本發(fā)明刪除文件節(jié)點(diǎn)的流程圖;
[0046] 圖5為本發(fā)明刪除目錄節(jié)點(diǎn)的流程圖。

【具體實(shí)施方式】
[0047] 下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步詳細(xì)描述:
[0048] 參考圖1,本發(fā)明所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法包括以下 步驟:構(gòu)建用于儲(chǔ)存文件目錄結(jié)構(gòu)信息以及節(jié)點(diǎn)元數(shù)據(jù)信息的fs. nodes集合,再利用 MongoDB GridFS存儲(chǔ)文件,同時(shí)在利用MongoDB GridFS存儲(chǔ)文件的過(guò)程中自動(dòng)生成用于存 儲(chǔ)文件元數(shù)據(jù)信息的fs. files集合及用于存儲(chǔ)文件數(shù)據(jù)信息的fs. chunks集合,Linux文 件系統(tǒng)與MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)節(jié)點(diǎn)的創(chuàng)建及刪除過(guò)程中通過(guò)fs. nodes集合、fs. files集合 及fs. chunks集合關(guān)聯(lián),具體的,目錄節(jié)點(diǎn)與fs. nodes集合相互關(guān)聯(lián),文件節(jié)點(diǎn)與fs. nodes 集合、fs. files集合以及fs. chunks集合元素相互關(guān)聯(lián),節(jié)點(diǎn)與節(jié)點(diǎn)之間的父子關(guān)系由 fs. nodes集合內(nèi)元素的鏈接結(jié)構(gòu)所決定。
[0049] 樹(shù)型文件目錄結(jié)構(gòu)在MongoDB數(shù)據(jù)庫(kù)中的映射,MongoDB GridFS存儲(chǔ)文件時(shí)生 成fs. files集合及fs. chunks集合,分別用于存儲(chǔ)文件元數(shù)據(jù)信息和文件數(shù)據(jù)信息,其中 fs. files集合及fs. chunks集合內(nèi)各字段的定義分別如表1及表2所述:
[0050]表1
[0051]

【權(quán)利要求】
1. 一種面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,包括以下步驟:構(gòu) 建用于儲(chǔ)存文件目錄結(jié)構(gòu)信息以及節(jié)點(diǎn)元數(shù)據(jù)信息的fs. nodes集合,再利用MongoDB GridFS存儲(chǔ)文件,同時(shí)在利用MongoDB GridFS存儲(chǔ)文件的過(guò)程中自動(dòng)生成用于存儲(chǔ)文件 元數(shù)據(jù)信息的fs. files集合及用于存儲(chǔ)文件數(shù)據(jù)信息的fs. chunks集合,Linux文件系 統(tǒng)與MongoDB數(shù)據(jù)庫(kù)實(shí)現(xiàn)節(jié)點(diǎn)的創(chuàng)建及刪除過(guò)程中通過(guò)fs. nodes集合、fs. files集合及 fs. chunks集合關(guān)聯(lián),具體的,目錄節(jié)點(diǎn)與fs. nodes集合相互關(guān)聯(lián),文件節(jié)點(diǎn)與fs. nodes集 合、fs. files集合以及fs. chunks集合相互關(guān)聯(lián),節(jié)點(diǎn)與節(jié)點(diǎn)之間的父子關(guān)系由fs. nodes集 合的鏈接結(jié)構(gòu)所決定。
2. 根據(jù)權(quán)利要求1所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,所 述fs. nodes集合中的各個(gè)字段的含義如下: _id字段:用于記錄節(jié)點(diǎn)的全局唯一標(biāo)識(shí)ID,類(lèi)型為Object_id,由mongoDB默認(rèn)自動(dòng) 賦值; name字段:用于記錄節(jié)點(diǎn)的名稱(chēng),類(lèi)型為字符串; type字段:用于記錄節(jié)點(diǎn)的類(lèi)型,類(lèi)型為整型; depth字段:用于記錄節(jié)點(diǎn)所在樹(shù)結(jié)構(gòu)的深度,類(lèi)型為整型; abs_path字段:用于記錄節(jié)點(diǎn)的絕對(duì)路徑名稱(chēng),即為根節(jié)點(diǎn)到當(dāng)前節(jié)點(diǎn)的路徑,類(lèi)型 為字符串; parent_id :用于記錄節(jié)點(diǎn)的父節(jié)點(diǎn)ID,類(lèi)型為Object_id ; meta_data :用于記錄節(jié)點(diǎn)的元數(shù)據(jù)信息,類(lèi)型為BS0N ; 其中,meta_data各個(gè)字段含義如下: file_id字段:用于記錄文件ID,類(lèi)型為Object_id,其中,當(dāng)節(jié)點(diǎn)是文件,則file_id字 段有效;當(dāng)節(jié)點(diǎn)為目錄時(shí),則file_id字段無(wú)效; mode字段:用于記錄節(jié)點(diǎn)訪(fǎng)問(wèn)模式,類(lèi)型為整型; uid字段:用于記錄用戶(hù)id,類(lèi)型為整型; gid字段:用于記錄組id,類(lèi)型為整型; nlink字段:用于記錄節(jié)點(diǎn)連接數(shù),類(lèi)型為整型,當(dāng)節(jié)點(diǎn)為文件時(shí),則nlink字段為該節(jié) 點(diǎn)的連接數(shù);當(dāng)節(jié)點(diǎn)為目錄時(shí),則nlink字段為該目錄下所包含的子目錄數(shù); atime字段:用于記錄節(jié)點(diǎn)上一次存取時(shí)間; mtime字段:用于記錄節(jié)點(diǎn)上一次修改時(shí)間; ctime字段:用于記錄上一次狀態(tài)修改時(shí)間。
3. 根據(jù)權(quán)利要求1所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,所 述節(jié)點(diǎn)的創(chuàng)建包括文件節(jié)點(diǎn)的創(chuàng)建及目錄節(jié)點(diǎn)的創(chuàng)建。
4. 根據(jù)權(quán)利要求3所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,所 述文件節(jié)點(diǎn)的創(chuàng)建包括以下步驟: 檢查所需創(chuàng)建的文件節(jié)點(diǎn)是否為空文件節(jié)點(diǎn),當(dāng)所述文件節(jié)點(diǎn)為空文件節(jié)點(diǎn)時(shí),則關(guān) 閉MongoDB數(shù)據(jù)庫(kù),當(dāng)所述文件節(jié)點(diǎn)不為空文件節(jié)點(diǎn)時(shí),則將Linux文件系統(tǒng)連接MongoDB 數(shù)據(jù)庫(kù),并根據(jù)所需創(chuàng)建的文件節(jié)點(diǎn)的絕對(duì)路徑名稱(chēng)在MongoDB數(shù)據(jù)庫(kù)中查找是否已存在 該文件節(jié)點(diǎn),當(dāng)在MongoDB數(shù)據(jù)庫(kù)中已存在該文件節(jié)點(diǎn)時(shí),貝U關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)在 MongoDB數(shù)據(jù)庫(kù)中不存在該文件節(jié)點(diǎn)時(shí),則創(chuàng)建MongoDB GridFS對(duì)象,通過(guò)所述MongoDB GridFS對(duì)象將文件節(jié)點(diǎn)的內(nèi)容寫(xiě)入MongoDB數(shù)據(jù)庫(kù)中,并獲取文件ID,當(dāng)沒(méi)有成功獲取文 件ID,則直接關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)成功獲取文件ID,則根據(jù)當(dāng)前絕對(duì)路徑名稱(chēng)計(jì)算父節(jié) 點(diǎn)的絕對(duì)路徑名,并通過(guò)父節(jié)點(diǎn)的絕對(duì)路徑名查詢(xún)獲取父節(jié)點(diǎn)ID,當(dāng)不能通過(guò)父節(jié)點(diǎn)的絕 對(duì)路徑名查詢(xún)獲取父節(jié)點(diǎn)ID,則直接關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)成功通過(guò)父節(jié)點(diǎn)的絕對(duì)路徑 名查詢(xún)獲取父節(jié)點(diǎn)ID,則填充fs. nodes集合中各字段的值,并將該節(jié)點(diǎn)插入MongoDB數(shù)據(jù) 庫(kù)中,當(dāng)成功將該節(jié)點(diǎn)插入MongoDB數(shù)據(jù)庫(kù)中時(shí),貝U完成文件節(jié)點(diǎn)的創(chuàng)建,當(dāng)不能將該節(jié)點(diǎn) 插入MongoDB數(shù)據(jù)庫(kù)中時(shí),貝U直接關(guān)閉MongoDB數(shù)據(jù)庫(kù)。
5. 根據(jù)權(quán)利要求3所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,所 述目錄節(jié)點(diǎn)的創(chuàng)建包括以下步驟: 根據(jù)所需創(chuàng)建的目錄節(jié)點(diǎn)的絕對(duì)路徑名稱(chēng)查找是否已存在該目錄節(jié)點(diǎn),當(dāng)存在該目錄 節(jié)點(diǎn)時(shí),則關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)不存在該目錄節(jié)點(diǎn)時(shí),則根據(jù)當(dāng)前絕對(duì)路徑名稱(chēng)計(jì)算父 節(jié)點(diǎn)的絕對(duì)路徑名,當(dāng)父節(jié)點(diǎn)為根目錄時(shí),則將當(dāng)前目錄節(jié)點(diǎn)的父節(jié)點(diǎn)ID設(shè)置為NULL,然 后填充當(dāng)前節(jié)點(diǎn)fs. nodes集合中各字段的值,再將將該目錄節(jié)點(diǎn)插入MongoDB數(shù)據(jù)庫(kù)中; 當(dāng)父節(jié)點(diǎn)不為根目錄時(shí),則通過(guò)父節(jié)點(diǎn)的絕對(duì)路徑名查詢(xún)獲取父節(jié)點(diǎn)ID,并修改父節(jié) 點(diǎn)中連接數(shù)字段的值,當(dāng)不能修改父節(jié)點(diǎn)中連接數(shù)字段的值時(shí),貝1J關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng) 成功修改父節(jié)點(diǎn)中連接數(shù)字段的值時(shí),則將當(dāng)前目錄節(jié)點(diǎn)的父節(jié)點(diǎn)ID設(shè)置為NULL,然后填 充當(dāng)前節(jié)點(diǎn)fs. nodes集合中各字段的值,再將將該目錄節(jié)點(diǎn)插入MongoDB數(shù)據(jù)庫(kù)中。
6. 根據(jù)權(quán)利要求1所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,所 述節(jié)點(diǎn)的刪除包括文件節(jié)點(diǎn)的刪除及目錄節(jié)點(diǎn)的刪除。
7. 根據(jù)權(quán)利要求6所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,所 述文件節(jié)點(diǎn)的刪除包括以下步驟: 將Linux文件系統(tǒng)連接MongoDB數(shù)據(jù)庫(kù),根據(jù)所需刪除的文件節(jié)點(diǎn)的絕對(duì)路徑名稱(chēng)查 找是否已存在該文件節(jié)點(diǎn),當(dāng)不存在該文件節(jié)點(diǎn)時(shí),則關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)存在該文件 節(jié)點(diǎn)時(shí),貝1J從fs. nodes集合中刪除該文件節(jié)點(diǎn),當(dāng)不能從fs. nodes集合中刪除該文件節(jié) 點(diǎn)時(shí),貝1J直接關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)成功從fs. nodes集合中刪除該文件節(jié)點(diǎn)時(shí),貝U倉(cāng)1J建 MongoDB GridFS對(duì)象,通過(guò)該MongoDB GridFS對(duì)象從MongoDB數(shù)據(jù)庫(kù)中刪除該文件節(jié)點(diǎn)所 對(duì)應(yīng)的文件信息。
8. 根據(jù)權(quán)利要求7所述的面向MongoDB的用戶(hù)空間文件系統(tǒng)實(shí)現(xiàn)方法,其特征在于,所 述目錄節(jié)點(diǎn)的刪除包括以下步驟: 將Linux文件系統(tǒng)連接MongoDB數(shù)據(jù)庫(kù),根據(jù)所需刪除的目錄節(jié)點(diǎn)的絕對(duì)路徑名稱(chēng)查 找是否已存在該目錄節(jié)點(diǎn)。當(dāng)不存在該目錄節(jié)點(diǎn),貝1J關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)存在該目錄 節(jié)點(diǎn)時(shí),則計(jì)算該目錄節(jié)點(diǎn)的父節(jié)點(diǎn)絕對(duì)路徑名稱(chēng),當(dāng)該目錄節(jié)點(diǎn)的父節(jié)點(diǎn)絕對(duì)路徑名稱(chēng) 為根目錄時(shí),則關(guān)閉MongoDB數(shù)據(jù)庫(kù),當(dāng)目錄節(jié)點(diǎn)的父節(jié)點(diǎn)絕對(duì)路徑名稱(chēng)不為根目錄時(shí),則 修改父節(jié)點(diǎn)中連接數(shù)字段的值,當(dāng)不能修改父節(jié)點(diǎn)中連接數(shù)字段的值時(shí),則關(guān)閉MongoDB 數(shù)據(jù)庫(kù),當(dāng)成功修改父節(jié)點(diǎn)中連接數(shù)字段的值時(shí),則針對(duì)當(dāng)前節(jié)點(diǎn)的所有子節(jié)點(diǎn),依據(jù)子節(jié) 點(diǎn)類(lèi)型,遞歸調(diào)用刪除文件節(jié)點(diǎn)中的Step 1-Step 5或遞歸調(diào)用刪除目錄節(jié)點(diǎn)中的Step 1-Step 6〇
【文檔編號(hào)】G06F17/30GK104239511SQ201410469287
【公開(kāi)日】2014年12月24日 申請(qǐng)日期:2014年9月15日 優(yōu)先權(quán)日:2014年9月15日
【發(fā)明者】鄭慶華, 陳亞興, 董博, 楊源杰, 李慶喻, 戴立言, 胡偉雄, 陳志敏 申請(qǐng)人:西安交通大學(xué), 上海網(wǎng)達(dá)軟件股份有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
平乐县| 安陆市| 健康| 定襄县| 武陟县| 鸡东县| 伊通| 特克斯县| 卫辉市| 精河县| 金堂县| 沈阳市| 忻州市| 砀山县| 内黄县| 孟州市| 玉龙| 富源县| 措勤县| 中卫市| 日喀则市| 巴南区| 宜阳县| 龙井市| 馆陶县| 夹江县| 新民市| 海门市| 绵竹市| 石泉县| 棋牌| 永和县| 涞水县| 抚远县| 玛纳斯县| 南康市| 都兰县| 汝州市| 罗田县| 博湖县| 台中县|