基于JSON的異構(gòu)數(shù)據(jù)庫整合研究畢業(yè)論文_第1頁
基于JSON的異構(gòu)數(shù)據(jù)庫整合研究畢業(yè)論文_第2頁
基于JSON的異構(gòu)數(shù)據(jù)庫整合研究畢業(yè)論文_第3頁
基于JSON的異構(gòu)數(shù)據(jù)庫整合研究畢業(yè)論文_第4頁
基于JSON的異構(gòu)數(shù)據(jù)庫整合研究畢業(yè)論文_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于json的異構(gòu)數(shù)據(jù)庫整合研究json based heterogeneous database integration research目 錄摘 要iabstractii第1章 緒 論11.1 課題背景11.2 研究意義21.3 研究現(xiàn)狀21.4 所做工作及文章結(jié)構(gòu)3第2章 異構(gòu)數(shù)據(jù)庫整合52.1 數(shù)據(jù)庫52.1.1 數(shù)據(jù)庫簡介52.1.2 本文所研究的數(shù)據(jù)庫62.2 異構(gòu)數(shù)據(jù)庫62.3 異構(gòu)數(shù)據(jù)庫整合的背景和意義72.4 異構(gòu)數(shù)據(jù)庫整合的目標(biāo)82.5 異構(gòu)數(shù)據(jù)庫整合的基本方法92.5.1 異構(gòu)數(shù)據(jù)庫整合基本方式92.5.1 異構(gòu)數(shù)據(jù)庫整合常用方式102.6 異構(gòu)數(shù)據(jù)庫數(shù)據(jù)整合重難點122

2、.7 本章小結(jié)12第3章 json與pojo之間的映射研究133.1 json的解碼133.2 json與xml的比較163.3 json與pojo的相互轉(zhuǎn)化173.3.1 pojo的序列化與反序列化183.3.2 將pojo轉(zhuǎn)化為json203.3.3 將json轉(zhuǎn)化為pojo213.4 將json融入orm213.5 本章小結(jié)22第4章 異構(gòu)數(shù)據(jù)庫與json的映射研究234.1 json與異構(gòu)數(shù)據(jù)庫整合系統(tǒng)設(shè)計234.2 json與異構(gòu)數(shù)據(jù)庫的映射技術(shù)244.2.1 基于模板的映射方法244.2.2 基于數(shù)據(jù)庫模型的json映射方法254.3 將關(guān)系數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)化為json264.4 將

3、json轉(zhuǎn)化為關(guān)系數(shù)據(jù)庫的數(shù)據(jù)274.4.1 單表映射274.4.2 多表一對多映射284.4.3 多表多對多映射284.4.4 映射算法總結(jié)294.5 本章小結(jié)29第5章 基于json的數(shù)據(jù)庫映射中間件的開發(fā)、測試及評價315.1 開發(fā)平臺簡介315.2 中間件分析315.3 中間件設(shè)計335.3.1 選取工程335.3.2 選擇框架335.3.3 框架整合使用335.4 編碼實現(xiàn)中間件335.4.1 引入spring和hibernate345.4.2 將數(shù)據(jù)庫的表映射為pojo類345.4.3 定義中間件訪問接口345.4.4 單元測試355.5 測試環(huán)境搭建355.5.1 系統(tǒng)環(huán)境355

4、.5.2 使用badboy錄制腳本355.5.3 使用jmeter測試365.6 數(shù)據(jù)庫映射中間件性能評價375.6.1 jmeter圖形報表385.6.2 jmeter表格報表385.6.3 中間件性能分析395.7 數(shù)據(jù)庫映射中間件功能評價395.8 本章小結(jié)40第6章 總結(jié)與展望416.1 總結(jié)416.2 展望41參 考 文 獻(xiàn)42摘 要從數(shù)據(jù)庫誕生到現(xiàn)在,經(jīng)過長期的積累,互聯(lián)網(wǎng)里有著相當(dāng)數(shù)量的異構(gòu)數(shù)據(jù)庫系統(tǒng)。由于現(xiàn)代信息化建設(shè)的需要,許多系統(tǒng)需要去訪問異構(gòu)的數(shù)據(jù)庫系統(tǒng)。對于以數(shù)據(jù)庫為中心的系統(tǒng)的開發(fā)者而言,因為異構(gòu)數(shù)據(jù)庫的存在,他們在開發(fā)、維護(hù)和升級的成本比常規(guī)單一的數(shù)據(jù)庫系統(tǒng)要高的多

5、。由于json是一種獨立于任何計算機語言且與平臺無關(guān)的通用數(shù)據(jù)交換格式,使用json作為數(shù)據(jù)交換格式,來整合異構(gòu)數(shù)據(jù)庫系統(tǒng)成為了一種可能。在此構(gòu)思的基礎(chǔ)上,本文在現(xiàn)有的基于xml的異構(gòu)數(shù)據(jù)庫系統(tǒng)整合方法的基礎(chǔ)上提出了基于json的異構(gòu)數(shù)據(jù)庫系統(tǒng)整合方法,該方法可以大幅度的降低異構(gòu)數(shù)據(jù)系統(tǒng)的開發(fā)、維護(hù)和升級成本,避免異構(gòu)數(shù)據(jù)庫系統(tǒng)帶來的各種弊端,提高了程序開發(fā)的效率。本文主要研究了json與異構(gòu)數(shù)據(jù)庫數(shù)據(jù)的映射及其算法,具體包含以下內(nèi)容:1) json作為異構(gòu)數(shù)據(jù)庫系統(tǒng)整合的數(shù)據(jù)交換格式的可行性;2) 將json轉(zhuǎn)換為pojo;3) 將pojo轉(zhuǎn)換為json;4) json與異構(gòu)數(shù)據(jù)庫之間的映射

6、算法。為了驗證方法的有效性,選擇了三個異構(gòu)的數(shù)據(jù)庫系統(tǒng),通過編碼實現(xiàn)了基于json的異構(gòu)數(shù)據(jù)庫系統(tǒng)中間件。為了驗證中間的性能,使用badboy和jmeter對中間件進(jìn)行了測試。關(guān)鍵詞:josn;異構(gòu)數(shù)據(jù)庫;pojo;java;ormabstractborn from the database to the present, long-term accumulation of the internet with a considerable number of heterogeneous database systems. due to the needs of theconstruction

7、of modern information technology, many systems need to accessheterogeneous database systems. for developers, database-centric system, becauseof the presence of heterogeneous databases, their development, maintenance andupgrade costs higher than the conventional single database system.since json is a

8、 universal data exchange format that is independent of any computer language and platform-independent, using json as a data exchange format, to integrate heterogeneous database system has become a possibility. on the basis ofthis idea, proposed in the existing heterogeneous database system xml-based

9、integration method based on json-based heterogeneous database systems integration, the approach can significantly reduce the development of heterogeneous data systems maintenance and upgrade costs and avoid all the disadvantages ofheterogeneous database systems, improve the efficiency of program dev

10、elopment.this paper studies the json and heterogeneous database data mapping algorithmspecific to include the following:1) the json as the data integration of heterogeneous database systems to exchangethe feasibility of the format;2) convert json into pojo;3) convert pojo into json;4) json with hete

11、rogeneous database mapping algorithm.in order to verify the validity of the method, select the three heterogeneous database system, by encoding the json-based heterogeneous database system middleware. in order to verify the performance of the middle, use badboy and jmeter to test themiddleware.key w

