1. 程式人生 > >MySQL、Redis 和 MongoDB 的優缺點

MySQL、Redis 和 MongoDB 的優缺點

MySQL

MySQL 是一個關係型資料庫。

MySQL在 WEB 應用方面 MySQL 是最好的 RDBMS (Relational Database Management System,關係資料庫管理系統) 應用軟體之一。

MySQL 是一種關聯資料庫管理系統, 關聯資料庫將資料儲存在不同的表中,而不是將所有資料放在一個大倉庫內,這樣就增加了速度並提高了靈活性。

MySQL 所使用的 SQL 語言是用於訪問資料庫的最常用標準化語言。其社群版的效能卓越,搭配 PHP 和 Apache 可組成良好的開發環境。

 

優點

1、體積小、速度快、總體擁有成本低,開源,提供的介面支援多種語言連線操作。

2、支援多種作業系統。

3、MySQL 的核心程式採用完全的多執行緒程式設計。執行緒是輕量級的程序,它可以靈活地為使用者提供服務,而不過多的系統資源。用多執行緒和C語言實現的MySQL 能很容易充分利用CPU。 

4、 MySQL 有一個非常靈活而且安全的許可權和口令系統。當客戶與MySQL 伺服器連線時,他們之間所有的口令傳送被加密,而且MySQL 支援主機認證。

5.、MySQL 能夠提供很多不同的使用者介面,包括命令列客戶端操作,網頁瀏覽器,以及各式各樣的程式語言介面,例如 C++,Perl,Java,PHP,以及Python。你可以使用事先包裝好的客戶端,或者乾脆自己寫一個合適的應用程式。MySQL可用於 Unix,Windows,以及OS/2等平臺,因此它可以用在個人電腦或者是伺服器上。

 

缺點 

1、不支援熱備份。

2、MySQL不支援自定義資料型別。

3、MySQL最大的缺點是其安全系統,主要是複雜而非標準,另外只有到呼叫mysqladmin來重讀使用者許可權時才發生改變。

4、MySQL對儲存過程和觸發器支援不夠良好。

5、儘管 MySQL 理論上仍是開源產品,也有人抱怨它誕生之後更新緩慢。然而,應該注意到有一些基於 MySQL 並完整整合的資料庫(如 MariaDB),在標準的 MySQL 基礎上帶來了額外價值。

6、MySQL對XML支援不夠良好。

 

MongoDB 和 Redis 都是 NoSQL(非關係型的資料庫),採用結構型資料儲存。

二者在使用場景中,存在一定的區別, 這也主要由於二者在記憶體對映的處理過程,持久化的處理方法不同。

MongoDB建議叢集部署,更多的考慮到叢集方案,Redis更偏重於程序順序寫入,雖然支援叢集,也僅限於主從模式。

 

Redis

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協議、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。

它通常被稱為資料結構伺服器,因為值(value)可以是 字串(String), 雜湊(Map), 列表(list), 集合(sets) 和 有序集合(sorted sets)等型別。

 

優點:

1、讀寫效能優異。
2、支援資料持久化,支援 AOF 和 RDB 兩種持久化方式。

3、支援主從複製,主機會自動將資料同步到從機,可以進行讀寫分離。
4、資料結構豐富:資料結構豐富:支援 string、hash、set、sortedset、list 等資料結構。

 

缺點:

1、Redis 不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的 IP 才能恢復。

2、 主機宕機,宕機前有部分資料未能及時同步到從機,切換 IP 後還會引入資料不一致的問題,降低了系統的可用性。

3、Redis 的主從複製採用全量複製,複製過程中主機會 fork 出一個子程序對記憶體做一份快照, 並將子程序的記憶體快照儲存為檔案傳送給從機,這一過程需要確保主機有足夠多的空餘記憶體。若快照檔案較大,對叢集的服務能力會產生較大的影響,而且複製過程是在從機新加入 叢集或者從機和主機網路斷開重連時都會進行,也就是網路波動都會造成主機和從機間的一 次全量的資料複製,這對實際的系統運營造成了不小的麻煩。

4、 Redis 較難支援線上擴容,在叢集容量達到上限時線上擴容會變得很複雜。為避免這一問題,運維人員在系統上線時必須確保有足夠的空間,這對資源造成了很大的浪費。

MongoDB

MongoDB 是由C++語言編寫的,是一個基於分散式檔案儲存的開源資料庫系統。

在高負載的情況下,新增更多的節點,可以保證伺服器效能。

MongoDB 旨在為WEB應用提供可擴充套件的高效能資料儲存解決方案。

MongoDB 將資料儲存為一個文件,資料結構由鍵值(key=>value)對組成。MongoDB 文件類似於 JSON 物件。欄位值可以包含其他文件,陣列及文件陣列。

 

優點:

1、弱一致性(最終一致),更能保證使用者的訪問速度。

2、文件結構的儲存方式,能夠更便捷的獲取數。
3、內建 GridFS,高效儲存二進位制大物件 (比如照片和視訊)。

4、內建Sharding。提供基於Range的Auto Sharding機制:一個collection可按照記錄的範圍,分成若干個段,切分到不同的Shard上。

5、第三方支援豐富。(這是與其他的NoSQL相比,MongoDB也具有的優勢)。

6、效能優越:在使用場合下,千萬級別的文件物件,近10G的資料,對有索引的ID的查詢不會比mysql慢,而對非索引欄位的查詢,則是全面勝出。 

 

缺點: 

1、mongodb不支援事務操作。所以事務要求嚴格的系統(如果銀行系統)肯定不能用它。

2、mongodb佔用空間過大。
3、MongoDB沒有如MySQL那樣成熟的維護工具,這對於開發和IT運營都是個值得注意的地方。