• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于分布式數(shù)據(jù)庫的一體化檔案管理研究

      2022-07-11 01:13:32王曉東常海軍王征
      電子技術(shù)與軟件工程 2022年4期
      關(guān)鍵詞:分片內(nèi)存分布式

      王曉東 常海軍 王征

      (河北省地質(zhì)測繪院 河北省廊坊市 065000)

      1 檔案分類

      檔案分類是依據(jù)一定的標(biāo)準(zhǔn),按照檔案來源、時間、內(nèi)容和形式特征的異同點,對檔案進(jìn)行有層次的區(qū)分,并組成一定的體系。檔案種類的劃分,一般采用以下幾種形式:

      一是按照檔案形成者的性質(zhì),即檔案的來源標(biāo)準(zhǔn)可分為國家機關(guān)檔案、黨派團體檔案、企業(yè)單位檔案等;二是根據(jù)檔案的內(nèi)容性質(zhì)標(biāo)準(zhǔn),有兩種劃分方法,一是分為普通檔案和專門檔案;另一種是直接分為文書檔案、公安檔案、訴訟檔案等多種門類;三是根據(jù)檔案的載體形式標(biāo)準(zhǔn),可分為石刻檔案、甲骨檔案、膠片檔案、磁帶檔案等,載體形式的不同,檔案的整理、保管與利用的方式均有所不同;四是按照記錄信息方式標(biāo)準(zhǔn),分為文字檔案、圖形檔案、聲像檔案、電子檔案。

      2 電子檔案統(tǒng)一存儲管理內(nèi)容

      本文的研究內(nèi)容基于第四種分類方式,利用分布式數(shù)據(jù)庫中的集群、分片、復(fù)制等技術(shù)實現(xiàn)數(shù)字化文字檔案、圖形檔案、聲像檔案等多種類型的電子檔案統(tǒng)一存儲管理。電子檔案統(tǒng)一存儲管理涉及到的數(shù)據(jù)類型包括結(jié)構(gòu)化數(shù)據(jù)(即行數(shù)據(jù),存儲在數(shù)據(jù)庫里,可以用二維表結(jié)構(gòu)來邏輯表達(dá)實現(xiàn)的數(shù)據(jù))、半結(jié)構(gòu)化數(shù)據(jù)(它是結(jié)構(gòu)化的數(shù)據(jù),但是結(jié)構(gòu)變化很大)和非結(jié)構(gòu)化數(shù)據(jù)(包括所有格式的辦公文檔、文本、圖片、XML、HTML、各類報表、圖像和音頻/視頻信息等)。研究內(nèi)容主要包括關(guān)系型數(shù)據(jù)庫、NOSQL 數(shù)據(jù)庫及緩存數(shù)據(jù)庫的選型,ORM(Object Relational Mapping)框架選擇、DDD(領(lǐng)域驅(qū)動設(shè)計)應(yīng)用等多種技術(shù)和方法。

      關(guān)系數(shù)據(jù)庫MySQL、Postgre 均為具有較高知名度開源軟件, MySQL 同Postgre 相比具有的優(yōu)點是,較好的性能;在Windows 環(huán)境中的適宜性更好;使用了線程,在不同線程間的切換和對公共的存儲區(qū)域的訪問具有更佳的性能。Postgre 在對視圖、觸發(fā)器、存儲過程、約束和子過程的支持上更加完善一些。

      Apache CouchDB 是一個面向文檔的數(shù)據(jù)庫管理系統(tǒng)。它提供以 JSON 作為數(shù)據(jù)格式的 REST API 來對其進(jìn)行操作,并可以通過視圖來操縱文檔的組織和呈現(xiàn)。 CouchDB 是Apache 基金會的頂級開源項目。

      MongoDB 同CouchDB 相比,具有如下特點:

      (1)數(shù)據(jù)模型設(shè)計減少了對連接的需求,并提供了模式的簡單演進(jìn)。

      (2)高性能:它既不包含連接,也不包含提供快速訪問的事務(wù)。

      (3)高可用性:是由于合并了副本集,這些副本集能夠在故障期間提供冗余,而且非常健壯。

      (4)可伸縮性。MongoDB 的分片特性使它能夠在分布式函數(shù)中快速高效地執(zhí)行。

      查詢語言:MongoDB 有自己的查詢語言,可以替代SQL 語言。實用函數(shù)map、reduce 可以替代復(fù)雜的聚合函數(shù)。綜合分析,MongoDB 更適合項目研究。

      EntityFramework 對非SQL Server 數(shù)據(jù)庫且無該數(shù)據(jù)庫的DataProvider;在進(jìn)行一些復(fù)雜查詢的情況下,EF 的性能表現(xiàn)不太好,開發(fā)人員又無法控制SQL 語句的生成;EF需要跟蹤實體的變化的和大Collection 對象的處理;EF 的Context 上下文不是線程安全的,在整個Service 上使用一個Context 上下文存在問題。

      NHibernate 內(nèi)存開銷較大,處理數(shù)據(jù)庫的方式是針對單個對象的,不適用于批量修改、刪除數(shù)據(jù),且學(xué)習(xí)成本較高。Linq2db 同EntityFramework 和NHibernate 相 比,Linq2db不需要跟蹤當(dāng)前實體的所有信息,是性能較快的LINQ 的ORM,能在POCO 對象和數(shù)據(jù)庫之間提供簡單、輕便、快速且類型安全的層。從結(jié)構(gòu)上講,它使用LINQ 表達(dá)式而不是魔術(shù)字符串,在代碼和數(shù)據(jù)庫之間維持一個薄的抽象層。查詢由C#編譯器檢查,并能夠輕松重構(gòu)。不像Entity Framework 那樣有變更跟蹤,必須自己管理。從積極的一面來說,開發(fā)人員可以獲得更多控制權(quán)并在訪問數(shù)據(jù)時獲得更好的性能。也就是說,lin12db 提供了類型安全的SQL。

      上述條件是選擇lin12db 主要原因。

      3 系統(tǒng)實現(xiàn)研究

      MongoDB 文檔數(shù)據(jù)庫集群搭建:

      3.1 Replica-set(復(fù)制集)部署

      MongoDB Replica-set(復(fù)制集),如圖1,是一組維護同樣數(shù)據(jù)的mongod 實例,提供冗余和高可用性。版本4.4之前版本,MongoDB 偶爾宕機切換之后,客戶能感受到業(yè)務(wù)訪問延遲會有抖動,一段時間后才恢復(fù)到之前的水平,抖動原因是新選舉出的主庫之前從未提供過讀服務(wù),并不了解業(yè)務(wù)的訪問特征,沒有針對性的對數(shù)據(jù)做緩存,所以在突然提供服務(wù)后,讀操作會出現(xiàn)大量的Cache Miss,需要從磁盤重新加載數(shù)據(jù)。在大內(nèi)存實例的情況下,這個問題更為明顯。版本4.4 中,MongoDB 提供Mirrored Reads 功能,主庫會按一定的比例把讀流量復(fù)制到備庫上執(zhí)行,來幫助備庫預(yù)熱緩存。這個執(zhí)行是一個Fire and Forgot 行為,不會對主庫的性能產(chǎn)生任何實質(zhì)性的影響,但是備庫負(fù)載會有一定程度的上升。

      圖1:MongoDB 復(fù)制集示意圖

      MongoDB 復(fù)制集的意義在MongoDB 于實現(xiàn)服務(wù)高可用,它依賴于兩個方面,數(shù)據(jù)寫入時將數(shù)據(jù)迅速復(fù)制到另一個獨立節(jié)點上,在接受寫入的節(jié)點發(fā)生故障時自動選舉出一個新的替代節(jié)點。在實現(xiàn)高可用的同時,復(fù)制集實現(xiàn)了其他幾個附加作用。數(shù)據(jù)分發(fā),將數(shù)據(jù)從一個區(qū)域復(fù)制到另一個區(qū)域,減少另一個區(qū)域的讀延遲;讀寫分離,不同類型的壓力分別在不同的節(jié)點上執(zhí)行;異地容災(zāi),在數(shù)據(jù)中心故障時候快速切換到異地。

      Mongodb 復(fù)制集架構(gòu),一個典型的復(fù)制集由3 個以上具有投票權(quán)的節(jié)點組成,包括:

      一個主節(jié)點(primary) ,接受寫入操作和選舉時投票;從節(jié)點(secondary),用于復(fù)制主節(jié)點上的新數(shù)據(jù)和選舉時投票。 Arbiter (投票節(jié)點),將某一個從庫,設(shè)置為專用的投票節(jié)點,從節(jié)占不存儲數(shù)據(jù),不負(fù)責(zé)數(shù)據(jù)復(fù)制。不推薦使用Arbiter(投票節(jié)點)在測試環(huán)境中,配置了三臺服務(wù)用于部署Replica-set(復(fù)制集):

      server-1 member0.tech.com:192.168.1.211

      server-2 member1.tech.com:192.168.1.212

      server-3 member2.tech.com:192.168.1.213

      3.2 Mongodb分片集群部署

      mongodb分片集群,如圖2,由mongos、configServer集群、mongodb 復(fù)制集組成,mongos 提供路由功能。configServer作為集群的核心,集中存放集群和路由分片的元數(shù)據(jù),包括集群中有哪些分片、分片的是哪些集合及數(shù)據(jù)的分布。mongodb 復(fù)制集維護多個mongod 實例,在多個實例間復(fù)制數(shù)據(jù),提高系統(tǒng)的可用性。

      圖2:Mongodb 分片集群示意圖

      4 一體化檔案管理驗證系統(tǒng)

      一體化檔案管理驗證系統(tǒng)在架構(gòu)設(shè)計中,采用了分層架構(gòu)模式。Martin Fowler 在“企業(yè)應(yīng)用架構(gòu)模式”一書中總結(jié)了分層架構(gòu)的優(yōu)點,開發(fā)人員可以只關(guān)注整個結(jié)構(gòu)中的其中一層;很容易用新的實現(xiàn)來替換原有層次的實現(xiàn);能夠降低層與層之間的依賴;有利于標(biāo)準(zhǔn)化;有利于各層邏輯復(fù)用。分層結(jié)構(gòu)也有其不足之處,降低了系統(tǒng)的性能;有時也會導(dǎo)致級聯(lián)的修改。

      4.1 關(guān)系數(shù)據(jù)庫提供模塊

      一體化檔案管理驗證系統(tǒng)在數(shù)據(jù)訪問層采用了“面向接口編程”,抽象出接口ILibDataProvider,定義了數(shù)據(jù)庫訪問所需要的操作,擺脫了對具體數(shù)據(jù)庫的依賴,有利于整個數(shù)據(jù)訪問層在不同實際數(shù)據(jù)間的切換。

      對mysql、postgre 均定義了相應(yīng)的模MySqlNopData Provider、PostgreSqlDataProvider,實現(xiàn)了ILibDataProvider和繼承了BaseDataProvider,驗證系統(tǒng)可根據(jù)需求使用mysql、postgre,無需對代碼做出修改。

      NoSql 數(shù)據(jù)庫提供者模塊

      NoSql 數(shù)據(jù)庫部分,以MongoFramework 為基礎(chǔ)設(shè)計了IMongoDataProvider 為驗證系統(tǒng)與數(shù)據(jù)庫交互的接口。

      4.2 數(shù)據(jù)庫設(shè)計

      驗證系統(tǒng)訪問數(shù)據(jù)庫,首先要解決的是如何處理好數(shù)據(jù)實體和數(shù)據(jù)庫中--表(對于關(guān)系數(shù)據(jù)庫來說)或集合及文檔(mongodb)的對應(yīng)關(guān)系,以O(shè)RM 為基礎(chǔ)進(jìn)行數(shù)據(jù)庫設(shè)計時,生成數(shù)據(jù)庫的方式主要有三種Database First、DB First及Code First。由于系統(tǒng)實現(xiàn)采用了領(lǐng)域驅(qū)動設(shè)計(Domain Driven Design),因此在處理Model 和數(shù)據(jù)庫的對應(yīng)關(guān)系時采用Code First 模式, CodeFirst 開發(fā)模式中直接創(chuàng)建領(lǐng)域類,linq2db 根據(jù)創(chuàng)建的領(lǐng)域類自動生成數(shù)據(jù)庫。

      創(chuàng)建數(shù)據(jù)庫對象

      調(diào)用相應(yīng)數(shù)據(jù)庫提供者類中的InitializeDatabase()函數(shù)創(chuàng)建與Model 相對應(yīng)的數(shù)據(jù)庫對象。

      數(shù)據(jù)訪問

      倉儲(Respository)模式就像一個內(nèi)存集合,將Model 與數(shù)據(jù)庫對象完全隔離起來,它采用POCO(plain old common language runtime object)和PI(persistence ignorant)對象。是工作單元和數(shù)據(jù)庫之間單獨分離出來的一層,是對數(shù)據(jù)訪問的封裝。優(yōu)點是業(yè)務(wù)層不需要知道它的具體實現(xiàn),達(dá)到了分離關(guān)注點。提高了對數(shù)據(jù)庫訪問的維護,對于倉儲的改變并不會改變業(yè)務(wù)的邏輯。

      驗證系統(tǒng)中的實現(xiàn),首先定義了一個通用的泛型接口,實現(xiàn)了數(shù)據(jù)的獲取、插入、更新和刪除通用操作功能;

      泛型的使用可以簡化驗證系統(tǒng)中每個Model 對應(yīng)Respository 實現(xiàn),結(jié)合.net framework 提供的依賴注入機制,能夠非常簡潔的實現(xiàn)Respository 對象的創(chuàng)建。

      數(shù)據(jù)緩存

      緩存技術(shù)已被廣泛使用各種軟件技術(shù)中,用高速存儲介質(zhì)替代低速存儲介質(zhì),用鍵值對方式替代較為復(fù)雜的數(shù)據(jù)庫查詢,在B/S 架構(gòu)的系統(tǒng)中作用更為明顯,顯著提高用戶使用體驗。緩存技術(shù)常用于有數(shù)據(jù)庫端、應(yīng)用服務(wù)器和客戶端。

      驗證系統(tǒng)用到緩存技術(shù)在三個均有涉及,本文著重于應(yīng)用服務(wù)器。在實現(xiàn)和使用上有兩種形式,基于應(yīng)用服務(wù)器本機內(nèi)存和基于內(nèi)存的分布式數(shù)據(jù)庫。

      驗證系統(tǒng)定義緩存管理接口,用于緩存數(shù)據(jù)對象的統(tǒng)一管理

      基于應(yīng)用服務(wù)器本機內(nèi)存方式的實現(xiàn)原理,當(dāng)用戶請求數(shù)據(jù)對象時,優(yōu)先查詢本地緩存,如果發(fā)現(xiàn)請求的數(shù)據(jù)對象,則返加給用戶,否則將請求轉(zhuǎn)發(fā)到數(shù)據(jù)庫,從數(shù)據(jù)庫進(jìn)行查詢,并將查詢結(jié)果加載到本地緩存,從緩存把數(shù)據(jù)對象返回給用戶。等到下次處理相同請求時直接從存在中取出緩存的數(shù)據(jù)對象,縮短了應(yīng)用服務(wù)器的請求計算時間、與數(shù)據(jù)庫系統(tǒng)的交互時間,提高系統(tǒng)的并發(fā)量,能夠明顯降低網(wǎng)絡(luò)負(fù)載。本機緩存優(yōu)點是性能高,管理方便;缺點是本機緩存無法被多個應(yīng)用服務(wù)器共享,一旦宕機緩存數(shù)據(jù)對象將全部丟失。

      本機緩存管理器實現(xiàn)了ICacheManager 接口

      基于內(nèi)存的分布式數(shù)據(jù)庫在數(shù)據(jù)對象的處理上與基于應(yīng)用服務(wù)器本機內(nèi)存的操作方式相近,不同點在于緩存的數(shù)據(jù)對象存放于Redis 是一個分布式內(nèi)存數(shù)據(jù)庫(非關(guān)系型數(shù)據(jù)庫),它可以存儲鍵值對與5 種不同類型的值之間的映射?;诜址植际絻?nèi)存數(shù)據(jù)庫的緩存管理的優(yōu)點是緩存數(shù)據(jù)對象只要分布式內(nèi)存數(shù)據(jù)庫不發(fā)生宕機的情況,數(shù)據(jù)對象就不丟失;缺點是在性能和維護有一定開銷。

      5 結(jié)束語

      基于分布式數(shù)據(jù)庫的一體化檔案管理系統(tǒng)構(gòu)建并初步部署后,改變了以往的數(shù)據(jù)管理模4 式,在各個方面都取得了較好的應(yīng)用效果。

      (1)有效提高了數(shù)據(jù)的錄入效率。集中式數(shù)據(jù)庫的管理模式,不同部門的項目檔案數(shù)據(jù)都在同一個數(shù)據(jù)庫管理系統(tǒng)中存儲和應(yīng)用,導(dǎo)致數(shù)據(jù)庫管理系統(tǒng)的負(fù)載過重,在使用過程中經(jīng)常會出現(xiàn)無法響應(yīng)等情況,而本系統(tǒng)基于分布數(shù)數(shù)據(jù)庫的拆分策略實現(xiàn)了數(shù)據(jù)的智能化動態(tài)分配,較好地解決了上述問題。

      (2)實現(xiàn)了數(shù)據(jù)資源的共享。傳統(tǒng)模式下,部門檔案數(shù)據(jù)資源與院內(nèi)其他管理系統(tǒng)的數(shù)據(jù)資源在存儲方式上相互獨立,沒有建立起共享機制,而本系統(tǒng)建立了不同應(yīng)用數(shù)據(jù)庫之間的共享和同步機制,有利于數(shù)據(jù)的綜合利用。

      (3)解決了數(shù)據(jù)一致性的問題。傳統(tǒng)模式下對于檔案數(shù)據(jù)的管理,往往在使用時為了方便,出現(xiàn)多個數(shù)據(jù)的副本,而當(dāng)數(shù)據(jù)更新時,副本數(shù)據(jù)無法得到及時更新,出現(xiàn)臟數(shù)據(jù)問題,分布式檔案管理系統(tǒng)采用基于SQL Server 的同步處理方式,使不同節(jié)點的數(shù)據(jù)保持一致,提高了職工檔案數(shù)據(jù)信息的準(zhǔn)確性。

      (4)提高了檔案數(shù)據(jù)的查詢效率?;趥鹘y(tǒng)集中式數(shù)據(jù)管理模式,當(dāng)出現(xiàn)多個用戶并發(fā)查詢的情況時,系統(tǒng)往往無法做出快速的反應(yīng),而且所獲取的數(shù)據(jù)信息內(nèi)容不全,系統(tǒng)基于2-+*分布數(shù)存儲優(yōu)化了數(shù)據(jù)查詢的性能,并且可以為用戶提供要素齊全的數(shù)據(jù)。

      基于分布式數(shù)據(jù)庫系統(tǒng)構(gòu)建的一體化檔案管理系統(tǒng),系統(tǒng)功能基本完善。在項目管理上,項目從需求分析到架構(gòu)設(shè)計到功能實現(xiàn)及系統(tǒng)測試環(huán)節(jié),都遵循軟件開發(fā)標(biāo)準(zhǔn)流程。在技術(shù)上,基于C#.NET Framework 進(jìn)行系統(tǒng)功能開發(fā),基于私有云平臺搭建分布式數(shù)據(jù)庫環(huán)境,對分布式數(shù)據(jù)庫技術(shù)的優(yōu)勢發(fā)揮進(jìn)行了充分探索和證明。系統(tǒng)還有很大的優(yōu)化空間,未來無論從技術(shù)創(chuàng)新角度還是業(yè)務(wù)需求角度都有更多價值可以挖掘。

      猜你喜歡
      分片內(nèi)存分布式
      上下分片與詞的時空佈局
      詞學(xué)(2022年1期)2022-10-27 08:06:12
      分片光滑邊值問題的再生核方法
      CDN存量MP4視頻播放優(yōu)化方法
      “春夏秋冬”的內(nèi)存
      基于模糊二分查找的幀分片算法設(shè)計與實現(xiàn)
      分布式光伏熱錢洶涌
      能源(2017年10期)2017-12-20 05:54:07
      分布式光伏:爆發(fā)還是徘徊
      能源(2017年5期)2017-07-06 09:25:54
      基于DDS的分布式三維協(xié)同仿真研究
      西門子 分布式I/O Simatic ET 200AL
      基于內(nèi)存的地理信息訪問技術(shù)
      西华县| 富顺县| 迁安市| 阳春市| 万荣县| 大英县| 陈巴尔虎旗| 汤阴县| 永康市| 苏尼特左旗| 新闻| 襄汾县| 含山县| 黄陵县| 渭南市| 兴山县| 溧水县| 甘肃省| 乐都县| 佳木斯市| 河间市| 广南县| 无棣县| 莒南县| 古田县| 北海市| 黔东| 开平市| 绵竹市| 乌拉特后旗| 尤溪县| 常宁市| 彭州市| 丰台区| 新宾| 故城县| 和平县| 上饶县| 梁山县| 突泉县| 西乌珠穆沁旗|