12、ords: josn; heterogeneous databases; pojo; the java; orm第1章 緒 論在互聯(lián)網(wǎng)還沒誕生之前,數(shù)據(jù)庫的應(yīng)用還只是局限于軍方、科研組織、政府機構(gòu)。在互聯(lián)網(wǎng)普及之后,數(shù)據(jù)庫應(yīng)用以井噴式的速度增長。比如我們每天使用的通信軟件qq,他需要使用數(shù)據(jù)庫保存每個用戶的各種各樣的信息。比如郵件系統(tǒng),我們草稿、已發(fā)送郵件、未閱讀郵件、已閱讀郵件和垃圾郵件都是保存在數(shù)據(jù)庫里的。再比如鐵道部的12306網(wǎng)上訂票系統(tǒng),火車票信息全部是保存在數(shù)據(jù)庫里面。我們?nèi)粘I畹姆椒矫婷娑家呀?jīng)離不開數(shù)據(jù)庫了。盡管數(shù)據(jù)庫應(yīng)用如此之廣,但是遺憾的是對于以數(shù)據(jù)庫為核心的系統(tǒng)的開發(fā)者而

13、言,不同數(shù)據(jù)庫廠商之間的訪問方式之間是存在不少差異的,即使是同一數(shù)據(jù)庫廠商,其不同時期的產(chǎn)品的訪問方式也是有差異的。這意味著同一應(yīng)用系統(tǒng)更換不同的數(shù)據(jù)庫或者升級數(shù)據(jù)系統(tǒng)都需要去修改源代碼。同一應(yīng)用系統(tǒng)同時訪問多個異構(gòu)數(shù)據(jù)庫的情況也比較常見,這意味著開發(fā)應(yīng)用系統(tǒng)時需要考慮不同數(shù)據(jù)庫系統(tǒng)之間的差異。若多個數(shù)據(jù)庫系統(tǒng)之間一直以異構(gòu)數(shù)據(jù)庫系統(tǒng)的的形式存在,這對現(xiàn)代企業(yè)信息化建設(shè)來說,其后期的開發(fā)、維護(hù)和升級成本將非常高。針對這種情況,有些研究人員提出各種各樣的異構(gòu)數(shù)據(jù)庫系統(tǒng)整合方案,其中比較有代表性的方案是以xml作為數(shù)據(jù)交換格式的整合方案。1.1 課題背景現(xiàn)代計算機應(yīng)用系統(tǒng)無不以數(shù)據(jù)為核心,而數(shù)據(jù)的

14、載體正是數(shù)據(jù)庫,也稱做數(shù)據(jù)倉庫。性能優(yōu)良、可靠性高、安全性高的數(shù)據(jù)庫現(xiàn)在都被商業(yè)公司以產(chǎn)品化的形式推出來,比如it巨頭oracle推出的11g,microsoft推出的sql server系列,ibm的db2和informix,sysbase推出的adaptive server enterprise12.5。也有免費開源的產(chǎn)品比如mysql和postgresql。數(shù)據(jù)庫產(chǎn)品的現(xiàn)狀可謂是百花齊放。問題隨之而來,各個數(shù)據(jù)庫產(chǎn)品之間存在著不小的差異。差異體現(xiàn)在:1) 不同數(shù)據(jù)庫存儲同一信息采用的數(shù)據(jù)類型可能不同。2) 標(biāo)準(zhǔn)的結(jié)構(gòu)化查詢語言sql,在各產(chǎn)品實現(xiàn)時也作了一定的修改,比如加入了自己的方言和

15、其他習(xí)慣。3) 不同平臺對數(shù)據(jù)庫訪問的接口不同。這些平臺主要有java、php和windows等,這些平臺的訪問方式各有差異。由于歷史原因,在同一企業(yè)內(nèi)部,往往存在著多平臺。這與現(xiàn)在企業(yè)信息化建設(shè)所追求的信息同步、信息共享是背道而馳的。對應(yīng)計算機應(yīng)用系統(tǒng)的開發(fā)者而言,當(dāng)需要跨數(shù)據(jù)庫操作時,同樣是苦不堪言,處理同一數(shù)據(jù)在不同數(shù)據(jù)庫之間的差異,是件單調(diào)枯燥而費時的事情,非常影響工作效率。1.2 研究意義基于以上背景,ansi制定出來sql,以期望解決不同數(shù)據(jù)庫之間訪問差異的問題。在使用到數(shù)據(jù)庫的的系統(tǒng)中,針對數(shù)據(jù)庫開發(fā)往往使用sql語言。盡管sql是由ansi(美國國家標(biāo)準(zhǔn)協(xié)會)制定的標(biāo)準(zhǔn),但不幸

16、的是數(shù)據(jù)庫廠商沒有完全執(zhí)行這一標(biāo)準(zhǔn),所以存在許多不同版本的sql語言。但是為了與ansi標(biāo)準(zhǔn)相兼容,不同的數(shù)據(jù)庫必須以相似的方式共同地來支持一些主要的關(guān)鍵詞(比如 select、update、delete、insert、where 等等)。不同數(shù)據(jù)庫的sql之間也就只是一些主要的關(guān)鍵詞是一致的,僅此而已,在其他方面或多或少存在著差異。僅僅依靠sql來減少不同數(shù)據(jù)庫之間的差異是遠(yuǎn)遠(yuǎn)不夠的?,F(xiàn)在數(shù)據(jù)庫產(chǎn)品就是一個百花齊放的情形,現(xiàn)在正在應(yīng)用的數(shù)據(jù)庫系統(tǒng)在短期內(nèi)都不會消失,而新的計算機系統(tǒng)又極可能采用了新的數(shù)據(jù)庫系統(tǒng),差異在不斷的產(chǎn)生形成。在這種情況下,如果有一個數(shù)據(jù)庫中間件,對于開發(fā)者和使用者而言

17、,直接訪問中間件,由數(shù)據(jù)庫中間件完成數(shù)據(jù)的訪問,而數(shù)據(jù)庫是透明的。這樣就從數(shù)據(jù)庫使用者和開發(fā)者角度消除了不同數(shù)據(jù)庫產(chǎn)品之間的差異,從而極大的提高了數(shù)據(jù)庫使用者和開發(fā)者的效率。1.3 研究現(xiàn)狀因為不同數(shù)據(jù)庫之間的差異會給數(shù)據(jù)庫的使用者和開發(fā)者帶來工作上的困擾。為了解決這個問題,現(xiàn)在主要有以下幾種解決方案:1)開發(fā)數(shù)據(jù)互連(odbc,open datebase connectivity)。它是microsoft開發(fā)服務(wù)架構(gòu)(wosa,windows open services architecture)中有關(guān)數(shù)據(jù)庫的一個部分。開發(fā)數(shù)據(jù)互連通過建立規(guī)范,提供了一組針對windows應(yīng)用程序了訪問數(shù)據(jù)

18、庫的編程接口。這些編程接口主要利用sql語句來完成其大部分工作。2)java數(shù)據(jù)庫連接(jdbc,java datebase connectivity)。它是一組使用java語言編寫的類和接口的集合,為多種關(guān)系型數(shù)據(jù)庫提供統(tǒng)一的訪問。其本質(zhì)是java程序通過它執(zhí)行sql語句,從而訪問數(shù)據(jù)庫。3)hibernate、mybatis等基于java的數(shù)據(jù)持久層框架。java語言平臺有大量優(yōu)秀的開源框架,hibernate和mybatis都是非常優(yōu)秀的開源數(shù)據(jù)持久層的框架。hibernate和mybatis的思想類似,只不過hibernate更加的“面向?qū)ο蟆?。他們將?shù)據(jù)庫中的數(shù)據(jù)表中的數(shù)據(jù)項映射為j

