溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關系型數據庫尚能飯否?

發布時間:2020-08-04 18:23:29 來源:ITPUB博客 閱讀:170 作者:hj8828 欄目:關系型數據庫

一、關系型數據庫尚能飯否?

關系型數據庫出現至今的幾十年時間里,一直是數據庫領域的佼佼者。下圖是全球較為權威的DB-Engines的統計排名, 排名主要依據Google以及Bing搜索引擎的關鍵字搜索數量、從業人數信息、職位搜索量、Stack Overflow上提問關注數量等


關系型數據庫尚能飯否?

DB-Engines 2018年6月公布的數據庫排名


截止至2018年6月,排名前6位的數據庫,僅有排名第5的MongoDB是文檔型數據庫,其余全部是關系型數據庫,且前3位所占有的比重遠遠領先于其后的其他數據庫。


1、優勢


關系型數據庫在經過大數據、NoSQL以及NewSQL等技術革新的輪番轟炸之后依然堅挺,與其固有的優勢密不可分。它的優勢主要體現在對開發人員、運維人員以及系統本身這3個方面的影響。


開發優勢


對于開發人員來說,關系型數據庫的首要優勢是面向SQL。


SQL是關系型數據庫的結構化查詢語言,雖然不同的關系型數據庫有不同的SQL方言,但基于ANSI標準的SQL是大部分關系型數據庫都支持的。且SQL是面向數據庫的訪問語言,可以非常方便的對數據庫進行增、刪、改、查以及授權和管理。SQL的查詢靈活度非常高,可以十分便捷的在聯機事務處理(OLTP(https://www.xihefangpei.com))與聯機分析處理(OLAP)之間轉換。


此外,SQL是應用開發工程師所必須掌握的一門編程語言,流行度非常廣泛,招聘到一個完全不會寫SQL的應用開發程序員的概率非常小。因此,SQL極大降低了開發人員招聘的成本。


除了SQL語言本身,各種開發語言對關系型數據庫的支持也十分完善。以Java舉例:JDBC是Java語言訪問數據庫的標準接口,各個關系型數據庫廠商均提供了實現JDBC接口的驅動程序。使用Java語言開發的工程師無需感知不同關系型數據庫間的差異,只要根據JDBC接口編程即可。


由于面向關系的數據庫存儲與面向對象的Java程序不易一一對應,產生了很多對象關系映射(ORM)框架用于簡化關系對象模型的阻抗不匹配,如JPA及其官方實現Hibernate、MyBatis、Jooq等,進一步簡化了應用工程師的日常開發工作。ORM框架大多是采用JDBC封裝,對各個關系型數據庫的兼容性非常高。


運維優勢


關系型數據庫由于存在時間長久,針對每一種常見的關系型數據庫,都能較容易地招聘到相應的數據庫管理員(DBA),以保證關系型數據庫的穩定性、安全性、完整性以及性能,同時保證監控和分析關系型數據庫的系統瓶頸以及設計的合理性。


成熟的關系型數據庫都有自己完善的生態圈,用于保證高可用、數據備份、性能監測分析等成熟的配套工具。規模較大的企業及重要業務系統一般都需要專門的DBA進行運維工作。


系統優勢


只有時間才是檢驗技術的成熟與穩定的標準。關系型數據庫經歷了幾十年的考驗,已經有超大規模的使用,其存儲引擎已經十分成熟?;贛VCC的數據庫引擎在性能和正確性上做到了很好的平衡,并且通過B+tree索引大幅提升了查詢的效率。面對數據這樣的關鍵節點,謹慎的選用關系型數據庫是架構師們的首選方案。


基于ACID的事務是關系型數據庫帶給應用系統的又一強力保障。ACID指數據庫事務能夠正確執行的四個基本要素的首字母縮寫。它包括原子性、一致性、隔離性和持久性。只有支持事務的數據庫才能最大限度的保證數據的正確性和完整性:


  • 原子性 (Atomicity) 。 位于同一事務中的所有操作,要么全部完成(提交),要么全部不完成(回滾),不能停滯在某個中間環節。如果事務在執行過程中發生錯誤,數據將會恢復到事務開始前的狀態。

  • 一致性 (Consistency) 。 非只讀的事務應封裝數據庫的狀態從一個一致狀態轉變為另一個一致狀態。一致狀態是指數據庫中的數據應滿足完整性約束,并且事務的中間狀態不應在事務之外被感知。

  • 隔離性 (Isolation) 。 多事務并發執行時,不應相互影響其他事務,就像只有這一個操作在并行的被數據庫執行一樣。

  • 持久性 (Durability) 。 事務完成后,該事務對數據庫的所有更改將持久的保存在數據庫中。


在編程中使用事務也并非難事,各類如Spring之類的開發框架已經在面向切面(AOP)層面將其做的十分簡單和優雅了。


2、不足


關系型數據庫的性能和訪問承載能力,在面向單一數據節點的企業級應用時代是無可挑剔的。但在訪問量和數據量急劇膨脹的今天,關系型數據庫已經很難再像以前那樣成為如此巨大規模系統的底層支撐,甚至成為了應用系統的瓶頸所在。


關系型數據庫主要有以下三處不足:


  • 單節點并發訪問量受限。 在服務任意擴容和拆分的同時,由于數據庫中存儲的數據是有狀態的,因此很難像服務一樣任意拆分和擴容。單一的數據庫節點承載大量的服務節點的查詢和更新請求,這并非一個對等的架構部署模式。

  • 單節點數據承載量受限。 單一數據庫節點對數據的承載能力是有限的。數據量越大,用于查詢數據所創建的索引的深度就越深。索引深度決定IO訪問的次數,索引深度越深,查找越慢。

  • 分布式事務性能衰退嚴重。 將數據庫拆分之后,需要使用分布式事務代替本地事務?;赬A的分布式事務采用兩階段提交,在準備階段即鎖定資源,直至整個事務結束。在系統并發度增加時,性能會急劇衰退。


綜上所述,關系型數據庫的不足,歸根結底是設計初衷導致的。它并非分布式的產物,對分布式系統的天生不友好,導致它很難適應互聯網的架構模型。面對可以隨時彈性擴容的無狀態服務,關系型數據庫已經略顯笨重。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女