SQL簡介 SQL,即Structured Query Language 結構化查詢語言,用於存取數據以及查詢、更新和管理關係型資料庫。 常見的關係型資料庫有MySQL、SQL Server、Access、Oracle 等,SQL是關係型資料庫的通用語言。 SQL只是一個標準,由各關係資料庫廠商來實 ...
SQL簡介
SQL,即Structured Query Language 結構化查詢語言,用於存取數據以及查詢、更新和管理關係型資料庫。
常見的關係型資料庫有MySQL、SQL Server、Access、Oracle 等,SQL是關係型資料庫的通用語言。
SQL只是一個標準,由各關係資料庫廠商來實現,所以並不是完全支持的。就像W3C制定WEB標準,由各瀏覽器廠商來實現,但不是所有廠商都完全支持W3C制定的標準。除了 SQL 標準之外,大部分 SQL 資料庫都有自己的專有擴展。
sql同時也是資料庫腳本文件的擴展名。
關係型資料庫遵循ACID規則
事務在英文中是transaction,和現實世界中的交易很類似,它有如下四個特性:
1、A (Atomicity) 原子性
事務中的所有操作要麼全部做完,要麼都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。
2、C (Consistency) 一致性
資料庫要一直處於一致的狀態,事務的運行不會改變資料庫原本的一致性約束。
例如現有完整性約束a+b=10,如果一個事務改變了a,那麼必須得改變b,使得事務結束後依然滿足a+b=10,否則事務失敗。
3、I (Isolation) 獨立性
所謂的獨立性是指併發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。
比如現在有個交易是從A賬戶轉100元至B賬戶,在這個交易還未完成的情況下,如果此時B查詢自己的賬戶,是看不到新增加的100元的。
4、D (Durability) 持久性
持久性是指一旦事務提交後,它所做的修改將會永久的保存在資料庫上,即使宕機也不會丟失。
NoSQL 簡介
NoSQL即 NoSQL = Not Only SQL "不僅僅是SQL",泛指非關係型的資料庫。
現在的主流資料庫仍是關係型資料庫,但隨電腦網路的發展,產生、需要處理的數據量爆炸式增加,傳統的關係型資料庫處理大數據顯得力不從心,尤其是處理超大規模、高併發的數據時,關係型資料庫暴露了很多難以剋服的問題。
NoSQL資料庫就是為瞭解決大數據應用難題而產生的,NoSQL 是一項全新的資料庫革命性運動。
NoSQL適用於超大規模數據的存儲、挖掘。
比如谷歌或Facebook每天要產生萬億比特級的數據,如果要對這些用戶數據進行存儲、挖掘,SQL資料庫力不從心, NoSQL 資料庫卻能很好的處理這些大的數據。
NoSQL提倡運用非關係型的數據存儲,這些類型的數據存儲不需要固定的模式,無需多餘操作就可以橫向擴展。
NoSQL資料庫的四大分類
分類 | 舉例 | 典型應用場景 |
數據模型 | 優點 | 缺點 |
---|---|---|---|---|---|
鍵值資料庫(key-value) | Redis | 內容緩存,主要用於處理大量數據的高訪問負載,也用於一些日誌系統等等。 | Key 指向 Value 的鍵值對,通常用hash table來實現 | 查找速度快 | 數據無結構化,通常只被當作字元串或者二進位數據 |
列存儲資料庫 | Cassandra, HBase | 應對分散式存儲的海量數據,比如分散式的文件系統。 | 鍵仍然存在,但指向多個列。以列簇式存儲,將同一列數據存在一起 | 查找速度快,可擴展性強,更容易進行分散式擴展 | 功能相對局限 |
文檔型資料庫 | MongoDb | Web應用 | 數據模型是版本化的文檔,半結構化的文檔以特定的格式存儲,比如JSON。文檔型資料庫類似於鍵值存儲,可以看作是鍵值資料庫的升級版,文檔型資料庫比鍵值資料庫的查詢效率更高。Key-Value對應鍵值對,Value為結構化數據。 | 數據結構要求不嚴格,表結構可變,不需要像關係型資料庫一樣需要預先定義表結構 | 查詢性能不高,而且缺乏統一的查詢語法。 |
圖形(Graph)資料庫 | Neo4J, Infinite Graph | 社交網路,推薦系統等。專註於構建關係圖譜 | 圖結構 | 可利用圖結構相關演算法。比如最短路徑定址,N度關係查找等 | 很多時候需要對整個圖做計算才能得出需要的信息,而且這種結構不太好做分散式的集群方案。 |
NoSQL的共同特征
對於NoSQL並沒有一個明確的範圍和定義,但是他們都普遍存在下麵一些共同特征:-
不需要預定義模式:不需要事先定義數據模式,預定義表結構。數據中的每條記錄都可能有不同的屬性和格式。當插入數據時,並不需要預先定義它們的模式。
-
無共用架構:相對於將所有數據存儲的存儲區域網路中的全共用架構。NoSQL往往將數據劃分後存儲在各個本地伺服器上。因為從本地磁碟讀取數據的性能往往好於通過網路傳輸讀取數據的性能,從而提高了系統的性能。
-
彈性可擴展:可以在系統運行的時候,動態增加或者刪除結點。不需要停機維護,數據可以自動遷移。
-
分區:相對於將數據存放於同一個節點,NoSQL資料庫需要將數據進行分區,將記錄分散在多個節點上面。並且通常分區的同時還要做複製。這樣既提高了並行性能,又能保證沒有單點失效的問題。
-
非同步複製:和RAID存儲系統不同的是,NoSQL中的複製,往往是基於日誌的非同步複製。這樣,數據就可以儘快地寫入一個節點,而不會被網路傳輸引起遲延。缺點是並不總是能保證一致性,這樣的方式在出現故障的時候,可能會丟失少量的數據。
-
BASE:相對於事務嚴格的ACID特性,NoSQL資料庫保證的是BASE特性。BASE是最終一致性和軟事務。
NoSQL資料庫並沒有一個統一的架構,兩種NoSQL資料庫之間的不同,甚至遠遠超過兩種關係型資料庫的不同。可以說,NoSQL各有所長,共同點是它們都可以處理超大量的數據。成功的NoSQL必然特別適用於某些場合或者某些應用,在這些場合中會遠遠勝過關係型資料庫和其他的NoSQL。
NoSQL的適用場景
1、數據模型比較簡單;
2、需要靈活性更強的IT系統;
3、對資料庫性能要求較高;
4、不需要高度的數據一致性;
5、對於給定key,比較容易映射複雜值的環境。
NoSQL的優點、缺點
1、優點
- 高可擴展性
- 分散式計算
- 低成本
- 架構靈活,半結構化數據
- 沒有複雜的關係
一句話,高性能、高可用性、可伸縮性,沒有複雜的關係。
2、缺點
- 查詢功能有限