19、ava語言中的簡單java對象(pojo,plain old java objects),然后在java程序中就可以直接通過操作簡單java對象,從而間接操作數(shù)據(jù)庫。這種映射關(guān)系又叫對象關(guān)系映射(orm,object relation mapping)。hibernate和mybatis的本質(zhì)是對jdbc的封裝,從而簡化開發(fā)者訪問數(shù)據(jù)庫的工作,因而他們深受廣大開發(fā)者的喜愛。4)采用xml作為數(shù)據(jù)庫的通信格式的中間件。其思想是通過建立中間件,讓應(yīng)用程序直接訪問中間件,然后中間件去訪問各種異構(gòu)的數(shù)據(jù)庫。通過中間件可以屏蔽數(shù)據(jù)之間的訪問差異,開發(fā)者只需要知道怎么訪問中間件就可以了,通過制定規(guī)范可以使

20、任何平臺的應(yīng)用程序訪問中間件是一致。以上研究中都只是一定程度上解決了某些特定應(yīng)用中的問題。1)只是針對windows平臺提供了支持,2)、3)只是基于java平臺。4)的更具有全局性,哪怕以后平臺再多,其規(guī)范也可以統(tǒng)一。但是其需要的解決的問題也和多,比如怎樣將數(shù)據(jù)表中的數(shù)據(jù)項映射為xml格式的文本,xml的格式很繁瑣不易于解析,xml格式笨重、性能不佳。1.4 所做工作及文章結(jié)構(gòu)本文就基于json的異構(gòu)數(shù)據(jù)庫整合研究進(jìn)行了一些研究和探索,在文中主要完成以下幾個方面的工作:1 介紹異構(gòu)數(shù)據(jù)庫,并對異構(gòu)數(shù)據(jù)庫整合的主流方法進(jìn)行介紹;2 研究了使用json作異構(gòu)數(shù)據(jù)庫數(shù)據(jù)交換格式的可行性及其優(yōu)勢;3

21、 研究了json與pojo之間的映射;4 研究了關(guān)系型數(shù)據(jù)庫與json之間的映射;5 講述了以scm、qms、bom三系統(tǒng)的為例的進(jìn)行異構(gòu)數(shù)據(jù)庫系統(tǒng)的整合中間件的開發(fā)過程;6 中間件測試。使用badboy + jmeter組合,對中間件進(jìn)行了壓力測試,并對結(jié)果進(jìn)行分析,得出中間件的各方面結(jié)論。本文的章節(jié)安排如下:第1章:緒論,首先介異構(gòu)數(shù)據(jù)庫系統(tǒng)的整合的的背景和意義,研究現(xiàn)狀,本文作者所做工作以及本論文的章節(jié)安排。第2章:異構(gòu)數(shù)據(jù)庫整合,首先介紹了數(shù)據(jù)庫、異構(gòu)數(shù)據(jù)庫、異構(gòu)數(shù)據(jù)庫整合的背景和意義,接著闡述了異構(gòu)數(shù)據(jù)庫整合的目標(biāo)、異構(gòu)數(shù)據(jù)庫整合的基本方法和異構(gòu)數(shù)據(jù)庫整合的重難點。第3章:json與

22、pojo之間的映射研究,首先介紹了json,講解了json優(yōu)勢,接著將json與xml作比較,再接著研究了json與pojo的映射,最后研究了如何將json融入數(shù)據(jù)庫的orm模型。第4章:異構(gòu)數(shù)據(jù)庫與json的映射研究,首先研究了json與異構(gòu)數(shù)據(jù)庫整合系統(tǒng)設(shè)計,接著研究了json與異構(gòu)數(shù)據(jù)庫的映射技術(shù),最后研究了系型數(shù)據(jù)庫與json的映射。第5章:基于json的數(shù)據(jù)庫映射中間件的開發(fā)、測試及評價。在開發(fā)方法,首先對開發(fā)平臺做了簡單的介紹,接著對本文的中間件做了分析,再接著對中間的結(jié)構(gòu)設(shè)計做了說明,最后介紹了下中間件平臺的編碼工作。在測試和評價方面,首先介紹了測試環(huán)境的搭建工作,接著根據(jù)測試結(jié)

23、果對中間件的性能做了分析,最后評價了中間的件的功能。第6章:總結(jié),首先對全文做了一全面的總結(jié),接著就本文需要做的進(jìn)一步的工作做了說明。第2章 異構(gòu)數(shù)據(jù)庫整合將異構(gòu)數(shù)據(jù)庫整合的最終目的的是消除異構(gòu)數(shù)據(jù)庫帶來的種種不便,其不便主要有:系統(tǒng)訪問其他異構(gòu)數(shù)據(jù)困難;對于異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)需關(guān)注其類型轉(zhuǎn)換;系統(tǒng)開發(fā)、維護(hù)、升級難度大。這些“難”都是對開發(fā)者程序開發(fā)者而言,對與最終用戶來說是沒有任何影響的。如果能夠?qū)悩?gòu)數(shù)據(jù)庫系統(tǒng)整合,廣大程序開發(fā)者的效率將大大提高。對于異構(gòu)數(shù)據(jù)庫的整合要達(dá)到數(shù)據(jù)透明性和操作透明性,只有這樣才算是完成了異構(gòu)數(shù)據(jù)庫的整合。異構(gòu)數(shù)據(jù)庫整合的方法從本質(zhì)上講有2種,即數(shù)據(jù)復(fù)制方法和模

24、板映射方法。異構(gòu)數(shù)據(jù)庫常用的整合方法有建立數(shù)據(jù)倉庫方法,建立聯(lián)邦數(shù)據(jù)庫方法和中間件方法,其中前者屬于數(shù)據(jù)復(fù)制方法,后兩者屬于模板映射方法。在整合異構(gòu)數(shù)據(jù)庫的過程中的重難點問題是處理好json與異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)相互轉(zhuǎn)化的問題,而且轉(zhuǎn)換過程中不能丟失數(shù)據(jù)庫的約束關(guān)系。2.1 數(shù)據(jù)庫經(jīng)過了多年的發(fā)展,按其種類劃分有很多,本文將根據(jù)實際的應(yīng)用選擇一種合適的數(shù)據(jù)庫作為研究對象。2.1.1 數(shù)據(jù)庫簡介數(shù)據(jù)庫又名數(shù)據(jù)倉庫(datebase),是按照一定數(shù)據(jù)結(jié)構(gòu)將真實世界中的數(shù)據(jù)信息組織、存儲、管理起來的數(shù)據(jù)倉庫。數(shù)據(jù)庫按照發(fā)展過程大概有如下四類他們分別是:1)網(wǎng)狀數(shù)據(jù)庫(network database)。

