隨著大數據的熱潮,非關係型數據庫NoSQL在近兩年也受到了更多人的關注,有人還提出NoSQL將主導未來的大數據分析領域。而事實上,SQL與NoSQL之間其實就是互補的關係,未來雙方在大數據和雲計算時代都將會有很大的發展空間。
概念
SQL (Structured Query Language) 數據庫,指關係型數據庫。主要代表:SQL Server,Oracle,MySQL(開源),PostgreSQL(開源)。
NoSQL(Not Only SQL)泛指非關係型數據庫。主要代表:MongoDB,Redis,CouchDB。
SQL 數據庫:
在表中存儲相關聯的數據
在使用之前需要定義表的一個模式
鼓勵標準化減少數據冗餘
支持從多個表中檢索相關數據表連接在一個單一的命令
實現數據完整性規則
提供事務使兩個或兩個以上的成功或失敗的數據更改作為一個原子單元
可以擴展(有一些努力)
使用一個強聲明性語言查詢
提供足夠的支持,專業技能和工具。
NoSQL 數據庫
將相關聯的數據存儲在類似 JSON 格式,名稱-值
可以保存沒有指定格式的數據
通常必須規範化,所以一個項目的信息包含在一個文檔裡
應該不需要連接(假設使用規範化的文檔)
允許任何數據被保存在任何時候任何地方,不需要驗證
保證更新一個文檔 – 但不是多個文檔
提供出色的性能和可伸縮性
使用 JSON 數據對象查詢
是一個新的、令人興奮的技術。
SQL和NoSQL之間的區別
SQL的獨特優勢包括:
1. SQL能夠加強與數據的交互,並允許對單個數據庫設計提出問題。這是很關鍵的特徵,因為無法交互的數據基本上是沒用的,並且,增強的交互性能夠帶來新的見解、新的問題和更有意義的未來交互。
2. SQL是標準化的,使用戶能夠跨系統運用他們的知識,並對第三方附件和工具提供支持。
3. SQL能夠擴展,並且是多功能和經過時間驗證的,這能夠解決從快寫為主導的傳輸到掃描密集型深入分析等問題。
4. SQL對數據呈現和存儲採用正交形式,一些SQL系統支持JSON和其他結構化對象格式,比NoSQL具有更好的性能和更多功能。
NoSQL特點:
易擴展
NoSQL數據庫種類繁多,但是一個共同的特點都是去掉關係數據庫的關係型特性。數據之間無關係,這樣就非常容易擴展。也無形之間,在架構的層面上帶來了可擴展的能力。
大數據量,高性能
NoSQL數據庫都具有非常高的讀寫性能,尤其在大數據量下,同樣表現優秀。這得益於它的無關係性,數據庫的結構簡單。NoSQL的Cache是記錄級的,是一種細粒度的Cache,所以NoSQL在這個層面上來說就要性能高很多了。
靈活的數據模型
NoSQL無需事先為要存儲的數據建立字段,隨時可以存儲自定義的數據格式。而在關係數據庫裡,增刪字段是一件非常麻煩的事情。如果是非常大數據量的表,增加字段簡直就是一個噩夢。這點在大數據量的web2.0時代尤其明顯。
高可用
NoSQL在不太影響性能的情況,就可以方便的實現高可用的架構。比如Cassandra,HBase模型,通過複製模型也能實現高可用。
總結
SQL和NoSQL水火不容的想法是錯誤的,理由並不僅僅是因為很多公司都選擇同時使用它們。就像我以前討論過的所有技術一樣,世上真的沒有那種“萬金油”的方法,要根據用例來選擇恰當的技術。如果你的數據需求在迅速變化,就需要高通量來應對快速的增長,如果你的數據在大幅增長,就需要快速且有效的擴展性,NoSQL可能會適合你。但如果你的數據結構沒有變化,增長速度適中可控,那麼SQL技術可能最適合你。毫無疑問,SQL還沒有消亡。