1. 程式人生 > >MongoDB 1: NoSQL 和 SQL的區別

MongoDB 1: NoSQL 和 SQL的區別

導讀:本篇部落格,主要是結合自己在專案中的使用,簡單的闡述一下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的問題和解決方案。