25、歷史上首次出現(xiàn)的數(shù)據(jù)庫是網(wǎng)狀數(shù)據(jù)庫,charles bachman于1961年在通用電氣公司(general electric co,簡稱ge)成功地研制出全球首個網(wǎng)狀數(shù)據(jù)庫。網(wǎng)狀數(shù)據(jù)庫的出現(xiàn)為數(shù)據(jù)庫系統(tǒng)的概念、方法、技術(shù)奠定了基礎(chǔ)。網(wǎng)狀數(shù)據(jù)庫的特點是其數(shù)據(jù)模型是以節(jié)點為基本單位構(gòu)成的網(wǎng)狀結(jié)構(gòu),對應(yīng)于有向圖1。2)層次數(shù)據(jù)庫(hierarchiacl database)。層次數(shù)庫的出現(xiàn)完善了數(shù)據(jù)庫系統(tǒng)的概念,其特點是其結(jié)構(gòu)為有向有序的樹狀結(jié)構(gòu)2。3)關(guān)系型數(shù)據(jù)庫。關(guān)系型數(shù)據(jù)庫絕對是當(dāng)代數(shù)據(jù)庫的主流。現(xiàn)在在運行的絕大多數(shù)系統(tǒng)的數(shù)據(jù)庫都是使用關(guān)系型數(shù)據(jù)庫3。4)非關(guān)系型數(shù)據(jù)庫(簡稱nosql)。n

26、osql是近年快速成長起來的非關(guān)系松散數(shù)據(jù)存儲類型數(shù)據(jù)庫。它打破了關(guān)系型數(shù)據(jù)庫長久以來占主導(dǎo)地位的。nosql存儲在使用前不需要事先設(shè)計好表結(jié)構(gòu),它不會出現(xiàn)多表之間的水平分割和連接操作,學(xué)術(shù)界稱nosql類型的數(shù)據(jù)庫為結(jié)構(gòu)化存儲。隨著互聯(lián)網(wǎng)世界web2.0標(biāo)準(zhǔn)的興起,它不僅改變了網(wǎng)站的表現(xiàn)形式,同時也對網(wǎng)站的整體性能提出來更高的要求。面對著隨時可能出現(xiàn)大規(guī)模數(shù)據(jù)的讀寫4(比如120306網(wǎng)站,也就是鐵路客戶服務(wù)中心的網(wǎng)上訂票系統(tǒng),在春節(jié)這種高并發(fā)環(huán)境下就不能滿足廣大用戶的使用需要),傳統(tǒng)關(guān)系型數(shù)據(jù)庫在性能上似乎達(dá)到了瓶頸,特別是高并發(fā)性的sns純web2.0動態(tài)網(wǎng)站和超大規(guī)模的門戶網(wǎng)站的時候更

27、顯得力不從心。這時nosql應(yīng)運而生,它拋棄了關(guān)系型數(shù)據(jù)庫的許多限制性能提升的部分,因為這些部分在處理表單的存儲上是可有可無的東西。同時,在互聯(lián)網(wǎng)上的應(yīng)用更讓它聲名鵲起,許多大公司在nosql的概念下開發(fā)出了實際可用的數(shù)據(jù)庫產(chǎn)品,例如:amazon的dynamo、google的bigtable、zvents的hypertable、apache的hbase,這些都是很有代表性的產(chǎn)品,并且在實際應(yīng)用中得到檢驗。2.1.2 本文所研究的數(shù)據(jù)庫在現(xiàn)代數(shù)據(jù)庫產(chǎn)品中,網(wǎng)狀數(shù)據(jù)庫和層次數(shù)據(jù)庫都已經(jīng)成為歷史了。當(dāng)今,關(guān)系型數(shù)據(jù)庫仍然牢牢占據(jù)市場頭把交椅,絕大多數(shù)系統(tǒng)都是以關(guān)系型數(shù)據(jù)庫產(chǎn)品作為其數(shù)據(jù)中心。nos

28、ql目前雖然炙手可熱,但應(yīng)用比較局限,在高并發(fā)、海量數(shù)據(jù)、高度可擴(kuò)展的環(huán)境中應(yīng)用比較多,比如sns網(wǎng)站、云計算等。所以本文的研究對象是關(guān)系型數(shù)據(jù)庫(在以下內(nèi)容,“數(shù)據(jù)庫”這個詞在沒有特別強調(diào)的情況下都指的是關(guān)系型數(shù)據(jù)庫)。2.2 異構(gòu)數(shù)據(jù)庫異構(gòu)數(shù)據(jù)庫系統(tǒng)是多個相關(guān)的數(shù)據(jù)庫系統(tǒng)的一個集合,因為實際業(yè)務(wù)的需要,必須實現(xiàn)異構(gòu)數(shù)據(jù)庫系統(tǒng)之間數(shù)據(jù)的透明訪問和共享,異構(gòu)數(shù)據(jù)庫系統(tǒng)中每個數(shù)據(jù)庫系統(tǒng)在加入異構(gòu)數(shù)據(jù)庫系統(tǒng)之初本身就已存在,完全獨立擁有屬于自己的數(shù)據(jù)庫管理系統(tǒng)5。異構(gòu)數(shù)據(jù)庫系統(tǒng)的各個數(shù)據(jù)庫系統(tǒng)具有自治性,它們共享數(shù)據(jù)的同時,每個數(shù)據(jù)庫系統(tǒng)依然保有自己的完整性控制、安全性控制和應(yīng)用特性。異構(gòu)數(shù)據(jù)庫系

29、統(tǒng)是一個既與各個異構(gòu)數(shù)據(jù)庫有密切聯(lián)系,又區(qū)別于各個數(shù)據(jù)庫的新的概念,它的研究目標(biāo)是對物理上分布的一個或多個異構(gòu)數(shù)據(jù)庫,在盡可能少的影響本地數(shù)據(jù)庫的自治性的基礎(chǔ)上,構(gòu)造出具有開發(fā)者所需要的可以接口統(tǒng)一、透明訪問的全局?jǐn)?shù)據(jù)庫管理系統(tǒng),以支持對內(nèi)部各個數(shù)據(jù)庫的全局應(yīng)用和異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)信息共享和交換6。異構(gòu)數(shù)據(jù)庫系統(tǒng)的形成原因主要有以下幾方面:1) 計算機平臺不同。計算機系統(tǒng)指的是計算機基礎(chǔ)環(huán)境,包括硬件平臺、操作系統(tǒng)、訪問控制、并發(fā)控制和通信方式。具體細(xì)分如下:a)計算機硬件異構(gòu)。根據(jù)計算機cpu的不同,也就是數(shù)據(jù)庫系統(tǒng)可能分別存儲在大型機、小型機、工作站、個人電腦或嵌入式系統(tǒng)等中。b)操作系

30、統(tǒng)的不同。數(shù)據(jù)庫所在計算機的操作系統(tǒng)可能是 microsoft的windows、windowsnt、各種版本的unix、linux、ibm05/2、macos等。c)開發(fā)語言的不同。比如c、c+、java、delphi等。d)網(wǎng)絡(luò)平臺的不同。比如以太網(wǎng)結(jié)構(gòu)、令牌環(huán)結(jié)構(gòu)等。2) 數(shù)據(jù)庫系統(tǒng)不同。a) 數(shù)據(jù)庫系統(tǒng)類型不同。即便計算機平臺相同了,在該平臺上采用的數(shù)據(jù)庫系統(tǒng)也可以是不同,如網(wǎng)狀、層次、關(guān)系、非關(guān)系型數(shù)據(jù)庫等7。b) 數(shù)據(jù)庫產(chǎn)品不同。即數(shù)據(jù)庫可能是同為關(guān)系型不同廠商的數(shù)據(jù)庫系統(tǒng)的如mysql、postgresql、oracle、ms sql server、db2等。也可能是相同廠商不同時

