關係型數據庫(RDBMS,即SQL數據庫)
- 商業軟件: Oracle,DB2
- 開源軟件:MySQL,PostgreSQL
- 單機版本已經很難滿足海量數據的需求
NoSQL
- NoSQL = Not Only SQL,意即“不僅僅是SQL,提倡運用非關係型的數據存儲
- 普遍選擇犧牲掉複雜 SQL 的支持及 ACID 事務換取彈性擴展能力
- 通常不保證強一致性的(支持最終一致)
- 主要分類
- 鍵值(Key-Value)數據庫:如 MemcacheDB,Redis
- 文檔存儲:如 MongoDB
- 列存儲,方便存儲結構化和半結構化數據,方便做數據壓縮,對針對某一列或者某幾列的查詢有非常大的IO優勢: 如 HBase,Cassandra
圖數據庫,存儲圖形關係(注意:不是圖片)。如 Neo4J
NewSQL
爲什麼需要NewSQL
- NoSQL 不能完全取代 RDBMS
- 單機RDBMS 無法滿足性能需求
- 使用“單機RDBMS + 中間件”方式,在中間件層很難解決分佈式事務、高可用問題
NewSQL定義
針對OLTP的讀寫,提供與NOSQL相同的可擴展性和性能,同時能支持滿足ACID特性的事務
即保持NoSQL的高可擴展和高性能,並且保持關係模型
NewSQL設計架構
- 可以基於全新的數據庫平臺,也可以基於現有的SQL引擎優化。
- 無共享存儲(MPP架構)是比較常見的架構
- 基於多副本實現高可用和容災
- 分佈式查詢
- 數據Sharding機制
- 通過2PC,Paxos/Raft等協議實現數據一致
代表產品
- Google Spanner
- Cockroach DB
- TiDB
- OceanBase
- X-DB
OLTP和OLAP
OLTP
- 強調支持短時間內大量併發的小型操作(增刪改查)能力,每個查詢涉及的數據量都很小(比如幾十到幾百字節)
- 強調事務的強一致性(想想銀行轉賬交易,容不得差錯)
- 舉例:“雙十一”期間,可能有幾十萬用戶在同一秒內下訂單。後臺數據庫要能夠併發的、以近乎實時的速度處理這些訂單請求(如果下了訂單,十幾分鍾還沒有反應,用戶肯定要罵人了)
OLAP
- 偏向於複雜的只讀查詢,讀取海量數據進行分析計算,查詢時間往往很長
- 舉例:“雙十一”結束,淘寶的運營人員對訂單進行分析挖掘,找出一些市場規律、分析刷單行爲等等。這種分析可能需要讀取所有的歷史訂單進行計算,耗時幾十秒甚至幾十分鐘都有可能。
- 代表產品:
- Greenplum
- TeraData
- 阿里 AnalyticDB