国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于局域網(wǎng)的HDFS分布式文件共享方法與流程

      文檔序號(hào):12478333閱讀:669來(lái)源:國(guó)知局
      本發(fā)明涉及一種基于局域網(wǎng)的HDFS分布式文件共享系統(tǒng),屬于互聯(lián)網(wǎng)
      技術(shù)領(lǐng)域
      :。
      背景技術(shù)
      ::在大數(shù)據(jù)的時(shí)代背景下,云存儲(chǔ)應(yīng)用日漸廣泛,如微云、百度云盤等都是較為成熟的存儲(chǔ)工具。但是由于網(wǎng)絡(luò)帶寬的限制,對(duì)于較大文件的上傳耗時(shí)耗流量,同時(shí)無(wú)法及時(shí)獲取其他用戶的文件分享情況。當(dāng)需要相應(yīng)的文件資料時(shí),需要通過(guò)相對(duì)復(fù)雜的途徑去獲取。而將文件保存于某一硬件設(shè)備上,數(shù)據(jù)安全依賴于硬件設(shè)備,隨著云計(jì)算技術(shù)在國(guó)內(nèi)外的高速發(fā)展,基于HDFS的技術(shù)得到了廣泛的應(yīng)用。HDFS(HadoopDistributedFileSystem分布式文件系統(tǒng))的設(shè)計(jì)理念是存儲(chǔ)超大文件,所述超大文件是指數(shù)量級(jí)相對(duì)較大的文件,包括MB、GB、TB級(jí)。流式數(shù)據(jù)訪問(wèn):能夠進(jìn)行高效的讀取,即一次寫入、多次讀取的方式,便于進(jìn)行相應(yīng)的Hadoop分析對(duì)象。在數(shù)據(jù)集生成以后,可以長(zhǎng)時(shí)間在數(shù)據(jù)集上進(jìn)行相應(yīng)的分析工作。每一次分析會(huì)讀取該數(shù)據(jù)集的大部分甚至全部的數(shù)據(jù),所以讀取所有的數(shù)據(jù)集時(shí)間上要比第一次記錄的時(shí)間要長(zhǎng)。HDFS可以運(yùn)行在普通廉價(jià)的服務(wù)器上,在硬件出現(xiàn)故障的情況下,也可以通過(guò)容錯(cuò)策略來(lái)保證數(shù)據(jù)的高可用。HDFS具有的特點(diǎn)包括:(1)HDFS將文件保存成多個(gè)副本,提供了很好的容錯(cuò)機(jī)制,副本丟失或者宕機(jī)的時(shí)候能夠進(jìn)行自動(dòng)恢復(fù)。默認(rèn)保存三個(gè)副本。(2)能夠運(yùn)行在廉價(jià)的機(jī)器上。(3)適合大數(shù)據(jù)的處理。Hadoop2.x中采用128M作為一個(gè)Block的塊大小。技術(shù)實(shí)現(xiàn)要素:本發(fā)明所要解決的技術(shù)問(wèn)題是:實(shí)現(xiàn)文件的高速低費(fèi)傳輸、存儲(chǔ)與分享。為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種基于局域網(wǎng)的HDFS分布式文件共享方法,包括以下步驟:1)將HDFS部署在局域網(wǎng)上,使用一臺(tái)服務(wù)器作為主節(jié)點(diǎn)(NameNode),即應(yīng)用的監(jiān)控服務(wù)器;使用其他N個(gè)服務(wù)器作為從節(jié)點(diǎn)(DataNode),即應(yīng)用的存儲(chǔ)服務(wù)器;2)在服務(wù)器端,主節(jié)點(diǎn)將文件分成固定大小的多個(gè)塊并存儲(chǔ)于不同的從節(jié)點(diǎn)存儲(chǔ)服務(wù)器上,且每個(gè)數(shù)據(jù)塊均有2-3個(gè)備份,保證了文件的安全性,同時(shí)系統(tǒng)可以很方便地增加從節(jié)點(diǎn)以實(shí)現(xiàn)橫向擴(kuò)展,提高性能。穩(wěn)定高效的傳輸與存儲(chǔ)是指在局域網(wǎng)范圍內(nèi)部署HDFS,文件上傳后,主節(jié)點(diǎn)將文件分成多個(gè)副本存儲(chǔ)在不同的從節(jié)點(diǎn)服務(wù)器,實(shí)現(xiàn)分布式文件存儲(chǔ)的基本架構(gòu),將文件分片區(qū)、副本進(jìn)行存儲(chǔ),保證存儲(chǔ)文件不丟失。進(jìn)一步地,將HDFS文件系統(tǒng)與WEB容器保存文件作為一個(gè)二級(jí)緩存,所有文件暫存到web服務(wù)器上,同時(shí)文件保存到HDFS上,讀取文件信息時(shí),直接從web服務(wù)器上進(jìn)行查找;若文件丟失,從HDFS上加載文件到web服務(wù)器上,以保證正常業(yè)務(wù)的進(jìn)行。本發(fā)明實(shí)現(xiàn)了文件毫秒級(jí)查詢速度,系統(tǒng)采用二級(jí)文件系統(tǒng),參照緩存機(jī)制的原理,二級(jí)文件系統(tǒng)保證了文件讀取的效率,使文件能夠穩(wěn)定快速的進(jìn)行增刪改查的操作,提高了系統(tǒng)的讀寫效率和用戶體驗(yàn)。進(jìn)一步地,本發(fā)明的基于局域網(wǎng)的HDFS分布式文件共享方法包括用戶功能服務(wù)和文件功能服務(wù):功能是在服務(wù)器端實(shí)現(xiàn)的,但是是通過(guò)webservice的方式開放接口供客戶端使用。所述用戶功能服務(wù)包括用戶注冊(cè)、登陸、好友管理;所述文件功能服務(wù)包括文件上傳、文件分享、文件管理;所述文件分享,用戶在客戶端發(fā)布一個(gè)分享文件的消息到服務(wù)器端,然后存入MongoDB數(shù)據(jù)庫(kù),并允許用戶指定分享文件集的封面、描述以及文件列表等,數(shù)據(jù)通過(guò)客戶端上傳服務(wù)器,經(jīng)服務(wù)器處理后存入MongoDB數(shù)據(jù)庫(kù)。所述文件管理,包括新建目錄、上傳文件、下載文件、刪除文件等基本操作,采用文件操作節(jié)點(diǎn)搜索算法(FilePrivateDtoOperate)實(shí)現(xiàn)文件管理功能。文件目錄與文件的關(guān)系由Json的樹形格式表示,所以系統(tǒng)采用深度優(yōu)先遍歷算法查詢指定的樹形節(jié)點(diǎn),查找到相應(yīng)的樹形節(jié)點(diǎn)后,對(duì)該節(jié)點(diǎn)進(jìn)行相應(yīng)的操作,即可實(shí)現(xiàn)對(duì)文件的各種操作,基本操作過(guò)程為:(1)查詢得到該用戶的原有文件的樹形結(jié)構(gòu);(2)輸入?yún)?shù),根據(jù)操作類型的不同,選擇輸入文件的源序列碼和目標(biāo)序列碼;(3)采用深度優(yōu)先搜索方法(DFS)找到目標(biāo)節(jié)點(diǎn);(4)對(duì)目標(biāo)節(jié)點(diǎn)進(jìn)行相應(yīng)操作。根據(jù)操作的不同,將操作類型分為:新增append、移動(dòng)remove、查找search、重命名rename。利用四個(gè)基本的操作即可組裝成所有的文件操作。例如,如果想新增一個(gè)文件夾,先使用DFS查找到相應(yīng)的節(jié)點(diǎn),在該節(jié)點(diǎn)下append一個(gè)新的序列碼,即可完成在文件夾下新增一個(gè)文件夾的功能。再例如,如果想查找到某個(gè)文件夾下的所有的文件及其目錄信息,那么使用search操作,找到指定文件夾的序列碼,返回該節(jié)點(diǎn)下所有的privateFileDtoList數(shù)據(jù)結(jié)構(gòu)即可。進(jìn)一步地,本發(fā)明結(jié)合Mysql、MongoDB兩者數(shù)據(jù)庫(kù)進(jìn)行不同類別數(shù)據(jù)的存儲(chǔ):用戶數(shù)據(jù)及好友關(guān)系數(shù)據(jù)存于Mysql數(shù)據(jù)庫(kù),文件地址序列化服務(wù)產(chǎn)生的文件地址索引、共有文件索引、文件用戶關(guān)系、用戶文件關(guān)系、分享文件等信息存放于MongoDB數(shù)據(jù)庫(kù);同時(shí)利用HDFS進(jìn)行文件數(shù)據(jù)(包括上傳文件、文件地址)的存儲(chǔ),極大提高了數(shù)據(jù)的存取效率。由于MongoDB數(shù)據(jù)庫(kù)本身不支持類似于關(guān)系型數(shù)據(jù)庫(kù)的事務(wù),為了能夠保證業(yè)務(wù)的完整性,本發(fā)明通過(guò)編程邏輯模擬關(guān)系型數(shù)據(jù)庫(kù)中的事務(wù),從而解決MongoDB數(shù)據(jù)庫(kù)中數(shù)據(jù)一致性的問(wèn)題。在MongoDB數(shù)據(jù)庫(kù)中建立一張事務(wù)表(TRANSACTION表),事務(wù)表存放以下內(nèi)容:(1)_id:事務(wù)記錄唯一的id號(hào),又稱transactionId;(2)dealType:事務(wù)狀態(tài),取值為0-4,分別表示為:初始態(tài)init、運(yùn)行態(tài)process、完成態(tài)commit、終止態(tài)complete、取消態(tài)cancel五個(gè)狀態(tài);(3)IsRollBBack:事務(wù)回滾標(biāo)識(shí)符,取值0或1,0表示事務(wù)不需回滾,1表示事務(wù)需回滾;(4)CreatedData:事務(wù)創(chuàng)建時(shí)間;(5)stateDate:上一次狀態(tài)改變時(shí)間;(6)CriticalDataDtoList:用于支持多節(jié)點(diǎn)事務(wù)處理,其中stage表示節(jié)點(diǎn),processDataDtoList表示事務(wù)所需數(shù)據(jù),包括待處理的表名(tableName)、數(shù)據(jù)主鍵(primaryKey)、數(shù)據(jù)內(nèi)容(data)、操作方式(operType),operType可取值C(新增數(shù)據(jù))、U(修改數(shù)據(jù))、D(刪除數(shù)據(jù))。為支持事務(wù)的多線程使用,提高運(yùn)行效率,本發(fā)明利用一個(gè)線程池來(lái)管理事務(wù)管理器,線程池的本質(zhì)是一個(gè)容器Context,用于保存程序執(zhí)行的上下文。例如:node1(transactionId)—>nodel2(transactionId),即第一節(jié)點(diǎn)將transactionId傳遞給第二節(jié)點(diǎn),兩個(gè)節(jié)點(diǎn)共同處理同一條事務(wù)記錄,提高運(yùn)行效率。同時(shí)用堆棧的方法來(lái)存儲(chǔ)事務(wù)管理器,即put、get、pop、release方法。建立MongoDB數(shù)據(jù)庫(kù)事務(wù)框架,MongoDB數(shù)據(jù)庫(kù)事務(wù)框架建立過(guò)程包括以下步驟:步驟1:初始化事務(wù),在MongoDB數(shù)據(jù)庫(kù)中生成一條事務(wù)記錄,初始化事務(wù)的狀態(tài)(dealType)為init,并通過(guò)序列化生成一個(gè)唯一的12字節(jié)的節(jié)點(diǎn)transactionId;步驟2:將關(guān)鍵數(shù)據(jù)存入MongoDB數(shù)據(jù)庫(kù)事務(wù)表的processDataDtoList中,在操作數(shù)據(jù)表記錄后添加節(jié)點(diǎn)transactionId,即對(duì)該事務(wù)進(jìn)行加鎖,其他數(shù)據(jù)操作等待該事務(wù)完成解鎖后,才能執(zhí)行,同時(shí)把節(jié)點(diǎn)transactionId傳給其他節(jié)點(diǎn),進(jìn)行多線程并行處理;步驟3:計(jì)算上一次狀態(tài)改變時(shí)間(stateDate)和事務(wù)創(chuàng)建時(shí)間(CreatedData)的時(shí)間差,若超過(guò)設(shè)定值,如100ms,即判斷事務(wù)失敗(部分?jǐn)?shù)據(jù)已經(jīng)成功處理并解鎖,但沒(méi)有完成所有處理),則執(zhí)行步驟5,若事務(wù)執(zhí)行成功,即在設(shè)定值100ms內(nèi)事務(wù)狀態(tài)更改為commit態(tài),則執(zhí)行步驟6;步驟4:將IsRollBBack置為1,對(duì)事務(wù)進(jìn)行回滾,根據(jù)事務(wù)表processDataDtoList中的數(shù)據(jù),找到待操作的所有數(shù)據(jù)記錄,回滾操作即重新對(duì)已處理的數(shù)據(jù)記錄重新加鎖;步驟5:若事務(wù)不斷回滾超過(guò)設(shè)定次數(shù),如5次,即認(rèn)為該事務(wù)不可完成,將事務(wù)狀態(tài)置為cancel態(tài),還原數(shù)據(jù)表內(nèi)容,對(duì)數(shù)據(jù)記錄進(jìn)行解鎖,刪除該條事務(wù)記錄,同時(shí)在客戶端進(jìn)行提醒;步驟6:若事務(wù)完成,即可將事務(wù)狀態(tài)置為complete狀態(tài),并銷毀該條事務(wù)記錄,加快事務(wù)查詢速率;步驟7:結(jié)束。本發(fā)明達(dá)到的有益效果:本發(fā)明將HDFS部署在局域網(wǎng)上,局域網(wǎng)上傳文件速度快,不費(fèi)流量,HDFS可以保證在存在故障的情況下也能可靠地存儲(chǔ)數(shù)據(jù);本發(fā)明利用二級(jí)文件系統(tǒng),進(jìn)一步保證文件安全性,并實(shí)現(xiàn)文件的毫秒級(jí)查詢效率;利用不同類型的數(shù)據(jù)庫(kù)存儲(chǔ)不同類型的數(shù)據(jù),提高數(shù)據(jù)存取效率,同時(shí)利用MongoDB事務(wù)框架保證事務(wù)數(shù)據(jù)的完整性;本發(fā)明設(shè)有界面友好的客戶端,方便客戶進(jìn)行個(gè)性化的文件管理、文件分享,極大地提高了用戶體驗(yàn)。附圖說(shuō)明圖1系統(tǒng)C/S架構(gòu)的邏輯調(diào)用關(guān)系圖;圖2系統(tǒng)客戶端具體模塊功能結(jié)構(gòu)圖;圖3系統(tǒng)服務(wù)器端框架構(gòu)圖;圖4模塊存儲(chǔ)位置的邏輯圖;圖5系統(tǒng)服務(wù)器端MongoDB事務(wù)框架建立過(guò)程流程圖;圖6MongoDB關(guān)鍵數(shù)據(jù)的存放方式示意圖;圖7系統(tǒng)服務(wù)器端文件二級(jí)緩存的基本架構(gòu)圖;圖8系統(tǒng)服務(wù)器端文件服務(wù)類圖;圖9系統(tǒng)服務(wù)器端深拷貝程序流程圖;圖10系統(tǒng)服務(wù)器端實(shí)體斷言測(cè)試框架流程圖。具體實(shí)施方式本發(fā)明依靠基于局域網(wǎng)的HDFS分布式文件共享系統(tǒng)來(lái)實(shí)現(xiàn),本系統(tǒng)包括客戶端和服務(wù)器端兩個(gè)部分。下文將結(jié)合附圖進(jìn)行詳細(xì)說(shuō)明。根據(jù)系統(tǒng)功能的劃分,決定使用C/S架構(gòu)進(jìn)行實(shí)現(xiàn)。如圖1所示:客戶端:使用HTTP請(qǐng)求調(diào)用相應(yīng)的服務(wù)器端所開放的Webservice接口,達(dá)到處理數(shù)據(jù)的目的。本發(fā)明的客戶端采用Android系統(tǒng)作為基礎(chǔ),實(shí)現(xiàn)服務(wù)器端接口調(diào)用及用戶輸入處理的作用??蛻舳苏{(diào)用服務(wù)器端接口都是以HTTP請(qǐng)求的方式,傳遞數(shù)據(jù)的格式均為Json格式的數(shù)據(jù),采用AndroidHTTP請(qǐng)求框架okHttp作為基礎(chǔ)的開發(fā)程序包,封裝實(shí)現(xiàn)了okHttpUtils的編寫。在用戶發(fā)布或者上傳數(shù)據(jù)時(shí),客戶端系統(tǒng)會(huì)發(fā)送相應(yīng)的數(shù)據(jù)到服務(wù)器端指定的接口,實(shí)現(xiàn)相應(yīng)的業(yè)務(wù)邏輯??蛻舳说哪K具體服務(wù)功能如圖2??蛻舳嘶贏ndroid進(jìn)行界面設(shè)計(jì),文件存儲(chǔ)服務(wù)作為本系統(tǒng)的核心服務(wù)于在客戶端中廣泛使用,本文展示部分文件功能設(shè)計(jì)界面。服務(wù)器端:主要用于處理客戶端的不同請(qǐng)求,保證事務(wù)的完整性與數(shù)據(jù)的安全性,提供一個(gè)能夠?qū)崿F(xiàn)用戶與用戶之間即時(shí)通訊的接口,并提供相應(yīng)的Webservice接口供客戶端進(jìn)行調(diào)用。根據(jù)擴(kuò)展的需求,如圖3所示,本發(fā)明將系統(tǒng)的服務(wù)器端抽象為三層進(jìn)行設(shè)計(jì),主要為操作系統(tǒng)層、服務(wù)器層、接口層。對(duì)于每一層,基本定位為:操作系統(tǒng)層:系統(tǒng)所使用的組件相對(duì)復(fù)雜,所以使用Linux作為底層的操作系統(tǒng)。應(yīng)用層:應(yīng)用層分成了數(shù)據(jù)庫(kù)服務(wù)器、應(yīng)用服務(wù)器、文件服務(wù)器以及監(jiān)控日志服務(wù)器等。其中數(shù)據(jù)庫(kù)服務(wù)器選擇使用MySQL數(shù)據(jù)庫(kù)與MongoDB數(shù)據(jù)庫(kù)來(lái)進(jìn)行存儲(chǔ),數(shù)據(jù)存儲(chǔ)位置分布如圖4:使用MySQL數(shù)據(jù)庫(kù)保存用戶數(shù)據(jù)以及用戶好友關(guān)系,即在MySQL表中建立用戶表(user)和好友關(guān)系表(friend)。使用MongoDB數(shù)據(jù)庫(kù)保存文件地址序列化服務(wù)產(chǎn)生的文件地址索引、公有文件索引、文件用戶關(guān)系、用戶文件關(guān)系、分享文件數(shù)據(jù)數(shù)據(jù),數(shù)據(jù)表建設(shè)情況。由于MongoDB數(shù)據(jù)庫(kù)本身不具備事務(wù),為保證MongoDB數(shù)據(jù)的完整性,本發(fā)明設(shè)計(jì)一個(gè)相應(yīng)的事務(wù)框架來(lái)保證整個(gè)任務(wù)在執(zhí)行的過(guò)程中事務(wù)具有一致性。需要在MongoDB數(shù)據(jù)庫(kù)中建立一張事務(wù)表,事務(wù)表主要存放以下內(nèi)容:(1)_id:即事務(wù)記錄唯一的id號(hào),又稱transactionId;(2)dealType:即事務(wù)狀態(tài),取值為0-4,分別表示init(初始態(tài))、process(運(yùn)行態(tài))、commit(完成態(tài))、complete(終止態(tài))、cancel(取消態(tài))五個(gè)狀態(tài);(3)IsRollBBack:即事務(wù)回滾標(biāo)識(shí)符,取值0或1,0表示事務(wù)不需回滾,1表示事務(wù)需回滾;(4)CreatedData:事務(wù)創(chuàng)建時(shí)間;(5)stateDate:上一次狀態(tài)改變時(shí)間;(6)CriticalDataDtoList:用于支持多節(jié)點(diǎn)事務(wù)處理。其中stage表示節(jié)點(diǎn),processDataDtoList表示事務(wù)所需數(shù)據(jù),包括待處理的表名(tableName)、數(shù)據(jù)主鍵(primaryKey)、數(shù)據(jù)內(nèi)容(data)、操作方式(operType),operType可取值C(新增數(shù)據(jù))、U(修改數(shù)據(jù))、D(刪除數(shù)據(jù))。為支持事務(wù)的多線程使用,提高運(yùn)行效率,本發(fā)明引入一個(gè)線程池來(lái)管理事務(wù)管理器,線程池的本質(zhì)是一個(gè)容器,用于保存程序執(zhí)行的上下文,定義為Context。例如:node1(transactionId)—>nodel2(transactionId),即第一節(jié)點(diǎn)將transactionId傳遞給第二節(jié)點(diǎn),兩個(gè)節(jié)點(diǎn)共同處理同一條事務(wù)記錄,提高運(yùn)行效率。同時(shí)用堆棧的方法來(lái)存儲(chǔ)事務(wù)管理器,即put、get、pop、release方法。MongoDB事務(wù)框架的建立過(guò)程包括以下步驟,MongoDB事務(wù)框架建立過(guò)程如圖5所示:步驟1:初始化事務(wù),在MongoDB數(shù)據(jù)庫(kù)中生成一條事務(wù)記錄,初始化事務(wù)的狀態(tài)(dealType)為init,并通過(guò)序列化生成一個(gè)唯一的12字節(jié)的transactionId;步驟2:將關(guān)鍵數(shù)據(jù)存入事務(wù)表processDataDtoList(如圖6)中,在操作數(shù)據(jù)表記錄后添加transactionId,即對(duì)該事務(wù)進(jìn)行加鎖,其他數(shù)據(jù)操作必須等待該事務(wù)完成解鎖后,才能執(zhí)行,同時(shí)把transactionId傳給其他節(jié)點(diǎn),進(jìn)行多線程并行處理;步驟3:計(jì)算上一次狀態(tài)改變時(shí)間(stateDate)和事務(wù)創(chuàng)建時(shí)間(CreatedData)的時(shí)間差,若超過(guò)100ms,即判斷事務(wù)失敗(部分?jǐn)?shù)據(jù)已經(jīng)成功處理并解鎖,但沒(méi)有完成所有處理),則執(zhí)行步驟5;若事務(wù)執(zhí)行成功,即在100ms內(nèi)事務(wù)狀態(tài)更改為commit態(tài),則執(zhí)行步驟6;步驟4:將IsRollBBack置為1,對(duì)事務(wù)進(jìn)行回滾,根據(jù)processDataDtoList中的數(shù)據(jù),找到待操作的所有數(shù)據(jù)記錄,回滾操作即重新對(duì)已處理的數(shù)據(jù)記錄重新加鎖;步驟5:若事務(wù)不斷回滾超過(guò)5次,即可認(rèn)為該事務(wù)不可完成,將事務(wù)狀態(tài)置為cancel態(tài),還原數(shù)據(jù)表內(nèi)容,對(duì)數(shù)據(jù)記錄進(jìn)行解鎖,刪除該條事務(wù)記錄,同時(shí)在客戶端進(jìn)行提醒;步驟6:若事務(wù)完成,即可將事務(wù)狀態(tài)置為complete狀態(tài),并銷毀該條事務(wù)記錄,加快事務(wù)查詢速率;步驟7:結(jié)束。在應(yīng)用服務(wù)器中,根據(jù)功能點(diǎn)的要求主要包括Tomcat服務(wù)器。其中Tomcat服務(wù)器是整個(gè)web服務(wù)的容器,用于供外部的應(yīng)用訪問(wèn)服務(wù)器的資源。其中包括4個(gè)主要的服務(wù),分別為用戶服務(wù)、文件存儲(chǔ)服務(wù)、社會(huì)化服務(wù)、文件地址序列化服務(wù)。在文件存儲(chǔ)服務(wù),是本設(shè)計(jì)的重點(diǎn),需要實(shí)現(xiàn)海量級(jí)的文件存儲(chǔ)與毫秒級(jí)的文件查詢,流暢的文件操作時(shí)本設(shè)計(jì)的特點(diǎn)之一。采用二級(jí)緩存的方式實(shí)現(xiàn)毫秒級(jí)的文件查詢。基本構(gòu)架如圖7所示,在本系統(tǒng)中,參照緩存機(jī)制的原理,將HDFS文件系統(tǒng)與WEB容器保存文件作為一個(gè)二級(jí)緩存。保存在WEB服務(wù)器上面的文件可能會(huì)因?yàn)橐恍┨厥馇闆r而被銷毀,但是在HDFS上的文件不會(huì)被銷毀??蛻舳苏?qǐng)求一個(gè)相應(yīng)的文件地址后,服務(wù)器端回調(diào)用相應(yīng)的服務(wù),首先到WEB服務(wù)器的文件系統(tǒng)上查看該文件是否存在。如果文件存在,將會(huì)寫回這個(gè)文件到客戶端。如果文件不存在,將會(huì)到MongoDB服務(wù)器,根據(jù)傳入進(jìn)來(lái)的WEB服務(wù)器的文件地址而查詢到HDFS上(WEB服務(wù)器文件地址作為主鍵,查詢效率很高)的文件,從HDFS上加載到WEB服務(wù)器。這個(gè)過(guò)程的加載時(shí)間基本可以忽略不計(jì)(因?yàn)槲募赡茉谕粋€(gè)ACK上)。加載完成之后,同樣的會(huì)將這個(gè)文件寫到客戶端。即所有文件會(huì)保存到web服務(wù)器上,但是同時(shí)文件也會(huì)保存到HDFS上。針對(duì)于web服務(wù)器的文件,由于可能丟失,此時(shí)可以根據(jù)文件的保存地址到HDFS上重新加載相應(yīng)的文件到web服務(wù)器上,通過(guò)這樣的方式保證了文件的安全性以及毫秒級(jí)的查詢速度。流暢的文件操作依靠節(jié)點(diǎn)搜索算法實(shí)現(xiàn):文件的操作主要包括新建目錄、上傳文件、下載文件、刪除文件等基本操作。因?yàn)楸景l(fā)明采用Json的樹形格式去表示文件目錄與文件的關(guān)系,所以采用深度優(yōu)先遍歷去查詢指定的樹形節(jié)點(diǎn)。在查找到相應(yīng)的樹形節(jié)點(diǎn)后,只需要對(duì)這個(gè)節(jié)點(diǎn)進(jìn)行相應(yīng)的操作即可?;静僮鬟^(guò)程為:1、查詢得到該用戶的原有文件的樹形結(jié)構(gòu)。2、入?yún)?,根?jù)操作類型的不同,選擇輸入文件的源序列碼和目標(biāo)序列碼。3、DFS找到目標(biāo)節(jié)點(diǎn)。4、對(duì)目標(biāo)節(jié)點(diǎn)進(jìn)行相應(yīng)操作。根據(jù)操作的不同,將大致的操作類型分為:append、remove、search、rename。利用四個(gè)基本的操作即可組裝成所有的文件操作需要。例如,想要新增一個(gè)文件夾,先使用DFS(類圖如圖8)查找到相應(yīng)的節(jié)點(diǎn)之后,在該節(jié)點(diǎn)下append一個(gè)新的序列碼,即可完成在文件夾下新增一個(gè)子文件夾的功能。再例如,如果想查找到某個(gè)文件夾下的所有的文件及其目錄信息,則使用search操作,找到指定的文件夾的序列碼,返回該節(jié)點(diǎn)下的所有的privateFileDtoList的數(shù)據(jù)結(jié)構(gòu)即可。針對(duì)不同的文件操作,實(shí)際操作的過(guò)程是需要通過(guò)組合來(lái)完成的。定義四個(gè)基本的操作方法,借助上述DFS的搜索算法,定義出四個(gè)基本的操作類型:append、remove、search、rename。在具體操作時(shí),通過(guò)搜索可以得到一個(gè)查詢到的節(jié)點(diǎn)的序列碼、父節(jié)點(diǎn)的序列碼,就可以對(duì)特定的序列碼文件進(jìn)行相應(yīng)的操作。監(jiān)控與日志的服務(wù)器作為保證系統(tǒng)穩(wěn)定性及可用性的支撐部分,需要建立在應(yīng)用層的與其他部分平行的部分,但是這一部分與其他的應(yīng)用服務(wù)器沒(méi)有關(guān)聯(lián),也就是說(shuō)能夠獨(dú)立的進(jìn)行。日志部分采用SLF4J來(lái)進(jìn)行處理,使用Flume進(jìn)行分析;對(duì)于應(yīng)用服務(wù)器的狀態(tài),使用Spring-Boot-actuator進(jìn)行監(jiān)聽。APIGatewayAPIHanlder:最上面一層的是開放出去的一些接口及請(qǐng)求的轉(zhuǎn)發(fā)器。通過(guò)應(yīng)用服務(wù)的構(gòu)建,本發(fā)明已經(jīng)具備了大量可以供外部使用的接口。需要通過(guò)接口層將服務(wù)發(fā)布到相應(yīng)的http地址上。本發(fā)明采用spring4中的RestController來(lái)實(shí)現(xiàn)該層,并且通過(guò)自定義的Dispather來(lái)處理請(qǐng)求的轉(zhuǎn)發(fā),綁定相應(yīng)的api地址到指定的http地址上,從而在web容器的運(yùn)行下,使客戶端能訪問(wèn)到相應(yīng)的資源。由上述的所有組件共同構(gòu)成了服務(wù)器端的完整架構(gòu),支撐整個(gè)服務(wù)器端的執(zhí)行。本發(fā)明利用深拷貝實(shí)現(xiàn)客戶端與服務(wù)器端的數(shù)據(jù)交換:通過(guò)客戶端傳遞過(guò)來(lái)的HTTP請(qǐng)求無(wú)法根據(jù)需要封裝成一個(gè)完整的對(duì)象傳遞到服務(wù)器端。所以,需要用傳遞過(guò)來(lái)的鍵值對(duì)類型數(shù)據(jù)進(jìn)行封裝,使之成為能在服務(wù)器端進(jìn)行操作的實(shí)體類對(duì)象。但是從上述的情況來(lái)看,目前所處理的數(shù)據(jù)結(jié)構(gòu)相對(duì)較多,如果對(duì)于每一個(gè)數(shù)據(jù)結(jié)構(gòu)都特化的重寫一個(gè)封裝的方法,那么源碼量會(huì)過(guò)于復(fù)雜,不便維護(hù)。本發(fā)明利用深拷貝的特點(diǎn),通過(guò)反射技術(shù)將這些封裝的過(guò)程抽象成一個(gè)通用的方法。除了通過(guò)HTTP請(qǐng)求過(guò)來(lái)的數(shù)據(jù),部分?jǐn)?shù)據(jù)也需要進(jìn)行相應(yīng)的封裝。因?yàn)樵贘ava中,當(dāng)使用另一個(gè)對(duì)象的數(shù)據(jù)時(shí),如果不是逐一賦值,將無(wú)法得到一個(gè)新的對(duì)象實(shí)例,而是得到一個(gè)對(duì)象的引用。此時(shí),也需要使用到深拷貝技術(shù)。因此,綜合上述兩點(diǎn),需要設(shè)計(jì)一個(gè)通用的思路,去處理HTTP與對(duì)象之間的深拷貝的工具類。編碼過(guò)程中需要使用到Java的反射機(jī)制(為一個(gè)包),對(duì)于Http請(qǐng)求中的參數(shù),其中包含了一個(gè)鍵值對(duì)的Map集合,Map集合中有多個(gè)通過(guò)Http請(qǐng)求需要的參數(shù),其中包含了封裝目標(biāo)的參數(shù)。因此,需要從封裝目標(biāo)的參數(shù)中得到相應(yīng)的數(shù)據(jù),然后依次遍歷所有的參數(shù),再去Map集合中尋找是否存在相應(yīng)的字段,如果存在,則通過(guò)反射機(jī)制對(duì)相應(yīng)的字段進(jìn)行賦值。程序流程圖如圖9所示。在處理兩個(gè)對(duì)象的深拷貝時(shí),需要先對(duì)相應(yīng)的字段進(jìn)行過(guò)濾,即方法中包含get為前綴的字段。則需要設(shè)計(jì)一個(gè)字段的過(guò)濾器,該過(guò)濾器主要用于過(guò)濾方法中不包含get為前綴的方法,剩下的方法即為該方法的字段。過(guò)濾完成后,返回的是一個(gè)包含所有g(shù)et方法的Map集合。下一個(gè)階段對(duì)于Http的深拷貝與對(duì)象之間的深拷貝有差別,但是處理的過(guò)程基本類似,不同點(diǎn)在于入?yún)⒉煌?。同一個(gè)類型的對(duì)象字段一定相同,所以只需要對(duì)它們共同的類進(jìn)行過(guò)濾,得到的結(jié)果相同。然后使用reflect對(duì)它們的所有的字段進(jìn)行賦值,即可完成這一次的深拷貝。程序的流程僅在處理賦值之前加上過(guò)濾操作即可。整個(gè)設(shè)計(jì)實(shí)現(xiàn)后,本發(fā)明設(shè)計(jì)了實(shí)體斷言測(cè)試框架進(jìn)行系統(tǒng)測(cè)試。在進(jìn)行單元測(cè)試時(shí),很難準(zhǔn)確判斷存儲(chǔ)到數(shù)據(jù)庫(kù)的數(shù)據(jù)是否和構(gòu)造階段構(gòu)造出來(lái)的數(shù)據(jù)相同,使用junit進(jìn)行測(cè)試只能對(duì)于某一種基本數(shù)據(jù)類型進(jìn)行測(cè)試,但是無(wú)法知道實(shí)體對(duì)象中每一個(gè)字段的數(shù)據(jù)與數(shù)據(jù)庫(kù)中的數(shù)據(jù)是否相等。此時(shí)需要自定義一個(gè)測(cè)試框架,來(lái)對(duì)特定的程序?qū)ο笈c數(shù)據(jù)庫(kù)對(duì)象進(jìn)行比較。編寫過(guò)程同樣需要用到深拷貝技術(shù)的實(shí)現(xiàn)思路。入?yún)閮蓚€(gè)實(shí)體,這兩個(gè)實(shí)體要求是同一個(gè)類型,否則這兩個(gè)對(duì)象的比較沒(méi)有意義。返回值是一個(gè)AssertBeanParam,表示這兩個(gè)對(duì)象數(shù)據(jù)相同的個(gè)數(shù)、不同的個(gè)數(shù)、相同的數(shù)據(jù)字段及具體值、不同的數(shù)據(jù)字段及具體值。實(shí)現(xiàn)過(guò)程不應(yīng)該借助于其他的框架,采用標(biāo)準(zhǔn)JDK進(jìn)行編寫。服務(wù)器端實(shí)體斷言測(cè)試實(shí)現(xiàn)的過(guò)程為(如圖10所示):1、實(shí)例化一個(gè)AssertBeanParam為后續(xù)數(shù)據(jù)返回進(jìn)行準(zhǔn)備;2、判斷輸入的兩個(gè)實(shí)體參數(shù)的類型是否相同;3、過(guò)濾,使用filterGetMethod,得到所有的字段;4、通過(guò)反射處理,得到這兩個(gè)對(duì)象的具體數(shù)據(jù);5、判斷每一個(gè)字段的數(shù)據(jù)是否相等,若相等,則實(shí)體內(nèi)的Map集合中,正確標(biāo)號(hào)successCount加1,并將相等數(shù)據(jù)存入successMap數(shù)據(jù)集中;若不相等,則錯(cuò)誤標(biāo)號(hào)errorCount加1,并將不相等數(shù)據(jù)存入errorMap數(shù)據(jù)集中;對(duì)于數(shù)值,將數(shù)值的返回格式統(tǒng)一定義為:dstValue:dstValue,srcValue:srcValue,數(shù)值是一個(gè)字符串類型;6、返回AssertBeanParam。以上描述了本發(fā)明的具體模塊設(shè)計(jì)及優(yōu)點(diǎn)。本行業(yè)的技術(shù)人員應(yīng)該了解,本發(fā)明不受上述實(shí)例的限制,上述實(shí)例和說(shuō)明書中描述的只是說(shuō)明本發(fā)明的思想,在不脫離本發(fā)明技術(shù)方案精神和范圍的前提下,本發(fā)明還會(huì)有各種變化和改進(jìn),這些變化和改進(jìn)都落入要求保護(hù)的本發(fā)明范圍內(nèi)。本發(fā)明要求保護(hù)范圍由所附的權(quán)利要求書及其等效物界定。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3 
      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1