31、期的數(shù)據(jù)庫產(chǎn)品或不同品牌產(chǎn)品8。3)邏輯結(jié)構(gòu)不同。邏輯結(jié)構(gòu)不同體現(xiàn)在命名差異、值類型差異、模式不同和語義不同等。比如語義的差異具體體現(xiàn)在相同的數(shù)據(jù)形式表示幾種不同的語義,又或者同一語義由幾種不同形式的數(shù)據(jù)表示9。2.3 異構(gòu)數(shù)據(jù)庫整合的背景和意義當(dāng)今時代,信息資源己成為政府企業(yè)的每個部門的重要資源和財富。建立起一個滿足各級部門以及跨部門信息處理要求的的信息系統(tǒng)成為一個組織或企業(yè)健康生存和持久發(fā)展的先決條件。而作為信息系統(tǒng)基礎(chǔ)和核心的數(shù)據(jù)庫技術(shù)得到非常廣泛的應(yīng)用。毫不夸張的講,每個系統(tǒng)都有至少有一個或者多個數(shù)據(jù)庫支持。無論是大型信息系統(tǒng)還是小型單項事務(wù)處理系統(tǒng),無論是聯(lián)機分析處理還是聯(lián)機事務(wù)處理

32、,無論是計算機輔助設(shè)計與制造(cad/cam)10、計算機集成制造系統(tǒng)(cims)、辦公信息系統(tǒng)(oa)、地理信息系統(tǒng)(gis)還是一般企業(yè)管理到等,幾乎每個應(yīng)用領(lǐng)域都采用數(shù)據(jù)庫處理并存儲它們的數(shù)據(jù)信息資源,達(dá)到了無數(shù)據(jù)庫不系統(tǒng)的地步。然而,隨著信息化建設(shè)的持續(xù)不斷深入和計算機科學(xué)技術(shù)的快速發(fā)展,數(shù)據(jù)庫應(yīng)用技術(shù)發(fā)展到現(xiàn)在,已經(jīng)有很多的科研機構(gòu)和企業(yè)積累了大量的數(shù)據(jù),這些數(shù)據(jù)中又有很多是以電子數(shù)據(jù)的形式存在于數(shù)據(jù)庫中,由于信息建設(shè)規(guī)劃不足、部門差異、系統(tǒng)差異,導(dǎo)致大量的異構(gòu)數(shù)據(jù)的存在,這些數(shù)據(jù)中又有很多是重復(fù)冗余的,同時數(shù)據(jù)庫使用者并為存儲和管理這些數(shù)據(jù)進(jìn)行不斷投資。而且企業(yè)內(nèi)各部門或者政府不同

33、部門需要從彼此不同的應(yīng)用系統(tǒng)的數(shù)據(jù)庫中獲取并管理業(yè)務(wù)數(shù)據(jù),以充分利用系統(tǒng)資源。不僅如此,在同一行業(yè)內(nèi)部的信息也迫切需要集成,比如,國內(nèi)外各大航空公司都研發(fā)自己的航空信息系統(tǒng),而綜合各大航空公司的票務(wù)數(shù)據(jù)信息為廣大用戶提供統(tǒng)一的查詢服務(wù),對用戶來講將受益匪淺。就信息數(shù)據(jù)源而言,同一企業(yè)或組織存在多種數(shù)據(jù)庫系統(tǒng)是客觀事實。因歷史遺留存在著層次、網(wǎng)狀以及關(guān)系數(shù)據(jù)庫系統(tǒng),對同一時期的同一大企業(yè)、及其各部門使用不同數(shù)據(jù)庫系統(tǒng)更是屢見不鮮,并不是人們?nèi)タ桃庾非螽悩?gòu)數(shù)據(jù)庫系統(tǒng),而是上述問題在現(xiàn)實中難以避免。以一個大型企業(yè)或組織為例,它在國內(nèi)外都有分公司或部門,存在不同的時期、不同的分公司可能安裝了不同的數(shù)據(jù)

34、庫系統(tǒng)如ms sql server、sybase、db2、oracel等。即使是一個經(jīng)過嚴(yán)密信息規(guī)劃的企業(yè)或組織,隨著時間的推移、行業(yè)技術(shù)的變革、認(rèn)識的變遷、以及數(shù)據(jù)庫技術(shù)和市場的變化,都極有可能形成異構(gòu)數(shù)據(jù)庫的局面。因此,為了使異構(gòu)數(shù)據(jù)庫中系統(tǒng)中的數(shù)據(jù)能夠以最簡便的方式的實現(xiàn)數(shù)據(jù)資源共享、減少數(shù)據(jù)冗余,使用戶僅通過一個全局查詢就能得到一個全面的結(jié)果,而不必去知曉各個物理數(shù)據(jù)庫系統(tǒng)的組成和分布,我們迫切的需要集成多個異構(gòu)的數(shù)據(jù),建立一個異構(gòu)的數(shù)據(jù)庫系統(tǒng)。這樣開發(fā)者就可以僅通過一個透明和統(tǒng)一的接口來訪問異構(gòu)數(shù)據(jù)庫系統(tǒng)中的所有數(shù)據(jù)了。2.4 異構(gòu)數(shù)據(jù)庫整合的目標(biāo)異構(gòu)數(shù)據(jù)庫系統(tǒng)整和的最終目的是實現(xiàn)終

35、極數(shù)據(jù)資源共享和降低開發(fā)者使用數(shù)據(jù)庫的難度。對于異構(gòu)數(shù)據(jù)庫系統(tǒng)整合以后在功能上需要實現(xiàn)的兩大具體目標(biāo)是:1. 數(shù)據(jù)透明性當(dāng)開發(fā)者需要進(jìn)行數(shù)據(jù)庫讀寫操作時,僅需要使用整合數(shù)據(jù)庫中的表或者屬性的邏輯名稱即可。但是,事實上這個整合數(shù)據(jù)庫可能是分散在很多不同地理位置節(jié)點上的異構(gòu)數(shù)據(jù)庫組成的,這些物理上異構(gòu)子庫是分別由自己不同的局部數(shù)據(jù)庫管理系統(tǒng)(ldbms)管理。異構(gòu)數(shù)據(jù)庫整合后的系統(tǒng)就是需要利用整合系統(tǒng)管理所有數(shù)據(jù)代替局部異構(gòu)數(shù)據(jù)庫獨立完成某項讀寫,從而達(dá)到如下數(shù)據(jù)透明的效果:a) 數(shù)據(jù)庫物理位置透明;b) 數(shù)據(jù)表、數(shù)據(jù)項透明;c) 數(shù)據(jù)庫異構(gòu)性透明;d) 局部映射透明;e) 異構(gòu)數(shù)據(jù)庫匯總結(jié)果透明

