a. SQL數(shù)據(jù)存在特定結(jié)構(gòu)的表中;而NoSQL則更加靈活和可擴展,存儲方式可以省是JSON文檔、哈希表或者其他方式。
b. 在SQL中,必須定義好表和字段結(jié)構(gòu)后才能添加數(shù)據(jù),例如定義表的主鍵(primary key),索引(index),觸發(fā)器(trigger),存儲過程(stored procedure)等。表結(jié)構(gòu)可以在被定義之后更新,但是如果有比較大的結(jié)構(gòu)變更的話就會變得比較復(fù)雜。在NoSQL中,數(shù)據(jù)可以在任何時候任何地方添加,不需要先定義表。
c. SQL中如果需要增加外部關(guān)聯(lián)數(shù)據(jù)的話,規(guī)范化做法是在原表中增加一個外鍵,關(guān)聯(lián)外部數(shù)據(jù)表。而在NoSQL中除了這種規(guī)范化的外部數(shù)據(jù)表做法以外,我們還能用如下的非規(guī)范化方式把外部數(shù)據(jù)直接放到原數(shù)據(jù)集中,以提高查詢效率。缺點也比較明顯,更新審核人數(shù)據(jù)的時候?qū)容^麻煩。
d. SQL中可以使用JOIN表鏈接方式將多個關(guān)系數(shù)據(jù)表中的數(shù)據(jù)用一條簡單的查詢語句查詢出來。NoSQL暫未提供類似JOIN的查詢方式對多個數(shù)據(jù)集中的數(shù)據(jù)做查詢。所以大部分NoSQL使用非規(guī)范化的數(shù)據(jù)存儲方式存儲數(shù)據(jù)。
e. SQL中不允許刪除已經(jīng)被使用的外部數(shù)據(jù),而NoSQL中則沒有這種強耦合的概念,可以隨時刪除任何數(shù)據(jù)。
f. SQL中如果多張表數(shù)據(jù)需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場景可以通過事務(wù)來控制,可以在所有命令完成后再統(tǒng)一提交事務(wù)。而NoSQL中沒有事務(wù)這個概念,每一個數(shù)據(jù)集的操作都是原子級的。
g. 在相同水平的系統(tǒng)設(shè)計的前提下,因為NoSQL中省略了JOIN查詢的消耗,故理論上性能上是優(yōu)于SQL的。








暫無數(shù)據(jù)