誰能用最簡單的語言或者例子說下 Mysql、SQLite、Mongo的區別呢?

誰能用最簡單的語言或者例子說下 關係與非關係型資料庫呢?Mysql、SQLite、Mongo的區別呢?


MySQL是泰坦尼克號,船上的每一個人、每一個物體都是對象,他們之間建立各種關係,還有道德仁義等等約束條件,而泰坦尼克號就是用於處理這些關係和約束,當然,船大了,耗費能源就大,轉舵就費力,相對SQLite和MongoDB就要吃力些;SQLite是一個輕型的貨船,吞吐量很小,像泰坦尼克號一樣,同樣可以處理關係和約束,但由於船太小,不能負載太多;而MongoDB是一艘遊艇,這艘遊艇只有水手、船長和用於展覽的貨物。水手有一個展覽物品的清單,上面記錄了所有的展物信息,每一個展物都有唯一的編號,水手通過這個編號就可以得到是哪一個貨物。如果有富人上船欣賞,卻不知道這個展物是什麼,那水手查下清單便知道了。而且這張清單製作精良,水手可以很方便地通過編號得到展物的信息。

舉的例子不是很得體,:)

我們假設泰坦尼克號沒沉,三艘船各自在自己的航道上前行,迎著落日餘暉,飄向遠方。

簡而言之,關係型資料庫就是現實關係世界的抽象,而非關係型資料庫就是簡化關係,用鍵值對的方式進行存取。只不過不同的廠商實現方式有別,產品呈現各種形態。羅素說:「須知參差多態,才是幸福本源」,多樣性的資料庫生態才是資料庫技術永恆發展的不竭源泉。


最簡單地說,關係型資料庫就是由一張張二維表組成,其他均稱為非關係型,也就是mysql和mongodb最大的區別吧,sqllite不知,應該是相比較mysql而言更加輕量


舉個例子,如果資料庫看作筆記本:

mysql是方格本,每一頁上有行有列,行列的長度大小都是固定的,每行可以寫的字數也是固定的,每個格子裡面只寫一個字。寫出來的文章很整齊,查找起來也容易。

mongodb相當於長條本,只有行沒有列,每一行可以寫不同長度的內容,而且行的高度也不一定,只要不超過一頁紙的高度度就可以。每一行結構都可以很不同,很靈活。


  • 只能按key讀寫的是非關係型資料庫;可以支持sql的是關係型資料庫。
  • MongoDB是非關係型資料庫的代表;Mysql是關係型資料庫的代表。
  • sqlite是基於文件的關係型資料庫,不能分散式,無法橫向擴展,負載差,不能校驗身份;優點是:輕量級,可用於嵌入式,通過sdk直接操作文件不需要服務,免維護。

說的不對的地方請指正。


關係型資料庫:

最常見應用最廣的一類資料庫,建立在關係模型基礎上數據模型大致上就是二維表,一個突出的特點是用SQL進行操作,能滿足大部分需求。常見的MySQL,Oracle,Microsoft SQL Server等。

MySQL,開源的關係型資料庫,在現代資料庫中比較典型,能滿足你大部分需求,畢竟Oracle很貴。一般用起來要運行一個MySQL的服務,然後用客戶端去連接它,比如在Java里或者用shell連接127.0.0.1:3306。之後就可以愉快地執行SQL語句增刪查改了。

例子:比如學生信息管理系統,伺服器123.123.123.123:306上用的MySQL,另一個伺服器上的Web應用可以連接到它,學生基本信息一個表,班級信息一個表。學生的班級id欄位是外鍵連接到班級信息表的班級id。

SQLite,一個非常迷你的關係型資料庫,麻雀雖小五臟俱全。不支持遠程連接(需要遠程連伺服器上的資料庫還是乖乖用MySQL),連接資料庫就像是打開個db文件,比如用shell或者編程語言連接到e:example.db。之後就可以愉快地用SQL語句增刪查改了。非常適合嵌入到應用內部,比如android應用。顯然,如果你寫的程序訪問的數據想存成一個本地文件,你自己設計文件格式存數據很麻煩不如用這個。比如做個名片管理app,內嵌mingpian.db來保存名片。

非關係型資料庫:

由於關係型資料庫雖然數據結構很嚴謹規範,有一大堆約束(比如保證每個數據主鍵唯一啊,存在別的表裡的數據用外鍵連接啊之類的),但是在某些時候存在不足,比如我從今天開始存的數據都比昨天的多了倆欄位,或者今天開始每條數據裡面嵌入了一個列表,這時候關係型資料庫就不好用了(要麼建新表,要麼alter舊錶,然而改變裡面存了N多數據的舊錶的結構代價很大),再比如數據以增加為主,並且修改一條記錄某個欄位時要求舊的版本不能丟。

為了滿足這些需求,就出現了非關係型資料庫,也有人稱之為NoSQL資料庫,放棄一部分關係型資料庫的「嚴謹」,而支持各種別的特性。常見的有HBase、MongoDB、Redis等等

MongoDB按分類可以算「基於文檔的資料庫」,裡面數據的「長相」參見JSON格式。然而在我看來,很多吵吵著用MongoDB的情況MySQL完全可以勝任。

慎用非關係型資料庫。

細節有不對的地方可以指正。


用最簡單的語言或者例子說他們的區別只能是沒區別,


推薦閱讀:

資料庫學習書籍推薦?
如何評價帆軟的兩個產品FineReport和FineBI,兩者似乎都能做報表和分析?
國產的資料庫都有哪些?
為什麼大學的資料庫課程用的是微軟的SQL server而不是mysql?
外文文獻庫Wiley,EBSCO,OSA,IEEE,Sciencedirect,springer在醫學臨床醫學文獻檢索方面的各有什麼特點與優勢?

TAG:資料庫 | MySQL | MongoDB | SQLite |