36、。2. 操作透明性操作透明性具體指的是開發(fā)者在進(jìn)行整合后的異構(gòu)數(shù)據(jù)庫系統(tǒng)讀寫時,操作變得十分簡單,開發(fā)者只需清楚怎么與整合的異構(gòu)系統(tǒng)進(jìn)行交互就行了,而不必去了解怎么與各個異構(gòu)數(shù)據(jù)庫系統(tǒng)的交互。具體體現(xiàn)在:a) 開發(fā)者不需要知道計算機網(wǎng)絡(luò)組成及其的使用方法;b) 開發(fā)者不需要知道各節(jié)點上的計算機操作系統(tǒng)、數(shù)據(jù)庫管理系統(tǒng);c) 開發(fā)者不需要關(guān)注全局sql語句的分解;d) 開發(fā)者不需要關(guān)注向局部異構(gòu)數(shù)據(jù)庫的讀寫操作;e) 開發(fā)者不需要關(guān)注局部查詢結(jié)果如何返回給查詢結(jié)點以及如何匯總等。2.5 異構(gòu)數(shù)據(jù)庫整合的基本方法異構(gòu)數(shù)據(jù)庫整合的方法比較多,總結(jié)起來都是將其在數(shù)據(jù)庫管理系統(tǒng)(dbms)一級上做一些工

37、作,將數(shù)據(jù)庫系統(tǒng)的的異構(gòu)統(tǒng)一起來,因為在這個層次上才能保證異構(gòu)數(shù)據(jù)庫系統(tǒng)自身的獨立完整性。2.5.1 異構(gòu)數(shù)據(jù)庫整合基本方式從物理本質(zhì)上看異構(gòu)數(shù)據(jù)整合方式可以分為兩類,其一數(shù)據(jù)復(fù)制方法,其二模板映射方式。1) 數(shù)據(jù)復(fù)制方法是將原來的數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)移到新的數(shù)據(jù)庫系統(tǒng)中,同時拋棄以前的數(shù)據(jù)庫系統(tǒng),改而使用新的數(shù)據(jù)庫系統(tǒng)。圖2-1形象的展示了這一過程,將原始數(shù)據(jù)取出來,經(jīng)過數(shù)據(jù)轉(zhuǎn)換,然后寫到新的目標(biāo)數(shù)據(jù)庫里面。由于異構(gòu)數(shù)據(jù)庫之間的數(shù)據(jù)類型一般都有差異,特別是數(shù)值類型的數(shù)據(jù),為了把不兼容的數(shù)據(jù)類型寫入,必須這些數(shù)據(jù)類型轉(zhuǎn)換成新的數(shù)據(jù)類型。不少數(shù)據(jù)庫供廠商都提供這種功能,但也就局限于該供應(yīng)商自己的數(shù)據(jù)

38、庫產(chǎn)品之間。這種方案的缺點是需要拋棄原有的系統(tǒng),使用新開發(fā)的系統(tǒng),成本比較高。因此,這種方案只適用于那些確定需要拋棄原有系統(tǒng)的情況,在這種情況下,只需要把原來的數(shù)據(jù)導(dǎo)出來即可。并且該方法很繁瑣,特是表結(jié)構(gòu)發(fā)生大的變化時,工作量將很大。故該方案局限性很強,不具有通用性,因此本文后面也就不研究這種方法。圖2-1 數(shù)據(jù)復(fù)制方法示意圖2) 模板映射方法是使用中間件、中間系統(tǒng)等技術(shù)來整合各種異構(gòu)數(shù)據(jù)庫系統(tǒng),該方法的特點是不會改變原來數(shù)據(jù)庫系統(tǒng)的管理方式,也就是保證了異構(gòu)數(shù)據(jù)庫的獨立性。該方法工作于應(yīng)用程序之間和異構(gòu)數(shù)據(jù)庫系統(tǒng)之間11,向下訪問可各個異構(gòu)數(shù)據(jù)庫,向上為應(yīng)用程序提供統(tǒng)一的數(shù)據(jù)表、數(shù)據(jù)項、數(shù)據(jù)

39、類型以及通用數(shù)據(jù)訪問的接口。如圖2-2所示,該圖展示了采用模板映射的方法實現(xiàn)了異構(gòu)數(shù)據(jù)庫整合,特點是應(yīng)用程序與數(shù)據(jù)庫之間多了個模板映射中間件或中間系統(tǒng),也就是說,應(yīng)用程序不直接與數(shù)據(jù)庫系統(tǒng)交互,而是通過直接訪問中間件或中間系統(tǒng)來實現(xiàn)間接訪問數(shù)據(jù)庫系統(tǒng)。若不考慮中間件的性能的話,顯模板映射是最為理想的整合異構(gòu)數(shù)據(jù)庫的方法,因為它不僅實現(xiàn)了2.4節(jié)提到的目標(biāo),而且具有通用性、可擴(kuò)展性。所以本文研究方法鎖定在模板方法上。圖2-2 模板方法示意圖2.5.1 異構(gòu)數(shù)據(jù)庫整合常用方式現(xiàn)在,主流的數(shù)據(jù)整合方式有以下幾種:數(shù)據(jù)倉庫(即data warehouse)、聯(lián)邦數(shù)據(jù)庫(即federated datab

40、ase)、中間件(即middleware)12等。1) 數(shù)據(jù)倉庫。建立一個數(shù)據(jù)庫系統(tǒng),將這個數(shù)據(jù)庫作為數(shù)據(jù)倉庫,通過etl(即extract transformand load)工具手動或自動的多個異構(gòu)數(shù)據(jù)庫系統(tǒng)讀取數(shù)據(jù)并過濾,并將需要更新的數(shù)據(jù)寫到數(shù)據(jù)倉庫,如圖2-3所示,它展示了一個整合了2個異構(gòu)數(shù)據(jù)庫的數(shù)據(jù)倉庫。與一般普通的數(shù)據(jù)庫系統(tǒng)不同的是:數(shù)據(jù)倉庫中存儲的主要是匯總數(shù)據(jù)和歷史數(shù)據(jù)。它的定位是為企業(yè)高級管理人員提供數(shù)據(jù)分析和決策支持13。圖2-3 數(shù)據(jù)倉庫示意圖2) 聯(lián)邦數(shù)據(jù)庫。聯(lián)邦數(shù)據(jù)庫是異構(gòu)數(shù)據(jù)庫整合方法中的比較最簡單方式。它的實現(xiàn)方法是將所有組成異構(gòu)數(shù)據(jù)庫做一對一的相互連通,如圖

41、2-4所示。這樣就會出現(xiàn)如下的情況:如果需要整合n個異構(gòu)數(shù)據(jù)庫,那么n個數(shù)據(jù)庫中的任何一個都需要訪問其他的(n一1)個數(shù)據(jù)庫,那么這意味開發(fā)者需要編寫n(n一1)段代碼以實現(xiàn)兩兩之間的相互訪問??煽吹竭@種方法弱點比較明顯,即維護(hù)、升級代價太高。圖2-4 聯(lián)邦數(shù)據(jù)庫3)中間件(middleware)。中間件是種獨立的應(yīng)用服務(wù)程序和系統(tǒng)軟件,分布式應(yīng)用程序借助這種軟件在異構(gòu)的技術(shù)之間實現(xiàn)資源共享。中間件位于操作系統(tǒng)之上,通過計算機網(wǎng)絡(luò)通信,實現(xiàn)數(shù)據(jù)交流。它是連接兩個獨立系統(tǒng)和獨立應(yīng)用程序的軟件。與中間件相連接的系統(tǒng),盡管它們可能具有不同的接口,但是他們通過中間件互連之后就能進(jìn)行數(shù)據(jù)信息交換。數(shù)據(jù)庫

