一、為什么新的分布式數(shù)據(jù)庫(kù)又開(kāi)始支持關(guān)系模型
旗幟鮮明地先說(shuō)結(jié)論:之所以新的分布式數(shù)據(jù)庫(kù)又開(kāi)始支持關(guān)系模型了,是因?yàn)榇蟛糠殖绦騿T的數(shù)據(jù)庫(kù)水平太糟糕。數(shù)據(jù)庫(kù)說(shuō)得復(fù)雜特別復(fù)雜,但說(shuō)得簡(jiǎn)單,它就解決了兩個(gè)問(wèn)題:數(shù)據(jù)怎么存放和數(shù)據(jù)怎么查詢(xún)。
而且這兩個(gè)問(wèn)題互相關(guān)聯(lián)。舉個(gè)程序員都能明白的例子:如果你把數(shù)據(jù)存成了數(shù)組,那搜索查詢(xún)就只能是O(n)的效率了,如果你存成了二叉樹(shù),那么查詢(xún)效率就變成了O(logn)。
業(yè)務(wù)查詢(xún)可不像搜索一個(gè)key值這么簡(jiǎn)單,常常復(fù)雜得要死,本來(lái)查詢(xún)就很難寫(xiě)了,現(xiàn)在還得考慮數(shù)據(jù)物理存放方式來(lái)決定怎么執(zhí)行查詢(xún)更高效,這不是要逼死人嘛?所以早期的數(shù)據(jù)庫(kù)開(kāi)發(fā)人員苦啊,什么層級(jí)數(shù)據(jù)庫(kù)、網(wǎng)狀數(shù)據(jù)庫(kù)寫(xiě)完查詢(xún)都得自己定義access path啊。
然后就有了關(guān)系模型。
關(guān)系模型徹底改變了數(shù)據(jù)庫(kù)程序員的生活:不用管數(shù)據(jù)怎么存了,你只要用SQL寫(xiě)好查詢(xún),然后查詢(xún)優(yōu)化器會(huì)幫你把面向業(yè)務(wù)的查詢(xún)邏輯轉(zhuǎn)換成可以高效在數(shù)據(jù)的物理結(jié)構(gòu)上執(zhí)行的物理查詢(xún)。這簡(jiǎn)直就像一下從匯編時(shí)代跨越到了高級(jí)語(yǔ)言的時(shí)代啊。早期的數(shù)據(jù)庫(kù)還需要大家自己思考怎么建索引,相當(dāng)于告訴查詢(xún)優(yōu)化器哪些列是在查詢(xún)中有用,后來(lái)數(shù)據(jù)庫(kù)已經(jīng)可以自動(dòng)提示你該加什么索引了,大部分程序員終于可以歡樂(lè)地徹底扔掉數(shù)據(jù)庫(kù)存儲(chǔ)引擎的知識(shí)了。
當(dāng)然仍然有一小挫掌握了超能力的人,是可以手寫(xiě)執(zhí)行計(jì)劃,用Plan Guide強(qiáng)制執(zhí)行的,他們說(shuō):查詢(xún)優(yōu)化器是什么?可以吃嗎?若干年后他們拯救了世界也打開(kāi)了黑暗的大門(mén)(大誤…
四
好日子一直持續(xù)到數(shù)據(jù)庫(kù)負(fù)載大到不得不開(kāi)始走向分布為止。分布式最大的問(wèn)題是網(wǎng)絡(luò)延遲問(wèn)題,而網(wǎng)絡(luò)延遲是物理問(wèn)題,沒(méi)這么容易解決??鐧C(jī)事務(wù)做不了啊,查詢(xún)優(yōu)化器再牛逼也優(yōu)化不了跨網(wǎng)絡(luò)的join啊。
但業(yè)務(wù)還是得做啊,于是解決方案只有一個(gè)了:回到手工根據(jù)查詢(xún)來(lái)決定數(shù)據(jù)物理分布(這樣可以最大程度上避免跨網(wǎng)絡(luò)的join),手工決定查詢(xún)的物理執(zhí)行計(jì)劃,手工保證事務(wù)性的老路。
既然都已經(jīng)全手工了,那還要原來(lái)的RDBMS干嘛,于是NoSQL產(chǎn)品誕生了。搭配一些會(huì)手寫(xiě)執(zhí)行計(jì)劃手寫(xiě)事務(wù)的超能力者使用,戰(zhàn)斗力簡(jiǎn)直有105這么高。
大家很快就忘記了NoSQL其實(shí)是一個(gè)對(duì)現(xiàn)實(shí)妥協(xié)的產(chǎn)物,只有搭配一些精通數(shù)據(jù)存儲(chǔ)引擎知識(shí)的人才能用好。
推廣開(kāi)來(lái)之后,廣大吃瓜群眾表示NoSQL一點(diǎn)也不好用啊,自己要管的東西太多啦,我怎么知道要怎么設(shè)計(jì)數(shù)據(jù)的物理分布啊,瞎設(shè)計(jì)一下查詢(xún)起來(lái)就效率感人了啊,最終一致又是一個(gè)什么鬼啦,想象一下討論怎么嚴(yán)格保證一個(gè)“改動(dòng)了3個(gè)entity且有不少if-else分支的方法”的最終一致性,感覺(jué)結(jié)論必然只有“呵呵”啊。
于是為了讓廣大吃瓜群眾用得開(kāi)心,NoSQL的開(kāi)發(fā)者不得不又開(kāi)始走上了關(guān)系模型的老路。
延伸閱讀:
二、Access的優(yōu)點(diǎn)
(1)存儲(chǔ)方式簡(jiǎn)單,易于維護(hù)管理,Access的對(duì)象有表、查詢(xún)、窗體、報(bào)表、頁(yè)、宏和模塊,以上對(duì)象都存放在后綴為(.mdb或.accdb)的數(shù)據(jù)庫(kù)文件中,便于用戶(hù)的操作和管理。
(2)面向?qū)ο?Access是一個(gè)面向?qū)ο蟮拈_(kāi)發(fā)工具,這種基于面向?qū)ο蟮拈_(kāi)發(fā)方式,使得開(kāi)發(fā)應(yīng)用程序更為簡(jiǎn)便。
(3)界面友好、易操作,Access是一個(gè)可視化工具,是風(fēng)格與Windows完全一樣,用戶(hù)想要生成對(duì)象并應(yīng)用,只要使用鼠標(biāo)進(jìn)行拖放即可,非常直觀(guān)方便。系統(tǒng)還提供了表生成器、查詢(xún)生成器、報(bào)表設(shè)計(jì)器以及數(shù)據(jù)庫(kù)向?qū)?、表向?qū)?、查?xún)向?qū)А⒋绑w向?qū)?、?bào)表向?qū)У裙ぞ?,使得操作?jiǎn)便,容易使用和掌握。
(4)集成環(huán)境、處理多種數(shù)據(jù)信息,Access基于Windows操作系統(tǒng)下的集成開(kāi)發(fā)環(huán)境,該環(huán)境集成了各種向?qū)Ш蜕善鞴ぞ?,極大地提高了開(kāi)發(fā)人員的工作效率,使得建立數(shù)據(jù)庫(kù)、創(chuàng)建表、設(shè)計(jì)用戶(hù)界面、設(shè)計(jì)數(shù)據(jù)查詢(xún)、報(bào)表打印等可以方便有序地進(jìn)行。
(5)Access支持ODBC(開(kāi)發(fā)數(shù)據(jù)庫(kù)互連,Open Data Base Connectivity),利用Access強(qiáng)大的DDE(動(dòng)態(tài)數(shù)據(jù)交換)和OLE(對(duì)象的聯(lián)接和嵌入)特性,可以在一個(gè)數(shù)據(jù)表中嵌入位圖、聲音、Excel表格、Word文檔,還可以建立動(dòng)態(tài)的數(shù)據(jù)庫(kù)報(bào)表和窗體等。Access還可以將程序應(yīng)用于網(wǎng)絡(luò),并與網(wǎng)絡(luò)上的動(dòng)態(tài)數(shù)據(jù)相聯(lián)接。利用數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)頁(yè)對(duì)象生成HTML文件,輕松構(gòu)建Internet/Intranet的應(yīng)用。