標籤:添加 文法 系統設計 不能 補充 事務性 統一 mongodb 連結
一、概念 SQL (Structured Query Language) 資料庫,指關係型資料庫。主要代表:SQL Server,Oracle,MySQL(開源),PostgreSQL(開源)。 NoSQL(Not Only SQL)泛指非關係型資料庫。主要代表:MongoDB,Redis,CouchDB。 二、區別1、儲存方式 SQL資料存在特定結構的表中;而NoSQL則更加靈活和可擴充,儲存方式可以省是JSON文檔、雜湊表或者其他方式。SQL通常以資料庫表形式儲存資料。舉個栗子,存個學生借書資料:而NoSQL儲存方式比較靈活,比如使用類JSON檔案儲存體上表中熊大的借閱資料: 2、表/資料集合的資料的關係 在SQL中,必須定義好表和欄位結構後才能添加資料,例如定義表的主鍵(primary key),索引(index),觸發器(trigger),預存程序(stored procedure)等。表結構可以在被定義之後更新,但是如果有比較大的結構變更的話就會變得比較複雜。在NoSQL中,資料可以在任何時候任何地方添加,不需要先定義表。例如下面這段代碼會自動建立一個新的"借閱表"資料集合:NoSQL也可以在資料集中建立索引。以MongoDB為例,會自動在資料集合建立後建立唯一值_id欄位,這樣的話就可以在資料集建立後增加索引。從這點來看,NoSQL可能更加適合初始化資料還不明確或者未定的項目中。 3、外部資料儲存 SQL中如何需要增加外部關聯資料的話,正常化做法是在原表中增加一個外鍵,關聯外部資料表。例如需要在借閱表中增加審核人資訊,先建立一個審核人表:再在原來的借閱人表中增加審核人外鍵:這樣如果我們需要更新審核人個人資訊的時候只需要更新審核人表而不需要對借閱人表做更新。而在NoSQL中除了這種正常化的外部資料表做法以外,我們還能用如下的非正常化方式把外部資料直接放到原資料集中,以提高查詢效率。缺點也比較明顯,更新審核人資料的時候將會比較麻煩。 4、SQL中的JOIN查詢 SQL中可以使用JOIN錶鏈接方式將多個關係資料表中的資料用一條簡單的查詢語句查詢出來。NoSQL暫未提供類似JOIN的查詢方式對多個資料集中的資料做查詢。所以大部分NoSQL使用非正常化的資料存放區方式儲存資料。 5、資料耦合性 SQL中不允許刪除已經被使用的外部資料,例如審核人表中的"熊三"已經被分配給了借閱人熊大,那麼在審核人表中將不允許刪除熊三這條資料,以保證資料完整性。而NoSQL中則沒有這種強耦合的概念,可以隨時刪除任何資料。 6、事務 SQL中如果多張表資料需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種情境可以通過事務來控制,可以在所有命令完成後再統一提交事務。而NoSQL中沒有事務這個概念,每一個資料集的操作都是原子級的。 7、增刪改查文法 8、查詢效能 在相同水平的系統設計的前提下,因為NoSQL中省略了JOIN查詢的消耗,故理論上效能上是優於SQL的。 三、補充 目前許多大型互連網項目都會選用MySQL(或任何關係型資料庫) + NoSQL的組合方案。 關係型資料庫適合儲存結構化資料,如使用者的帳號、地址: 1)這些資料通常需要做結構化查詢(嗯,好像是廢話),比如join,這時候,關係型資料庫就要勝出一籌 2)這些資料的規模、增長的速度通常是可以預期的 3)事務性、一致性 NoSQL適合儲存非結構化資料,如文章、評論: 1)這些資料通常用於模糊處理,如全文檢索搜尋、機器學習 2)這些資料是海量的,而且增長的速度是難以預期的, 3)根據資料的特點,NoSQL資料庫通常具有無限(至少接近)伸縮性 4)按key擷取資料效率很高,但是對join或其他結構化查詢的支援就比較差 基於它們的適用範圍不同,目前主流架構才會採用組合方案,一個也不能少。目前為止,還沒有出現一個能夠通吃各種情境的資料庫,而且根據CAP理論,這樣的資料庫是不存在的。 轉 :https://www.cnblogs.com/jeakeven/p/5402095.html
SQL 和 NoSQL 的區別