1、概念:
SQL(Structured Query Language)數據庫,指關系型數據庫。主要代表:SQL Server、Oracle、MySQL、PostgreSQL。
NoSQL(Not Only SQL)泛指非關系型數據庫。主要代表:MongoDB、Redis、CouchDB。
2、誕生原因:
隨着互聯網的不斷發展,各類型的應用層出不窮,在這個雲計算的時代,對技術提出了更多的需求,主要體現在這四個方面:
①低延遲的讀寫速度:應用快速的反應能極大地提升用戶的滿意度。
②海量的數據和流量:對於搜索這樣大型應用而言,需要利用PB級別的數據和能應對百萬級的流量。
③大規模集群的管理:系統管理員希望分布式應用能更簡單的部署和管理。
④龐大運營成本的考量:IT經理們希望在硬件成本、軟件成本和人力成本能夠有大幅度地降低。
目前世界上主流的存儲系統大部分還是采用了關系型數據庫,其主要有以下優點:
①事務處理——保持數據的一致性。
②由於以標准化為前提,數據更新的開銷很小
③可以進行join等復雜查詢
雖然關系型數據庫已經在業界的數據存儲方面占據了不可動搖的地位,但是由於其天生的幾個限制,使其很難滿足上面這幾個要求:
①擴展困難:由於存在類似join這要多表查詢機制,使得數據庫在擴展方面很艱難
②讀寫慢:這種情況主要發生在數據量達到一定規模時由於關系型數據庫的系統邏輯非常復雜,使得其非常容易發生死鎖等的並發問題,所以導致其讀寫速度下滑非常嚴重。
③成本高:企業級數據庫的License價格很驚人,並且隨着系統的規模而不斷上升。
④有限的支撐容量:現有關系型解決方案還無法支撐Google這樣海量的數據存儲。
2、NoSQL優缺點:
優點:
①簡單的擴展:典型例子是Cassandra,由於其架構是類似於經典的P2P,所以能通過輕松地添加新的節點來擴展這個集群。
②快速的讀寫:主要例子有Redis,由於其邏輯簡單,而且純內存操作,使得其性能非常出色,單節點每秒可以處理超過10萬次讀寫操作。
③低廉的成本:這是大多數分布式數據庫共有的特點,因為主要都是開源軟件,沒有昂貴的License成本。
缺點:
①不提供對SQL的支持:如果不支持SQL這樣的工業標准,將會對用戶產生一定的學習和應用遷移成本。
②支持的特性不夠豐富:現有產品所提供的功能都比較有限,大多數NoSQL數據庫都不支持事務,也不像MSSQL Server和Oracle那樣能提供各種附加功能,比如BT和報表等。
③現有產品的不夠成熟:大多數產品都還處於初創期。
3、NoSQL使用場景
①數據庫表schema經常變化
②數據庫表字段是復雜數據類型
③高並發數據庫請求
④海量數據的分布式存儲。
4、NoSQL與SQL的區別:
SQL數據庫:
在使用之前需要定義表的一個模式
在表中存儲相關聯的數據
支持join多表查詢
提供事務
使用一個強聲明性語言查詢
提供足夠的支持,專業技能和工具
NoSQL數據庫:
將相關聯的數據存儲在類似JSON格式,名稱-值
可以保存沒有指定格式的數據
保證更新一個文檔,但不是多個文檔
提供出色的性能和可伸縮性
使用JSON數據對象查詢