1.前言
而另一方面程序員期望的面向?qū)ο笮蛿?shù)據(jù)庫(kù),卻還遠(yuǎn)不成熟,遲遲未能出現(xiàn)一件像樣的產(chǎn)品,原因各種各樣,但最大的問(wèn)題可能是難度太大,其實(shí)面向?qū)ο笮蛿?shù)據(jù)庫(kù)差不多伴隨面向?qū)ο笳Z(yǔ)言的發(fā)展,在很早就已經(jīng)出現(xiàn)了.但它有太多的晦澀和局限之處,有興趣大家可以去研究一下,但是它在第二輪數(shù)據(jù)庫(kù)大戰(zhàn)中輸給了關(guān)系數(shù)據(jù)庫(kù)。
傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)作為數(shù)據(jù)存儲(chǔ)的首選工具地位在短期內(nèi)無(wú)法撼動(dòng)。以這種數(shù)據(jù)庫(kù)為基礎(chǔ)發(fā)展起來(lái)的工具非常之多,歷史也非常久遠(yuǎn)。而且關(guān)系數(shù)據(jù)庫(kù)也嘗試加入一些面向?qū)ο蟮奶匦?如音頻、圖像等新數(shù)據(jù)類型、自定義數(shù)據(jù)類型以及重載運(yùn)算符等等。而Postgresql在面向?qū)ο蠓矫娓M(jìn)一步,加入了如繼承等特性, 一般稱之為ORDBMS。
在RDBMS的使用者也從另一面方嘗試解決RDBMS與應(yīng)用之間的一些模式映射匹配問(wèn)題,近幾年出現(xiàn)了ORM技術(shù),為RDBMS與面向?qū)ο笳Z(yǔ)言之間減少了一些隔壑,雖然并沒(méi)有從根本上解決問(wèn)題,但作了一些很好的嘗試,也獲得了廣泛的應(yīng)用.但使用ORM技術(shù),通過(guò) Hibernate(或其他 ORM 工具)訪問(wèn)RDBMS,映射問(wèn)題也無(wú)法徹底解決,它們只會(huì)轉(zhuǎn)移到配置文件。而且,有以下問(wèn)題。
1. 如果您想要?jiǎng)?chuàng)建一個(gè)分層良好的繼承模型,將它映射到表或一組表無(wú)疑會(huì)是失敗之舉。若用違背常規(guī)形式的方式來(lái)?yè)Q取查詢的性能,就會(huì)將 DBA 與開(kāi)發(fā)人員在某種程度上對(duì)立起來(lái)。面向?qū)ο笾械睦^承也不能過(guò)于頻繁的使用,而且不易于使用.例如你不可能讓所有的實(shí)體類繼承于同一個(gè)類.
2. 關(guān)系不作為實(shí)體出現(xiàn), 實(shí)體之間的關(guān)系簡(jiǎn)化為依賴這一種.無(wú)法為實(shí)體之間的關(guān)系建立一個(gè)分層良好的繼承模型,而有時(shí)關(guān)系很重要,如網(wǎng)絡(luò)故障分析中網(wǎng)絡(luò)對(duì)象之間的關(guān)系顯得至關(guān)重要.
與此同時(shí),還出現(xiàn)了一些專用某個(gè)領(lǐng)域的數(shù)據(jù)庫(kù)如CMDB和GeoDatabase。像CMDB,它將實(shí)體之間的關(guān)系提高到了與實(shí)體同等的地位,并提供了一個(gè)圖查詢的方法?上](méi)有作為一個(gè)通用的數(shù)據(jù)庫(kù)出現(xiàn),它甚至不是真的作為一個(gè)數(shù)據(jù)庫(kù)存在,而只是對(duì)CMDB用戶來(lái)說(shuō)像一個(gè)數(shù)據(jù)庫(kù)而已.
我在網(wǎng)絡(luò)中找到一種與CMDB很類似的數(shù)據(jù)庫(kù),名為GraphDatabase,其中的代表是Neo4j,可惜它不是免費(fèi)的。而只能用于java語(yǔ)言。更為重要的是它們都是自已實(shí)現(xiàn)了一個(gè)存儲(chǔ)系統(tǒng),不能與RDBMS共存,可實(shí)際情況中,RDBMS是主流我們根本不可能拋棄它,因此我想基于RDBMS開(kāi)發(fā)一個(gè)GraphDatabase數(shù)據(jù)庫(kù)。它作為一個(gè)RMDBS的前端運(yùn)行。
2.設(shè)想
我設(shè)想的GraphDatabase數(shù)據(jù)庫(kù)并不想做成萬(wàn)能的,僅僅處理已有的RDBMS+ORM遇到的一些問(wèn)題,在此我對(duì)這個(gè)數(shù)據(jù)庫(kù)做了一些設(shè)想:
1. 很好的支持繼承,讓面向?qū)ο笳Z(yǔ)言更方便的映射。但它并不是面向?qū)ο髷?shù)據(jù)庫(kù)。
2. 將關(guān)系提升至與實(shí)體同等的地位,并提供完整的圖查詢操作。
3. 鑒于RDBMS的壟斷地位,它應(yīng)該能與RDBMS良好的集成,基于它開(kāi)發(fā),也就是說(shuō)本數(shù)據(jù)庫(kù)的數(shù)據(jù)模型能夠簡(jiǎn)單地映射到RDBMS,它們之間有一個(gè)簡(jiǎn)單的映射機(jī)制。
4. 數(shù)據(jù)庫(kù)中的信息主要通過(guò)如下3個(gè)基本的構(gòu)建塊表示:
a) 條目(Item, 又叫做vertex)——從概念上來(lái)說(shuō),這類似于對(duì)象實(shí)例,擁有唯一的ID,并包含0個(gè)或多個(gè)以上的屬性組(attributeGroup)。
b) 關(guān)系(relationship,又叫做edge)——它連接了兩個(gè)Item,此外還具有方向和類型(RelationshipType),它實(shí)際上是條目(Item)的一個(gè)子類。
c) 屬性組(attributeGroup) ——它是一組 key/Value對(duì)的集合。Item與Relationship都有零到多個(gè)attributeGroup。
鑒于第3個(gè)需求,我們必須基于RDBMS 上來(lái)開(kāi)發(fā),做一個(gè)數(shù)據(jù)庫(kù)的前端,它可以嵌入在其他應(yīng)用程序中,也可以獨(dú)立運(yùn)行。
出處:博客園
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) GraphDatabase在關(guān)系數(shù)據(jù)庫(kù)中的實(shí)現(xiàn) [2]
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|