導讀:本篇博客,主要是結合自己在項目中的使用,簡單的闡述一下NoSQL和SQL的區別。那么,根據自己的應用,NoSQL這邊,選擇的是MongoDB(Redis雖然也是,但屬於內存存儲,這里不予說明)。SQL這邊,選擇的是MySQL。
一、簡單概述
SQL:對於SQL來說,也是我們最常說的關系型數據庫,比如:MySQL,SQLServer等。那么,它的一個最明顯的表示是,它的數據,全部是通過表單進行存儲,有行和列之分。
NoSQL:相對於SQL而言,NoSQL則是一種非關系型的數據庫。NoSQL(not only SQL),它的數據存儲是以文檔或者集合的形式進行,沒有行列之分。
1.1,從數據存儲來看:
1.2,從功能來看:
1.3,從查詢語言來看:
個人感覺,關系型和非關系,在本質上並沒有什么區別。而在應用層面上,查詢語言幾乎是相同的,區別比較少,學習的成本也是相對較低。
二、實例說明
需求:希望獲取一個用戶的完整銀行賬戶信息
2.1,使用關系型
我們通常的做法,是建立一個用戶表,是存儲用戶的基本信息;再建立一個銀行賬戶表,存儲銀行賬戶信息。然后通過外鍵,使這兩者之間產生聯系。
表一:用戶表
表二:用戶記錄
那么當我們想要獲取用戶的完整信息時,我們通常通過外鍵,去獲得兩張表信息的聯合;
我們通過使用關系型數據庫,無法一次性獲得所有的數據,通常通過聯合。那么,如果數據表過多,會發生什么?PS:維護過數據庫的應該有所體會。
可是,如果通過非關系型的數據塊進行存儲呢?比如MongoDB
2.2,使用非關系型
MongoDB允許你查找文檔中的任何東西,這也就意味着,不用聯合,就可以一次性的獲取所有的數據。
三、思考總結
在之前的項目中,使用了MongoDB去存儲考生的頭像或者說是音頻文件。那么事實上,大多數數據庫都支持image的存儲,對於音頻文件,也都是使用大型的二進制存儲結構進行存儲,或者轉換成文件流的形式寫入數據庫。
如果說使用MongoDB僅是為了存儲頭像或者說音頻,那么我認為這是一件有待商榷的事兒。一個考生在當場考試配置下,只會對應一份考試信息,那么作為頭像來說,是完全可以通過關系型,也就是我們一直使用的MySQL去實現的。
PS:一直很費解,為什么僅僅用MongoDB去存了圖片?它的出現和要解決的問題,並不是對於流性文件或者圖片的存儲!
后續,將介紹MongoDB的簡單安裝和使用,以及使用MongoDB的問題和解決方案。