42、中間件是中間件的特定一種,它分別連接這用戶和數(shù)據(jù)庫,數(shù)據(jù)庫中間件負(fù)責(zé)完成所有的數(shù)據(jù)邏輯處理(比如數(shù)據(jù)統(tǒng)計,數(shù)據(jù)排行,數(shù)據(jù)轉(zhuǎn)換等),為客戶端提供了統(tǒng)一的訪問接口,起著用戶和服務(wù)器機器之間的橋梁作用,中間件在收到用戶的請求后,它會根據(jù)請求的內(nèi)容找到不同的數(shù)據(jù)庫并對相應(yīng)的數(shù)據(jù)去請求數(shù)據(jù),中間件在使用sql語句將數(shù)據(jù)庫中的相應(yīng)數(shù)據(jù)取出后,再在中間件層中進(jìn)行各種邏輯操作,在處理完成后再返回給客戶端。如圖2-5所示,數(shù)據(jù)庫中間件的工作原理圖。數(shù)據(jù)庫中間件具有以下特點:移植性好、集成方便、易于擴(kuò)充、使用簡單、安全級別高。圖2-5 數(shù)據(jù)庫中間件示意圖2.6 異構(gòu)數(shù)據(jù)庫數(shù)據(jù)整合重難點要實現(xiàn)異構(gòu)數(shù)據(jù)庫系統(tǒng)的整合需

43、要做的以下幾點:1) 首先需要選取一種通用的數(shù)據(jù)交換格式;2) 通用數(shù)據(jù)交換格式轉(zhuǎn)化成關(guān)系型數(shù)據(jù)庫的數(shù)據(jù);3) 關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)轉(zhuǎn)換成通用數(shù)據(jù)格式;4) 通用數(shù)據(jù)交換格式表達(dá)orm模型的關(guān)系;本文在接下來的工作都是圍繞這幾點來進(jìn)行研究的。2.7 本章小結(jié)本章介紹了數(shù)據(jù)庫的發(fā)展過程,其過程具有比較強的時代特征,特定的時代流行特定的數(shù)據(jù)庫系統(tǒng)。也介紹了異構(gòu)數(shù)據(jù)庫,闡述了異構(gòu)數(shù)據(jù)庫系統(tǒng)的現(xiàn)狀及其形成原因等。最后講解了異構(gòu)數(shù)據(jù)庫系統(tǒng)整合的目標(biāo)、方法、重難點。第3章 json與pojo之間的映射研究pojo在java里指的是除了getter方法、setter方法和構(gòu)造方法之外再無其他方法的最普通的ja

44、vabean,pojo在orm模型里就是與數(shù)據(jù)庫的數(shù)據(jù)表相對應(yīng)的java類。json在javascript運行時環(huán)境中指的是javascript對象14,在網(wǎng)絡(luò)上傳輸時指的是json文本序列化后的結(jié)果。本文的異構(gòu)數(shù)據(jù)庫整合方式的數(shù)據(jù)流向是這樣的數(shù)據(jù)庫記錄<>pojo對象<>json對象,如圖3-1所示:圖3-1 json對象、pojo對象和數(shù)據(jù)庫記錄數(shù)據(jù)流向示意圖數(shù)據(jù)庫的數(shù)據(jù)記錄與pojo對象之間的相互轉(zhuǎn)換由orm模型實現(xiàn)。pojo對象與json對象之間的相互轉(zhuǎn)化是本章的研究重點,因為只有完成了pojo對象與json之間的轉(zhuǎn)換,才能讓圖3-1所示的數(shù)據(jù)流暢運行。3.1

45、json的解碼json,也就是javascript object notation三個字母的縮寫。它是種基于純文本的輕量級數(shù)據(jù)交換格式。它對于人類來說可讀性強,對于計算機語言來說符合主流計算機語言風(fēng)格。這使得json既能跨語言、跨平臺作為公共數(shù)據(jù)交換格式,并且也使得廣大程序開發(fā)者用起來順手,這一切使得json成為最為最理想的通用數(shù)據(jù)交換格式15。一般來講json有如下兩種結(jié)構(gòu):1)由“名稱/值”組成的對的集合(即a collection of name/value pairs)。在不同的編程語言中,它分別被理解為對象(object),結(jié)構(gòu)(struct),紀(jì)錄(record),哈希表(hash

46、 table),字典(dictionary),有鍵列表(keyed list),或者關(guān)聯(lián)數(shù)組(即associative array)16。2)值的有序列表(an ordered list of values)。在絕大多數(shù)現(xiàn)代計算機語言中,它被看成是數(shù)組(array)17。這兩種結(jié)構(gòu)都是使用頻率很高的數(shù)據(jù)結(jié)構(gòu),主流現(xiàn)代計算機語言都會用某種形式去支持這兩種數(shù)據(jù)結(jié)構(gòu)?;谶@個特點,json作為一種通用數(shù)據(jù)交換格式在各種現(xiàn)代計算機語言之間去交換數(shù)據(jù)成為一種可能。json一般具有如下五種形式:1)對象是一個集合,這個集合由“名稱/值對”無序的組成。一個對象的開始標(biāo)記為“”(左括號)開始,結(jié)束標(biāo)記為“”(

47、右括號)。每個“名稱”后緊跟著跟一個“:”(冒號);“名稱/值 組成的對”之間使用“,”(逗號)加以分隔。圖3-2 json中對象示意圖2) 數(shù)組是一個集合,它是由是值(value)組成有序集合。一個數(shù)組以“”(左中括號)作為開始標(biāo)記,以“”(右中括號)作為結(jié)束標(biāo)記。值之間使用“,”(逗號)加以分隔。圖3-3 json中數(shù)組示意圖3) 值(value)由雙引號括起來的字符串(string)、數(shù)值(number)、true、false、 null、對象(object)或者數(shù)組(array)表示。而且這些結(jié)構(gòu)可以進(jìn)行多層嵌套。圖3-4 json中值示意圖4)字符串(string)是一個集合,它是由

48、雙引號圍起來的的任意數(shù)量unicode字符構(gòu)成的集合,它使用反斜杠“”表示轉(zhuǎn)義。其中比較特殊的情況是單個字符(character)即由一個字符構(gòu)成的字符串(character string)。字符串(string)與c語言和java語言里的字符串非常相似。圖3-5 json中字符串示意圖5)數(shù)值(number)也與c語言或者java語言里的的數(shù)值比較類似。它去除不常使用的八進(jìn)制與十六進(jìn)制格式。圖3-6 json中數(shù)值示意圖3.2 json與xml的比較xml,完整名稱中文叫做可擴(kuò)展標(biāo)記性語言18,是extensible markup language的首字母構(gòu)成的縮寫。它是一種經(jīng)常被用來標(biāo)記電

49、子文件數(shù)據(jù)而使其具有結(jié)構(gòu)性的標(biāo)記性語言,同時xml也可以用來標(biāo)記自定義數(shù)據(jù)類型、數(shù)據(jù),xml是種可以由用戶對自己的標(biāo)記語言進(jìn)行自定義的源語言。作為標(biāo)準(zhǔn)通用標(biāo)記語言(sgml)的一個子集,xml特別適用于web的數(shù)據(jù)格式交換。xml作為一種標(biāo)準(zhǔn),它在應(yīng)用程序之間提供一種確定的標(biāo)準(zhǔn)來描述與應(yīng)用程序無關(guān)的結(jié)構(gòu)化數(shù)據(jù)。這個應(yīng)用程序間統(tǒng)一確定的標(biāo)準(zhǔn)怎么來確定呢?xml提供了一個輔助工具dtd。dtd即document type definition的首字母的縮寫,是一套關(guān)于標(biāo)記符的語法規(guī)則19,dtd類似與schema,不同的是schema通常不是由用戶自己定義,而dtd則是由用戶自己定義的。像一把雙刃

