天天看點

MySQL、MongoDB、Redis差別與介紹Mongo和Redis之間的性能比較:引用https://blog.csdn.net/CatStarXcode/article/details/79513425資料量和性能:

一、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

MySQL、MongoDB、Redis差別與介紹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作為加速的手段而已。