一、MySql
1)Mysql介紹
MySQL是關系型資料庫:
- MySQL也是一種硬碟型資料庫,它所有的資料都是存放在硬碟中,需要使用的時候才會交換到記憶體中。是以MySQL能夠處理海量的資料,但是資料量很大的時,速度會稍慢。
- MySQL的使用需要提前建表,不适用于資料結構變換頻繁的情況。
非關系型資料庫:MongoDB、Redis
二、MongoDB
1)MongoDB介紹
MongoDB是一個基于分布式檔案存儲的開源資料庫系統,MongoDB 将資料存儲為一個文檔,資料結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。MongoDB的資料索引是B-樹。
- MongoDB 在建立資料庫的時候,會直接在磁盤上面配置設定一組資料檔案,所有的集合、索引和資料庫的其他中繼資料都儲存在這些檔案中。
- MongoDB 的所有資料實際上是存放在硬碟的,所有要操作的資料通過 mmap 的方式映射到記憶體某個區域内。然後,MongoDB 就在這塊區域裡面進行資料修改,避免了零碎的硬碟操作。至于 mmap上的内容flush到硬碟就是作業系統的事情了,是以,如果,MongoDB 在記憶體中修改了資料後,mmap 資料flush到硬碟之前,系統當機了,資料就會丢失。
2)MongoDB的特點
優點:
- 提供面向文檔存儲,操作簡單
- 擴充性強,第三方支援豐富
- 具有failover機制(失效轉移:一種備份操作模式,當一個系統因為一些故障無法完成工作的時候,另一個系統自動接替已失效系統的工作繼續執行)
- 支援大容量存儲,内置GridFS(可用于存放大量的小檔案)
- 在高負載的情況下,可以添加更多的節點,保證伺服器性能
缺點:
- 無事務機制(資料庫事務(database transaction)對單個的邏輯單元執行一系列的操作,要麼完全執行,要麼完全不執行)
- 占用空間過大
- 沒有mysql那樣成熟的維護工具
- MongoDB 對資料之間事務關系支援比較弱,如果業務這一方面要求比較高的話,MongoDB 還是并不适合此類型的應用
适用場景:
-
适合那種資料格式不明确
或者經常變化的模型,比如事件記錄、内容管理或者部落格平台。
三、Redis
1)Redis介紹
Redis是一種記憶體資料庫,所有的資料都是放在記憶體之中,定期寫入磁盤中,當記憶體不夠的時候,可選擇指定的LRU算法删除資料。Redis是基于哈希字典建立的,是以其索引方式是哈希。
特點:
- 由于資料存放在記憶體中,是以讀寫性能高
- 支援豐富的資料類型,如鍵值對、集合、清單、散列存儲
叢集:
MongoDB 叢集技術比較成熟,Redis從3.0開始支援叢集。
Mongo和Redis之間的性能比較:
引用https://blog.csdn.net/CatStarXcode/article/details/79513425

資料量和性能:
當實體記憶體夠用的時候,redis>mongodb>mysql
當實體記憶體不夠用的時候,redis和mongodb都會使用虛拟記憶體。
實際上如果redis要開始虛拟記憶體,那很明顯要麼加記憶體條,要麼你換個資料庫了。
但是,mongodb不一樣,隻要,業務上能保證,冷熱資料的讀寫比,使得熱資料在實體記憶體中,mmap的交換較少。
mongodb還是能夠保證性能。有人使用mongodb存儲了上T的資料。
mysql,mysql根本就不需要擔心資料量跟記憶體下的關系。不過,記憶體的量跟熱資料的關系會極大地影響性能表現。
當實體記憶體和虛拟記憶體都不夠用的時候,估計除了mysql你沒什麼好選擇了。
其實,從資料存儲原理來看,我更傾向于将mongodb歸類為硬碟資料庫,但是使用了mmap作為加速的手段而已。