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