sql (structured query language) 資料庫,指關係型資料庫。主要代表:sql server,oracle,mysql(開源),postgresql(開源)。
nosql(not only sql)泛指非關係型資料庫。主要代表:mongodb,redis,couchdb。
sql資料存在特定結構的表中;而nosql則更加靈活和可擴充套件,儲存方式可以省是json文件、雜湊表或者其他方式。sql通常以資料庫表形式儲存資料。舉個栗子,存個學生借書資料:
而nosql儲存方式比較靈活,比如使用類json檔案儲存上表中熊大的借閱資料:
在sql中,必須定義好錶和字段結構後才能新增資料,例如定義表的主鍵(primary key),索引(index),觸發器(trigger),儲存過程(stored procedure)等。表結構可以在被定義之後更新,但是如果有比較大的結構變更的話就會變得比較複雜。在nosql中,資料可以在任何時候任何地方新增,不需要先定義表。例如下面這段**會自動建立乙個新的"借閱表"資料集合:
nosql也可以在資料集中建立索引。以mongodb為例,會自動在資料集合建立後建立唯一值_id欄位,這樣的話就可以在資料集建立後增加索引。
從這點來看,nosql可能更加適合初始化資料還不明確或者未定的專案中。
sql中如何需要增加外部關聯資料的話,規範化做法是在原表中增加乙個外來鍵,關聯外部資料表。例如需要在借閱表中增加審核人資訊,先建立乙個審核人表:
再在原來的借閱人表中增加審核人外來鍵:
這樣如果我們需要更新審核人個人資訊的時候只需要更新審核人表而不需要對借閱人表做更新。而在nosql中除了這種規範化的外部資料表做法以外,我們還能用如下的非規範化方式把外部資料直接放到原資料集中,以提高查詢效率。缺點也比較明顯,更新審核人資料的時候將會比較麻煩。
sql中可以使用join表鏈結方式將多個關係資料表中的資料用一條簡單的查詢語句查詢出來。nosql暫未提供類似join的查詢方式對多個資料集中的資料做查詢。所以大部分nosql使用非規範化的資料儲存方式儲存資料。
sql中不允許刪除已經被使用的外部資料,例如審核人表中的"熊三"已經被分配給了借閱人熊大,那麼在審核人表中將不允許刪除熊三這條資料,以保證資料完整性。而nosql中則沒有這種強耦合的概念,可以隨時刪除任何資料。
sql中如果多張表資料需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場景可以通過事務來控制,可以在所有命令完成後再統一提交事務。而nosql中沒有事務這個概念,每乙個資料集的操作都是原子級的。
在相同水平的系統設計的前提下,因為nosql中省略了join查詢的消耗,故理論上效能上是優於sql的。
目前許多大型網際網路專案都會選用mysql(或任何關係型資料庫) + nosql的組合方案。
1)這些資料通常需要做結構化查詢(嗯,好像是廢話),比如join,這時候,關係型資料庫就要勝出一籌
2)這些資料的規模、增長的速度通常是可以預期的
3)事務性、一致性
1)這些資料通常用於模糊處理,如全文搜尋、機器學習
2)這些資料是海量的,而且增長的速度是難以預期的,
3)根據資料的特點,nosql資料庫通常具有無限(至少接近)伸縮性
4)按key獲取資料效率很高,但是對join或其他結構化查詢的支援就比較差
基於它們的適用範圍不同,目前主流架構才會採用組合方案,乙個也不能少。目前為止,還沒有出現乙個能夠通吃各種場景的資料庫,而且根據cap理論,這樣的資料庫是不存在的。
SQL 和 NoSQL 的區別
sql structured query language 資料庫,指關係型資料庫。主要代表 sql server,oracle,mysql 開源 postgresql 開源 nosql not only sql 泛指非關係型資料庫。主要代表 mongodb,redis,couchdb。sql資料存...
SQL和NoSQL之間的區別總結
主要差異 1.型別 sql資料庫主要稱為關聯式資料庫 rdbms 而nosql資料庫主要稱為非關聯式資料庫或分布式資料庫。2.語言 sql資料庫定義和操作基於資料的結構化查詢語言 sql 從側面看這種語言是非常強大的。sql是最通用和最廣泛使用的選項之一,使其成為安全的選擇,尤其適用於複雜的查詢。但...
NoSQL與SQL的區別
關係型資料庫 1.1什麼是關係型資料庫 關聯式資料庫 relational database 是建立在關係模型基礎上的資料庫,借助於集合代數等數學概念和方法來處理資料庫中的資料。現實世界中的各種實體以及實體之間的各種聯絡均用關係模型來表示。資料庫 包括乙個或多個表 表 關係 relation 是以列...