一、概念
創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供恩平網(wǎng)站建設(shè)、恩平做網(wǎng)站、恩平網(wǎng)站設(shè)計(jì)、恩平網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、恩平企業(yè)網(wǎng)站模板建站服務(wù),十年恩平做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
SQL?(Structured?Query?Language)?數(shù)據(jù)庫(kù),指關(guān)系型數(shù)據(jù)庫(kù)。主要代表:SQL?Server,Oracle,MySQL(開源),PostgreSQL(開源)。
NoSQL(Not?Only?SQL)泛指非關(guān)系型數(shù)據(jù)庫(kù)。主要代表:MongoDB,Redis,CouchDB。
二、區(qū)別
1、存儲(chǔ)方式
SQL數(shù)據(jù)存在特定結(jié)構(gòu)的表中;而NoSQL則更加靈活和可擴(kuò)展,存儲(chǔ)方式可以省是JSON文檔、哈希表或者其他方式。SQL通常以數(shù)據(jù)庫(kù)表形式存儲(chǔ)數(shù)據(jù)。舉個(gè)栗子,存?zhèn)€學(xué)生借書數(shù)據(jù):
而NoSQL存儲(chǔ)方式比較靈活,比如使用類JSON文件存儲(chǔ)上表中熊大的借閱數(shù)據(jù):
2、表/數(shù)據(jù)集合的數(shù)據(jù)的關(guān)系
在SQL中,必須定義好表和字段結(jié)構(gòu)后才能添加數(shù)據(jù),例如定義表的主鍵(primary?key),索引(index),觸發(fā)器(trigger),存儲(chǔ)過程(stored?procedure)等。表結(jié)構(gòu)可以在被定義之后更新,但是如果有比較大的結(jié)構(gòu)變更的話就會(huì)變得比較復(fù)雜。在NoSQL中,數(shù)據(jù)可以在任何時(shí)候任何地方添加,不需要先定義表。例如下面這段代碼會(huì)自動(dòng)創(chuàng)建一個(gè)新的"借閱表"數(shù)據(jù)集合:
NoSQL也可以在數(shù)據(jù)集中建立索引。以MongoDB為例,會(huì)自動(dòng)在數(shù)據(jù)集合創(chuàng)建后創(chuàng)建唯一值_id字段,這樣的話就可以在數(shù)據(jù)集創(chuàng)建后增加索引。
從這點(diǎn)來看,NoSQL可能更加適合初始化數(shù)據(jù)還不明確或者未定的項(xiàng)目中。
3、外部數(shù)據(jù)存儲(chǔ)
SQL中如何需要增加外部關(guān)聯(lián)數(shù)據(jù)的話,規(guī)范化做法是在原表中增加一個(gè)外鍵,關(guān)聯(lián)外部數(shù)據(jù)表。例如需要在借閱表中增加審核人信息,先建立一個(gè)審核人表:
再在原來的借閱人表中增加審核人外鍵:
這樣如果我們需要更新審核人個(gè)人信息的時(shí)候只需要更新審核人表而不需要對(duì)借閱人表做更新。而在NoSQL中除了這種規(guī)范化的外部數(shù)據(jù)表做法以外,我們還能用如下的非規(guī)范化方式把外部數(shù)據(jù)直接放到原數(shù)據(jù)集中,以提高查詢效率。缺點(diǎn)也比較明顯,更新審核人數(shù)據(jù)的時(shí)候?qū)?huì)比較麻煩。
4、SQL中的JOIN查詢
SQL中可以使用JOIN表鏈接方式將多個(gè)關(guān)系數(shù)據(jù)表中的數(shù)據(jù)用一條簡(jiǎn)單的查詢語(yǔ)句查詢出來。NoSQL暫未提供類似JOIN的查詢方式對(duì)多個(gè)數(shù)據(jù)集中的數(shù)據(jù)做查詢。所以大部分NoSQL使用非規(guī)范化的數(shù)據(jù)存儲(chǔ)方式存儲(chǔ)數(shù)據(jù)。
5、數(shù)據(jù)耦合性
SQL中不允許刪除已經(jīng)被使用的外部數(shù)據(jù),例如審核人表中的"熊三"已經(jīng)被分配給了借閱人熊大,那么在審核人表中將不允許刪除熊三這條數(shù)據(jù),以保證數(shù)據(jù)完整性。而NoSQL中則沒有這種強(qiáng)耦合的概念,可以隨時(shí)刪除任何數(shù)據(jù)。
6、事務(wù)
SQL中如果多張表數(shù)據(jù)需要同批次被更新,即如果其中一張表更新失敗的話其他表也不能更新成功。這種場(chǎng)景可以通過事務(wù)來控制,可以在所有命令完成后再統(tǒng)一提交事務(wù)。而NoSQL中沒有事務(wù)這個(gè)概念,每一個(gè)數(shù)據(jù)集的操作都是原子級(jí)的。
7、增刪改查語(yǔ)法
8、查詢性能
在相同水平的系統(tǒng)設(shè)計(jì)的前提下,因?yàn)镹oSQL中省略了JOIN查詢的消耗,故理論上性能上是優(yōu)于SQL的。
一樣是數(shù)據(jù)庫(kù)
NOSQL查詢速度快,但是占用空間也大(都去索引那邊了)
但是NOSQL查詢復(fù)雜的邏輯關(guān)系的時(shí)候,只能批量獲取到本地去統(tǒng)計(jì)而SQL能通過條件和關(guān)聯(lián)表等方式進(jìn)行篩選只顯示符合條件的語(yǔ)句。
NOSQL用于無條件或少條件下的存取。百億級(jí)數(shù)據(jù)也能快速取出。
SQL用于復(fù)雜的邏輯存取。在數(shù)據(jù)量不多的情況下也能跟NOSQL一樣用于數(shù)據(jù)存儲(chǔ)。
對(duì)于很比系統(tǒng)而方,如何存儲(chǔ)、保護(hù)和高效的訪問數(shù)據(jù)是系統(tǒng)的重評(píng)判指標(biāo)?,F(xiàn)在發(fā)出現(xiàn)了兩種聲音:SQL 與NoSQL。那 我們要如何選擇,他們各有什么優(yōu)缺點(diǎn)呢?
SQL 和 NoSQL 數(shù)據(jù)庫(kù)都非常適合特定需求和用例。根據(jù)您組織的數(shù)據(jù)環(huán)境和目標(biāo),可能會(huì)放大每種方法的具體優(yōu)缺點(diǎn)。您可能會(huì)發(fā)現(xiàn)最好的解決方案是同時(shí)使用這兩種數(shù)據(jù)庫(kù),讓每種類型的數(shù)據(jù)庫(kù)發(fā)揮其優(yōu)勢(shì)。許多組織在其云架構(gòu)中同時(shí)使用 SQL 和 NoSQL 數(shù)據(jù)庫(kù),有時(shí)甚至在同一個(gè)應(yīng)用程序中。
簡(jiǎn)單說來:sql是關(guān)系型數(shù)據(jù)庫(kù)的結(jié)構(gòu)化查詢語(yǔ)言,而nosql,一般代指菲關(guān)系型數(shù)據(jù)庫(kù),sql語(yǔ)句就不能用來,不過有些有l(wèi)eisql的查詢語(yǔ)言,且nosql數(shù)據(jù)庫(kù)沒有統(tǒng)一的查詢語(yǔ)言。
NoSQL 數(shù)據(jù)庫(kù)因其功能性、易于開發(fā)性和可擴(kuò)展性而廣受認(rèn)可,它們?cè)絹碓蕉嗟赜糜诖髷?shù)據(jù)和實(shí)時(shí) Web 應(yīng)用程序,在本文中,我們通過示例討論 NoSQL、何時(shí)使用 NoSQL 與 SQL 及其用例。
NoSQL是一種下一代數(shù)據(jù)庫(kù)管理系統(tǒng) (DBMS)。NoSQL 數(shù)據(jù)庫(kù)具有靈活的模式,可用于構(gòu)建具有大量數(shù)據(jù)和高負(fù)載的現(xiàn)代應(yīng)用程序。
“NoSQL”一詞最初是由 Carlo Strozzi 在 1998 年創(chuàng)造的,盡管自 1960 年代后期以來就已經(jīng)存在類似的數(shù)據(jù)庫(kù)。然而,NoSQL 的發(fā)展始于 2009 年初,并且發(fā)展迅速。
在處理大量數(shù)據(jù)時(shí),任何關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng) (RDBMS) 的響應(yīng)時(shí)間都會(huì)變慢。為了解決這個(gè)問題,我們可以通過升級(jí)現(xiàn)有硬件來“擴(kuò)大”信息系統(tǒng),這非常昂貴。但是,NoSQL 可以更好地橫向擴(kuò)展并且更具成本效益。
NoSQL 對(duì)于非結(jié)構(gòu)化或非常大的數(shù)據(jù)對(duì)象(例如聊天日志數(shù)據(jù)、視頻或圖像)非常有用,這就是為什么 NoSQL 在微軟、谷歌、亞馬遜、Meta (Facebook) 等互聯(lián)網(wǎng)巨頭中特別受歡迎的原因。
一些流行的 NoSQL 數(shù)據(jù)庫(kù)包括:
隨著企業(yè)更快地積累更大的數(shù)據(jù)集,結(jié)構(gòu)化數(shù)據(jù)和關(guān)系模式并不總是適合。有必要使用非結(jié)構(gòu)化數(shù)據(jù)和大型對(duì)象來更好地捕獲這些信息。
傳統(tǒng)的 RDBMS 使用 SQL(結(jié)構(gòu)化查詢語(yǔ)言)語(yǔ)法來存儲(chǔ)和檢索結(jié)構(gòu)化數(shù)據(jù),相反,NoSQL 數(shù)據(jù)庫(kù)包含廣泛的功能,可以存儲(chǔ)和檢索結(jié)構(gòu)化、半結(jié)構(gòu)化、非結(jié)構(gòu)化和多態(tài)數(shù)據(jù)。
有時(shí),NoSQL 也被稱為“ 不僅僅是 SQL ”,強(qiáng)調(diào)它可能支持類似 SQL 的語(yǔ)言或與 SQL 數(shù)據(jù)庫(kù)并列。SQL 和 NoSQL DBMS 之間的一個(gè)區(qū)別是 JOIN 功能。SQL 數(shù)據(jù)庫(kù)使用 JOIN 子句來組合來自兩個(gè)或多個(gè)表的行,因?yàn)?NoSQL 數(shù)據(jù)庫(kù)本質(zhì)上不是表格的,所以這個(gè)功能并不總是可行或相關(guān)的。
但是,一些 NoSQL DBMS 可以執(zhí)行類似于 JOIN的操作——就像 MongoDB 一樣。這并不意味著不再需要 SQL DBMS,相反,NoSQL 和 SQL 數(shù)據(jù)庫(kù)傾向于以不同的方式解決類似的問題。
一般來說,在以下情況下,NoSQL 比 SQL 更可?。?/p>
許多行業(yè)都在采用 NoSQL,取代關(guān)系數(shù)據(jù)庫(kù),從而為某些業(yè)務(wù)應(yīng)用程序提供更高的靈活性和可擴(kuò)展性,下面給出了 NoSQL 數(shù)據(jù)庫(kù)的一些企業(yè)用例。
內(nèi)容管理是一組用于收集、管理、傳遞、檢索和發(fā)布任何格式的信息的過程,包括文本、圖像、音頻和視頻。NoSQL 數(shù)據(jù)庫(kù)可以通過其靈活和開放的數(shù)據(jù)模型為存儲(chǔ)多媒體內(nèi)容提供更好的選擇。
例如,福布斯在短短幾個(gè)月內(nèi)就構(gòu)建了一個(gè)基于 MongoDB 的定制內(nèi)容管理系統(tǒng),以更低的成本為他們提供了更大的敏捷性。
大數(shù)據(jù)是指太大而無法通過傳統(tǒng)處理系統(tǒng)處理的數(shù)據(jù)集,實(shí)時(shí)存儲(chǔ)和檢索大數(shù)據(jù)的系統(tǒng)在分析 歷史 數(shù)據(jù)的同時(shí)使用流處理來攝取新數(shù)據(jù),這是一系列非常適合 NoSQL 數(shù)據(jù)庫(kù)的功能。
Zoom使用 DynamoDB(按需模式)使其數(shù)據(jù)能夠在沒有性能問題的情況下進(jìn)行擴(kuò)展,即使該服務(wù)在 COVID-19 大流行的早期使用量激增。
物聯(lián)網(wǎng)設(shè)備具有連接到互聯(lián)網(wǎng)或通信網(wǎng)絡(luò)的嵌入式軟件和傳感器,能夠在無需人工干預(yù)的情況下收集和共享數(shù)據(jù)。隨著數(shù)十億臺(tái)設(shè)備生成數(shù)不清的數(shù)據(jù),IoT NoSQL 數(shù)據(jù)庫(kù)為 IoT 服務(wù)提供商提供了可擴(kuò)展性和更靈活的架構(gòu)。
Freshub就是這樣的一項(xiàng)服務(wù),它從 MySQL 切換到 MongoDB,以更好地處理其大型、動(dòng)態(tài)、非統(tǒng)一的數(shù)據(jù)集。
擁有數(shù)十億智能手機(jī)用戶,可擴(kuò)展性正成為在移動(dòng)設(shè)備上提供服務(wù)的企業(yè)面臨的最大挑戰(zhàn)。具有更靈活數(shù)據(jù)模型的 NoSQL DBMS 通常是完美的解決方案。
例如,The Weather Channel使用 MongoDB 數(shù)據(jù)庫(kù)每分鐘處理數(shù)百萬個(gè)請(qǐng)求,同時(shí)還處理用戶數(shù)據(jù)并提供天氣更新。