石春菊 孫麗霞
摘要
隨著企業(yè)社交網(wǎng)越來越被企業(yè)所重視和應(yīng)用,企業(yè)社交網(wǎng)絡(luò)平臺中涉及到的數(shù)據(jù)容量也越來越大、數(shù)據(jù)之間的關(guān)系也越來越復(fù)雜,關(guān)系型數(shù)據(jù)庫在處理這些大量數(shù)據(jù)和復(fù)雜數(shù)據(jù)時已經(jīng)非常吃力,再加上Oralce數(shù)據(jù)庫擴展優(yōu)化所花費的費用越來越高.本文基于以上原因,提出設(shè)計企業(yè)社交網(wǎng)絡(luò)平臺時,采用非關(guān)系型數(shù)據(jù)庫圖數(shù)據(jù)庫和T級存儲容量的MongoDB數(shù)據(jù)庫存儲數(shù)據(jù)的方法。
【關(guān)鍵詞】企業(yè)社交網(wǎng)絡(luò) Neo4j MongoDB
1 引言
近年來,在工業(yè)4.0的推動下,傳統(tǒng)制造企業(yè)轉(zhuǎn)向智能化智造,將互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、信息技術(shù)和智能智造互聯(lián)到一起,形成新的工業(yè)設(shè)計、生產(chǎn)、包裝、銷售、管理于一體的智能化企業(yè)。從制造業(yè)的分布圖上來看,企業(yè)分布區(qū)域較大,如何將企業(yè)互聯(lián)起來,實現(xiàn)企業(yè)協(xié)作、新機會挖掘、企業(yè)推薦、企業(yè)社交。在這個需求下,企業(yè)社交網(wǎng)絡(luò)如國外的Chatter、Yammer、Lotus Connections、Share Point和國內(nèi)的金蝶云之家、微部落、用于人才管理的TITA以及操作簡單如微信的推事本等。這些企業(yè)社交網(wǎng)絡(luò)工具方便了員工間的交流和協(xié)同,提高了部門間的協(xié)作處理事物的速度,實現(xiàn)了資源共享,提高了辦公效率,同時也可以為企業(yè)挖掘新的客戶,成為企業(yè)營銷的新方式。由于企業(yè)社交中所用到的數(shù)據(jù)關(guān)系密切,如企業(yè)之間的供應(yīng)關(guān)系、企業(yè)員工關(guān)系、產(chǎn)品、采購件和業(yè)務(wù)等,像這樣的數(shù)據(jù)若采用關(guān)系型數(shù)據(jù)庫的形式進行存儲,數(shù)據(jù)冗余將會變的很大,而且當(dāng)查詢復(fù)雜企業(yè)供應(yīng)關(guān)系時,即多表關(guān)聯(lián)查詢時極其不易查詢,隨著互聯(lián)網(wǎng)2.0的興起,網(wǎng)站設(shè)計均是采用動態(tài)頁面架構(gòu),需要實時生成動態(tài)頁面和提供動態(tài)信息,要求數(shù)據(jù)庫并發(fā)負(fù)載非常高,往往要達到每秒上萬次讀寫請求,關(guān)系型數(shù)據(jù)庫應(yīng)付上萬次的查詢請求還勉強能應(yīng)付,但要處理上萬次的寫數(shù)據(jù)請求,就無法承受了。關(guān)系型數(shù)據(jù)庫的擴展是采用縱向擴展方式,成本較高,數(shù)據(jù)模型的擴展不靈活,水平擴展能力較差。而基于Web架構(gòu)的需求中,往往需要水平橫向擴展,通過增加服務(wù)器節(jié)點的方式實現(xiàn)數(shù)據(jù)的遷移。而且關(guān)系型數(shù)據(jù)庫在處理超大規(guī)模數(shù)據(jù)上的響應(yīng)時間和數(shù)據(jù)處理速度都跟不上客戶需求。基于關(guān)系型數(shù)據(jù)庫的以上缺點,非關(guān)系型數(shù)據(jù)庫應(yīng)運而生。非關(guān)系型數(shù)據(jù)庫是一種區(qū)別于關(guān)系型數(shù)據(jù)庫的一種數(shù)據(jù)庫管理方式,它采用的數(shù)據(jù)模型是類似于鍵/值、文檔、列簇的存儲模型,水平擴展靈活性高,并且支持海量數(shù)據(jù)存儲。具體的非關(guān)系型數(shù)據(jù)庫主要有以下四大類,一類是鍵值存儲數(shù)據(jù)庫,它主要使用哈希表的方式進行存儲,通過特定的鍵和指針指向數(shù)據(jù);一類是列存儲數(shù)據(jù)庫,通過鍵指向多列的方式存儲數(shù)據(jù);一類是文檔型數(shù)據(jù)庫,通過建立鍵值存儲模型存儲數(shù)據(jù),典型的文檔數(shù)據(jù)庫是MongoDB;一類是圖形數(shù)據(jù)庫,通過靈活的圖數(shù)據(jù)模型存儲復(fù)雜關(guān)系的數(shù)據(jù)。
企業(yè)社交網(wǎng)絡(luò)不僅打破了傳統(tǒng)的企業(yè)之間的交流方式,同時突破了企業(yè)員工之間的信息交互方式,企業(yè)間、企業(yè)與員工的信息交互不僅包括了文字之間的交互,同時包括產(chǎn)品信息的推廣、關(guān)聯(lián)、圖片、附件及實時信息的更新等。目前關(guān)系型數(shù)據(jù)庫雖為主流,但因其在網(wǎng)站規(guī)模發(fā)展中遇到的瓶頸越來越多,如事務(wù)一致性、讀寫實時性、復(fù)雜多表查詢等,使得眾多開發(fā)者轉(zhuǎn)向了非關(guān)系型數(shù)據(jù)庫的使用。
在企業(yè)社交網(wǎng)絡(luò)中存儲的數(shù)據(jù)主要有2大部分,一部分是以企業(yè)為中心的自我網(wǎng)絡(luò)中數(shù)據(jù)的存儲,如企業(yè)供應(yīng)商關(guān)系、業(yè)務(wù)量、業(yè)務(wù)類型、產(chǎn)品緊密度、產(chǎn)品與員工的責(zé)任制關(guān)系等。在設(shè)計中這一部分?jǐn)?shù)據(jù)要求可擴展性及更新效率較高,采用圖數(shù)據(jù)庫進行存儲。另一部分?jǐn)?shù)據(jù)就是企業(yè)郵箱中數(shù)據(jù)的存儲,由于郵箱中的數(shù)據(jù)的大小、內(nèi)容不是固定單一的,為方便管理存儲采用面向文檔式的數(shù)據(jù)庫存儲方式。
2 非關(guān)系型數(shù)據(jù)庫
2.1 圖數(shù)據(jù)庫
圖數(shù)據(jù)庫是利用圖結(jié)構(gòu)進行存儲和查詢數(shù)據(jù)的一種非關(guān)系型數(shù)據(jù)庫,典型的圖數(shù)據(jù)庫是Neo4j數(shù)據(jù)庫,它是基于圖論算法的數(shù)據(jù)庫,是由節(jié)點和關(guān)系組成的,節(jié)點是以key-value的形式存儲的,它的處理完全是事務(wù)性的。關(guān)系連接相應(yīng)的節(jié)點,表示節(jié)點之間的某種聯(lián)系。節(jié)點關(guān)系是一個簡單的有向無環(huán)圖。如在制造業(yè)中,我們要表示螺絲是企業(yè)的某位員工生產(chǎn)的,并供給某些企業(yè)用于生產(chǎn)某些產(chǎn)品。可用圖1表示:從這個圖中可以看出圖數(shù)據(jù)庫是是節(jié)點和關(guān)系的集合,是以圖做為數(shù)據(jù)模型的。在節(jié)點和關(guān)系上都有相應(yīng)屬性值,屬性值是可以任意多個的,它的存儲是采用的json格式。
Neo4j數(shù)據(jù)庫是一個完全兼容增刪改查、基于圖論算法的圖形數(shù)據(jù)庫。Noe4j數(shù)據(jù)庫的圖形結(jié)構(gòu)導(dǎo)致其數(shù)據(jù)結(jié)構(gòu)是可有可無的,它在數(shù)據(jù)建模方面常常用于針對復(fù)雜領(lǐng)域的數(shù)據(jù)集,因此常常被用于社交網(wǎng)絡(luò)、深度推薦算法等領(lǐng)域的數(shù)據(jù)建模。Neo4j數(shù)據(jù)庫的規(guī)模是自適應(yīng)的,其讀取性能與節(jié)點的個數(shù)無關(guān),即圖的大小不能影響其讀取性能,neo4j數(shù)據(jù)庫的讀性能可以達到每毫秒遍歷2000多節(jié)點關(guān)系。圖數(shù)據(jù)庫的查詢語言是Cypher語言。應(yīng)用程序的編程接口則是通過REST API接口進行訪問的,采用的語句是面向?qū)ο蟮腏ava語言。
企業(yè)社交網(wǎng)絡(luò)中的圖數(shù)據(jù)庫的節(jié)點標(biāo)簽和關(guān)系總圖如圖2所示。
每一節(jié)點標(biāo)簽下,可以包含若干多個節(jié)點。創(chuàng)建用戶和企業(yè)標(biāo)簽節(jié)點的語句,例如
CREATE(t1:T{name:”Employee”)
CREATE(t2:T{name:”Enterprise”)
創(chuàng)建企業(yè)員工節(jié)點N,
CREATE(n:Employee(name:'小明,address:,status:NORMAL,createTime:,IastModifyTime:,.mail:xiaoming@126.com' ,phone:' 8985424'}),節(jié)點p中的屬性包括:adress、status、createTime、lastModifyTime、name、email、phone。
創(chuàng)建企業(yè)節(jié)點E,
CREATE(e:Enterprise{mc:魯銀集團禹城粉未治金制品有限公司,address:山東省,business:粉未治金件,biaozhun: ,source:WEB,status:NORMAL,createTime:,lastModifyTime:,email:,phone:,fax:,miaoshu:})
創(chuàng)建員工、企業(yè)之間關(guān)系,用戶隸屬于企業(yè)
CREATE(n)-[:Has employee]->(e)
上面的語句僅僅是創(chuàng)建一個用戶、企業(yè),并建立關(guān)系。節(jié)點的創(chuàng)建和關(guān)系的建立本系統(tǒng)中均是利用java方法批量創(chuàng)建的。
2.2 MongoDB
MongoDB是一個面向文檔的數(shù)據(jù)庫,介于關(guān)系和非關(guān)系型數(shù)據(jù)庫之間的一種數(shù)據(jù)庫,它采用的數(shù)據(jù)存儲方式是接近于JSON的BJSON格式存儲的。MongoDB可以存儲T級數(shù)據(jù)庫,它采用的是橫向擴展數(shù)據(jù)庫的存儲方式,通過分區(qū)的方式將數(shù)據(jù)分散到更多機器上,就是將數(shù)據(jù)添加到集群中即可,橫向擴展的優(yōu)點是即便宜又易于擴展。MongoDB的數(shù)據(jù)庫擴展方式對于用戶來說是透明的,用戶只需將精力放在編寫應(yīng)用程序上即可。MongodDB中的主鍵均由客戶端的驅(qū)動程序自動創(chuàng)建。
MongoDB也是采用key-value的形式進行存儲,多個key-value組成文檔,一組文檔組成集合,文檔相當(dāng)于關(guān)系數(shù)據(jù)庫中的一行,集合相當(dāng)于一個表,集合是動態(tài)模式的。集合中的文檔可以是各式各樣的。多個集合組成數(shù)據(jù)庫,一般常將類型相同的文檔存于同一個集合里,可提高查詢速度。MongoDB的語法格式同sq1格式類似,主要有以下命令show dbs查看數(shù)據(jù)庫;show collections查看集合;createcollection創(chuàng)建一個集合;insert插入數(shù)據(jù);find查找數(shù)據(jù);update修改數(shù)據(jù);remove刪除數(shù)據(jù)。
企業(yè)社交網(wǎng)絡(luò)中的有一重要的數(shù)據(jù)管理就是郵件的管理,由于郵件管理部分中有附件,收發(fā)郵件中的附件的大小不確定,有時幾k,有時幾M甚至有幾G的附件存在,若采用關(guān)系型數(shù)據(jù)庫進行存儲的話,一般的方式是在在關(guān)系型數(shù)據(jù)庫中存儲附件名,通過附件名再查找服務(wù)器中的附件實現(xiàn)下載,這種方式使的查詢和下載的時間和空間復(fù)雜度均有所增加。因此在企業(yè)社交網(wǎng)絡(luò)中附件存儲采用的是文檔數(shù)據(jù)庫的存儲方式。MongoDB中單個文檔限制為4MB,但組成集合的文檔的數(shù)量是沒有限制。因為存儲的文件的大小理論上講也是沒有限制的,MongoDB自帶分片機制,在存儲大文件時會自動將大文件分片存儲。本系統(tǒng)中的附件集合如圖3所示。
附件集合主要存儲系統(tǒng)中的附件資源,附件資源的類型有文本文檔、聲音、圖片、視頻及其它類型的文件,filename是附件的名稱,length附件的長度,uploadDate是附件的上傳日期。
3 小結(jié)
企業(yè)社交網(wǎng)絡(luò)中所涉及到的這兩種非關(guān)系型數(shù)據(jù)庫,主要的目的是為了能充分利用Neo4j數(shù)據(jù)庫和MongoDB數(shù)據(jù)庫的優(yōu)點,在企業(yè)社交網(wǎng)絡(luò)平臺中數(shù)據(jù)之間的關(guān)系較多,而且在數(shù)據(jù)處理過程中會建立或解除關(guān)系,如職工歸屬關(guān)系、企業(yè)供應(yīng)關(guān)系等。Neo4j提供了直觀的可視化界面,以圖論為基礎(chǔ)、鍵值對的數(shù)據(jù)存儲方式、水平擴展靈活,對于數(shù)據(jù)的增刪改查可通過REST服務(wù)實現(xiàn)。MongoDB文檔數(shù)據(jù)庫則以文檔作為最小的單位進行存儲,通過鍵定位一個文檔,同屬于鍵值數(shù)據(jù)庫的存儲方式。關(guān)系型數(shù)據(jù)庫與非關(guān)系型數(shù)據(jù)庫形成了一種互補式的關(guān)系,大部分系統(tǒng)中兩者都會用到,并且無法取代,而對于企業(yè)來講,高性能的數(shù)據(jù)庫的存儲方式、方便系統(tǒng)擴展才是設(shè)計人員所追求的,選取合適的數(shù)據(jù)庫存儲方式不僅可以提升系統(tǒng)性能,更能保證系統(tǒng)的高安全性和高可用性。直觀的數(shù)據(jù)存儲方式同時也便于系統(tǒng)的擴展。
參考文獻
[1]張文盛,鄭漢華.基于MongoDB構(gòu)建高性能網(wǎng)站技術(shù)研究[J].吉林師范大學(xué)學(xué)報(自然科學(xué)版),2013(01):123-127.
[2]王余藍.圖形數(shù)據(jù)庫NE04J與關(guān)系數(shù)據(jù)庫的比較研究[J].現(xiàn)代電子技術(shù),2012(20).
[3]王慧孜.范煒.WANG HuiZi.FAN Wei圖數(shù)據(jù)庫在標(biāo)簽系統(tǒng)中的應(yīng)用研究[C].數(shù)字圖書館論壇,2015(04).
[4]王光磊.MongoDB數(shù)據(jù)庫的應(yīng)用研究和方案優(yōu)化[J].中國科技信息,2011(20):93-94.