50、劍,可以一自定義有好的一面也有不好的一面,這一點既使得xml具有很強的通用性,同時也使得xml變得很繁瑣,因為在使用到xml的地方就要用到相應(yīng)的dtd。json與xml相比,他們都是基于純文本數(shù)據(jù)交換格式,xml使用了開發(fā)人員可以自定義的dtd,而json使用了約定俗成的固定的dtd,也是就是說json的格式是固定,所有的開發(fā)者都知道其格式,而這個格式正是基于面向?qū)ο蟮膉avascript語言。但這個格式卻是非常具有通用性,json與ajax構(gòu)成了黃金搭檔,為web刮起了異步旋風(fēng)。現(xiàn)代web開發(fā)者在web應(yīng)用里面大量使用json,不僅可以簡化表達(dá)式簡單,而且更重要的是不再需要針對每種應(yīng)用去寫特

51、定的dom解析器了。因為只要文本符合javascript語言的語法規(guī)范(也就是json的語法規(guī)范),javascrip的解釋器會隱性的自動幫你完成解析,將它轉(zhuǎn)換成javascript運行時的對象。在web應(yīng)用里使用ajax技術(shù)的過程是:首先browser端向server端發(fā)起ajax請求;接著browser端收到服務(wù)端發(fā)送的ajax響應(yīng);最后javascript解釋器使用eval方法來將響應(yīng)中的json文本轉(zhuǎn)化為javascript運行時的對象。在web應(yīng)用中使用json取代xml,不但避免了解釋器解釋xml解析帶來的性能缺陷和解釋器兼容性的問題,并且對于javascript解釋器來講很容易使

52、用,它可以快速的通過訪問對象屬性以及遍歷數(shù)組來獲取數(shù)據(jù),其可讀性對人類來說非常好,完全具備了結(jié)構(gòu)化數(shù)據(jù)的特點。xml與json在各方面綜合比較起來,有以下5點區(qū)別:1)可讀性。在實現(xiàn)了解釋器的前提下,對計算機語言而言,它們的可讀性沒有什么差異。但對于人類來講,在構(gòu)造json和xml的時候,顯然json更加清晰明了。在可讀性上,json強于xml。2)可擴(kuò)展性。xml因其自定義功能,所以它與生俱來就有完美的擴(kuò)展性。同樣json里包含了主要數(shù)據(jù)類型,且沒有的數(shù)據(jù)類型可以通過轉(zhuǎn)換得到,且json可以任意嵌套。所以在可擴(kuò)展性上,json與xml旗鼓相當(dāng)。3)編碼難度。兩者都有不少成熟的編碼工具,xml

53、方面有dom4j、jdom等工具,json方面有、json.lib等庫。相比之下xml的編碼顯然要比json難很多,同樣是用手工編碼的方式去構(gòu)造json或xml,即使不借助工具也能寫出json的文本,但要手工寫出xml就比較困難了。所以在編碼難度上json教xml有優(yōu)勢。4)解碼難度。解析xml的時候需要考慮父子節(jié)點之間的層次關(guān)系,而json直接是嵌套層次關(guān)系。在解碼難度上,json較xml要容易。5)流行程度。xml早已經(jīng)在計算機里被熟悉和使用,而json只是在web里應(yīng)用較多。就ajax應(yīng)用而言,json相比xml具有壓倒性優(yōu)勢。在流行程度而言,json具有很大上升空間。在

54、本的研究中,需要網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)主要是數(shù)據(jù)庫里的數(shù)據(jù)。而且本文里要研究的數(shù)據(jù)庫是關(guān)系型數(shù)據(jù)庫,關(guān)系型數(shù)據(jù)庫里面數(shù)據(jù)都是以數(shù)據(jù)表和字段來表示數(shù)據(jù)。這與json中的key/value不謀而合,我們可以使用json里面的key來表示表名,使用value來表示該表的某條記錄。而這個value又是一個josn對象,它的key是表的字段名稱,value是該記錄在該字段的值。這樣關(guān)系數(shù)據(jù)庫里面的每條記錄可以輕松的用josn表示出來,而且解析也方便。所以本采用josn作為數(shù)據(jù)傳輸格式。3.3 json與pojo的相互轉(zhuǎn)化json是javascript語言中對對象的一種文本表示,可以說json代表著javasc

55、ript中的對象。而pojo是java語言中數(shù)據(jù)持久層的普通對象。同樣一個對象,使用java表示與使用json(javascript)表示會有什么樣的異同呢?3.3.1 pojo的序列化與反序列化當(dāng)不同操作系統(tǒng)中兩個java進(jìn)程在進(jìn)行遠(yuǎn)程通信時,這兩個進(jìn)程可以通過計算機網(wǎng)絡(luò)相互傳送各種類型的數(shù)據(jù)。在傳輸?shù)臅r候與數(shù)據(jù)類型無關(guān),它們都是以二進(jìn)制序列的形式在計算機網(wǎng)絡(luò)上傳輸。在發(fā)送接收過程中,發(fā)送方會把這個java對象(pojo類的對象)轉(zhuǎn)化為字節(jié)序列,以便于在計算機網(wǎng)絡(luò)上傳輸;接收方在收到發(fā)送方的數(shù)據(jù)以后,會把字節(jié)序列再轉(zhuǎn)換成java對象(pojo類的對象)。把java對象轉(zhuǎn)換成字節(jié)序列的過程稱為

56、對象的序列化。把字節(jié)序列轉(zhuǎn)換成java對象的過程稱為反序列化。對象的序列化過程主要有以下兩種用途:1)把對象的字節(jié)序列二進(jìn)制數(shù)據(jù)永久地存儲在硬盤上,也叫對象持久化,通常保存在數(shù)據(jù)庫中。2)在網(wǎng)絡(luò)上傳輸對象的字節(jié)序列二進(jìn)制數(shù)據(jù)。pojo作為特殊的類,它的對象與數(shù)據(jù)庫的記錄一一對應(yīng)。pojo對象序列化以后,就意味著可以將序列化后的結(jié)果在網(wǎng)絡(luò)上傳輸,這個過程對象變成了數(shù)據(jù)。這個過程相反,在接收到了pojo對象的數(shù)據(jù)后,程序需要對該數(shù)據(jù)作反序列化操作,這個過程就把數(shù)據(jù)轉(zhuǎn)換成對象了20。java序列話過程如下:1) 創(chuàng)建文件fileoutputstream類型的文件fos;2) 創(chuàng)建objectoutp

57、utstream類型的對象oos = new objectoutputstream(fos);3) 獲得對象obj;4) 向oos里持久化obj,即os.wirteobject(obj);5) 關(guān)閉oos;其中4)步驟的過程就是將pojo類對象的主要屬性(不包含方法)寫入到文件中。其代碼實現(xiàn)過程如下:import java.io.*;public class student private int number;private string name;public void setnumber(int number) this.number = number;public void setname(string name) = name;public static void main(string arr) student stu = new student();stu.setnumber(30907740);stu.setname(&q

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論