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