您好,登錄后才能下訂單哦!
這篇文章主要講解了“數據庫可以分為哪幾類”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“數據庫可以分為哪幾類”吧!
提到數據庫,大多數人腦海中浮現都是mysql,sqlserver,oracle。其實,數據庫不只是這些。它還包括例如MongoDB,Cassandra,Es等其他的存儲形式。 那么,常見的數據庫有哪些?并且怎么分類這些數據,以及該怎么在不同場景下選擇不同數據庫呢?
首先,放一張"451Group"分析報告中的數據庫的全景圖
從圖中,可以看出,數據庫行業保羅萬象。包括了很多不同分類的產品。
數據庫總的來看可以分為三類:
關系型數據庫:例如mysql,sqlserver,oracle等
NewSql:是對各種新的可擴展/高性能數據庫的簡稱,這類數據庫不僅具有NoSQL對海量數據的存儲管理能力,還保持了傳統數據庫支持ACID和SQL等特性。包括例如:lustrix、GenieDB、ScalArc、Schooner等。
下面分別介紹這三種類型的數據庫。
首先給出關系型數據庫一個官方定義: 關系型數據庫:指采用了關系模型來組織數據的數據庫。關系模型指的就是二維表格模型,而一個關系型數據庫就是由二維表及其之間的聯系所組成的一個數據組織。
關系型數據庫的優點:
1.容易理解:二維表結構是非常貼近邏輯世界的一個概念,關系模型相對網狀、層次等其他模型來說更容易理解
2.使用方便:通用的SQL語言使得操作關系型數據庫非常方便
3.易于維護:豐富的完整性(實體完整性、參照完整性和用戶定義的完整性)大大減低了數據冗余和數據不一致的概率
關系型數據庫存在的問題:
高并發支持不夠:網站的用戶并發性非常高,往往達到每秒上萬次讀寫請求,對于傳統關系型數據庫來說,硬盤I/O是一個很大的瓶頸。
海量數據的挑戰:網站每天產生的數據量是巨大的,對于關系型數據庫來說,在一張包含海量數據的表中查詢,效率是非常低的
橫向擴展困難:在基于web的結構當中,數據庫是最難進行橫向擴展的,當一個應用系統的用戶量和訪問量與日俱增的時候,數據庫卻沒有辦法像web server和app server那樣簡單的通過添加更多的硬件和服務節點來擴展性能和負載能力。當需要對數據庫系統進行升級和擴展時,往往需要停機維護和數據遷移。
性能欠佳:在關系型數據庫中,導致性能欠佳的最主要原因是多表的關聯查詢,以及復雜的數據分析類型的復雜SQL報表查詢。為了保證數據庫的ACID特性,必須盡量按照其要求的范式進行設計,關系型數據庫中的表都是存儲一個格式化的數據結構。
數據庫事務必須具備ACID特性,ACID分別代表Atomic(原子性),Consistency(一致性), Isolation(隔離性),Durability(持久性)。
當今十大主流的關系型數據庫 Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2, Microsoft Access, SQLite,Teradata,MariaDB(MySQL的一個分支),SAP。
針對傳統關系型數據庫的缺點,為了更好的適應現代互聯網高并發,高性能,高可用以及海量數據的挑戰的需要,出現了不同的NoSQL數據庫。 NoSQL放棄了傳統SQL的強事務保證和關系模型,重點放在數據庫的高可用性和可擴展性。
NoSQL 的主要優勢:
高可用性和可擴展性,自動分區,輕松擴展
不保證強一致性,性能大幅提升
沒有關系模型的限制,極其靈活 NoSQL主要的劣勢:
不保證強一致性:對于普通應用沒問題,但還是有不少像金融一樣的企業級應用有強一致性的需求。
NoSQL不支持SQL語句:兼容性是個大問題,不同的 NoSQL 數據庫都有自己的 api 操作數據,學習起來比較繁瑣。
以key-value對的形式存儲數據。value可以是自定義的不用的數據結構。這個類型的數據庫主要包括: | 數據庫 | 分類 | 特點 | | --- | --- | --- | | Redis | Key-value store,Document store,Graph DBMS,Search engine,Time Series DBMS | | | Amazon DynamoDB | Document Store,Key-value store | | | Couchbase | Document Store,Key-value store | | | etcd | Key-value store | | | Memcached | Key-value store | | | Ehcache | Key-value store | | | LevelDB | Key-value store| |
以比較自由的格式(通常為JSON)的方式存儲文檔內容。這意味著:
記錄不需要具有統一的結構,即不同的記錄可以具有不同的列。
每個記錄的各個列的值類型可以不同。
列可以具有多個值(數組)。
記錄可以具有嵌套結構。 常見的文檔存儲有: MongoDB,Amazon DynamoDB,Couchbase,CouchDB。
寬列存儲(也稱為可擴展記錄存儲)將數據存儲在記錄中,并且能夠容納大量動態列。由于列名和記錄鍵不是固定的,并且一條記錄可以包含數十億列,因此寬列存儲可以看作是二維鍵值存儲。
寬列存儲與文檔存儲共享無模式的特性,但是實現卻大不相同。
在某些關系系統中,不能將寬列存儲與面向列存儲相混淆。這是一個內部概念,用于提高RDBMS針對OLAP工作負載的性能,并存儲表中的數據,而不是逐條記錄,而是逐列存儲。
列存儲使用場景:
行式存儲對于 OLTP 場景是很自然的:大多數操作都以實體(entity)為單位,即大多為增刪改查一整行記錄,顯然把一行數據存在物理上相鄰的位置是個很好的選擇。
然而,對于 OLAP 場景,一個典型的查詢需要遍歷整個表,進行分組、排序、聚合等操作,這樣一來按行存儲的優勢就不復存在了。更糟糕的是,分析型 SQL 常常不會用到所有的列,而僅僅對其中某些感興趣的列做運算,那一行中那些無關的列也不得不參與掃描。
列式存儲就是為這樣的需求設計的。如下圖所示,同一列的數據被一個接一個緊挨著存放在一起,表的每列構成一個長數組。
常見的寬列存儲數據包括:Cassandra和HBase。
圖DBMS,也稱為面向圖的DBMS或圖數據庫,將圖結構中的數據表示為節點和邊,即節點之間的關系。它們允許輕松處理該形式的數據,并且可以簡單地計算圖形的特定屬性,例如從一個節點到另一個節點所需的步驟數。
圖形DBMS通常不會在所有節點上提供索引,在這種情況下,無法基于屬性值直接訪問節點。 常見的圖存儲包括:Neo4j,Microsoft Azure Cosmos DB 。
NewSQL提供了與NoSQL 相同的可擴展性,而且仍基于關系模型,還保留了極其成熟的SQL 作為查詢語言,保證了ACID事務特性。簡單來講,NewSQL 就是在傳統關系型數據庫上集成了NoSQL 強大的可擴展性。
NewSQL 的主要特性:
SQL 支持,支持復雜查詢和大數據分析。
支持 ACID 事務,支持隔離級別。
彈性伸縮,擴容縮容對于業務層完全透明。
高可用,自動容災。 主流NewSQL包括:TiDB,VoltDB,ClustrixDB等。 上面介紹了三種類型數據庫(關系型數據庫,NoSQL,NewSQL),處了這些分類之外還有針對特定場景存儲的選型。比如可以用作搜索引擎的ES,Solar等,時間序列數據庫OpenTSDB,InfluxDB等。
感謝各位的閱讀,以上就是“數據庫可以分為哪幾類”的內容了,經過本文的學習后,相信大家對數據庫可以分為哪幾類這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。