數據庫發展至今已經有3代了:
- SQL,傳統關系型數據庫,例如 MySQL
- noSQL,例如 MongoDB
- newSQL
SQL 的問題
互聯網在本世紀初開始迅速發展,互聯網應用的用戶規模、數據量都越來越大,並且要求7X24小時在線。
傳統關系型數據庫在這種環境下成為了瓶頸,通常有2種解決方法:
- 升級服務器硬件
雖然提升了性能,但總有天花板。
- 數據分片,使用分布式集群結構
對單點數據庫進行數據分片,存放到由廉價機器組成的分布式的集群里。
可擴展性更好了,但也帶來了新的麻煩。
以前在一個庫里的數據,現在跨了多個庫,應用系統不能自己去多個庫中操作,需要使用數據庫分片中間件。
分片中間件做簡單的數據操作時還好,但涉及到跨庫join、跨庫事務時就很頭疼了,很多人干脆自己在業務層處理,復雜度較高。
noSQL 的優勢與不足
后來 noSQL 出現了,放棄了傳統SQL的強事務保證和關系模型,重點放在數據庫的高可用性和可擴展性。
noSQL 的主要優勢:
- 高可用性和可擴展性,自動分區,輕松擴展
- 不保證強一致性,性能大幅提升
- 沒有關系模型的限制,極其靈活
noSQL 不保證強一致性,對於普通應用沒問題,但還是有不少像金融一樣的企業級應用有強一致性的需求。
而且 noSQL 不支持 SQL 語句,兼容性是個大問題,不同的 noSQL 數據庫都有自己的 api 操作數據,比較復雜。
newSQL 特性
newSQL 提供了與 noSQL 相同的可擴展性,而且仍基於關系模型,還保留了極其成熟的 SQL 作為查詢語言,保證了ACID事務特性。
簡單來講,newSQL 就是在傳統關系型數據庫上集成了 noSQL 強大的可擴展性。
傳統的SQL架構設計基因中是沒有分布式的,而 newSQL 生於雲時代,天生就是分布式架構。
noSQL 的主要特性:
- SQL 支持,支持復雜查詢和大數據分析。
- 支持 ACID 事務,支持隔離級別。
- 彈性伸縮,擴容縮容對於業務層完全透明。
- 高可用,自動容災。
主流newSQL項目
VoltDB
ClustrixDB
http : //www.clustrix.com/
MemSQL
ScaleDB
http : //scaledb.com/
TiDB
參考資料:
https://db.cs.cmu.edu/papers/2016/pavlo-newsql-sigmodrec2016.pdf