數據庫之間的區別

MySQL&Redis數據庫

  • MySQL屬於關係型數據庫,其數據存儲在磁盤當中進行持久化存儲,檢索時涉及到必定的IO操做,數據訪問較慢;Redis屬於非關係型數據庫,其數據存儲於內存當中,亦可以使用RDB、AOF方式進行持久化存儲,數據訪問效率高。
  • 表設計方面,MySQL須要事先進行設計表結構、表字段等;Redis採用結構型數據存儲若是是對於小型的系統能夠不用設計,但若考慮合理規範的使用Redis,須要先進行規劃:
    • 數據項:value存儲的內容是什麼,應該選用何種數據類型進存儲。
    • 數據類型:list、set、zset、string、hash。
    • 數據大小:100字節、1000字節。。。
    • 記錄數:100萬條(決定是否進行拆分)
  • MySQL支持多種存儲引擎,不一樣的存儲引擎有不一樣的存儲方式;Redis是一個支持網絡、基於內存的鍵值對類型數據庫,支持五種數據類型。
  • MySQL使用的是規範化的SQL語句;而非關係型數據庫之間的語法差別性很大。

 

MySQL&MongoDBjson

  • MySQL屬於關係型數據庫;MongoDB屬於文檔型的非關係型數據庫,能夠存儲 xml、json、bson 類型,呈現分層的樹狀數據結構,數據結構由鍵值(key-value)對組成。
  • MySQL支持事務操做;MongoDB不支持事務。
  • MySQL數據存儲在磁盤;MongoDB數據存儲在內存。
  • MongoDB佔用空間大,遵循的以空間換時間的原則,目前爲止不支持在線壓縮的功能,若頻繁對數據進行增刪改查容易出現數據碎片,從而致使索引出現問題&佔用空間愈來愈大
  • MySQLDatabase/Table/Row/Column(數據庫-表-記錄-列組成MongoDBDatabase/Collection/Document (集合-文檔組成
  • MySQL須要提早設計表結構、表字段,MongoDB的Collection的每一個Document的結構可自由修改。
  • MySQL支持json,MongoDB沒有。
  • MySQL 使用 SQL 語言; MongoDB 使用相似 JavaScript 的函數

 

 

Redis&Memcached緩存

  • Redis不只支持簡單的k/v類型的數據,還提供list,set,zset,hash等數據結構的存儲。memcache支持簡單的數據類型,String。
  • Redis支持數據的備份,即master-slave模式的數據備份。
  • Redis支持數據的持久化,能夠將內存中的數據保持在磁盤中,重啓的時候能夠再次加載進行使用,而Memecache把數據所有存在內存之中
  • Redis的速度比Memcached快不少
  • Memcached是多線程,非阻塞IO複用的網絡模型;Redis使用單線程的IO複用模型。在高併發場景的壓力下,多線程非阻塞式IO的Memcached表現會更加優異。
  • Redis並非將全部內存數據都存放在內存中,只會將全部的key存放在內存,在讀取時會有必定概率存在一次IO操做,Redis是使用時間換取了空間的策略
  • Memcached內部還存在一個slot的機制,對內存的使用優先使用廢棄內存,在內存的重複利用上也具備必定的優點;
  • Memcached使用預分配的內存池的方式,使用slab和大小不一樣的chunk來管理內存,Item根據大小選擇合適的chunk存儲,內存池的方式能夠省去申請/釋放內存的開銷,而且能減少內存碎片產生,但這種方式也會帶來必定程度上的空間浪費。服務器

    Redis使用現場申請內存的方式來存儲數據,而且不多使用free-list等方式來優化內存分配,會在必定程度上存在內存碎片,Redis根據存儲命令參數,會把帶過時時間的數據單獨存放在一塊兒,並把它們稱爲臨時數據,非臨時數據是永遠不會被剔除的,即使物理內存不夠,致使swap也不會剔除任何非臨時數據(但會嘗試剔除部分臨時數據),因此Redis更適合做爲存儲而不是cache。網絡

  •  

    Redis提供了一個「事務」的概念,Redis的事務僅僅只是將一組操做按順序進行操做,在這之間不會插入任何其餘命令,從而保證數據的一致性,可是這種方式很容易形成操做阻塞。Memcached提供了相似於樂觀鎖同樣的cas操做,會快速的返回處理成功或失敗,不會對其餘數據操做產生影響。
  • Memcached自己並不支持集羣,全部的集羣形式都是經過客戶端實現。Redis可修改配置文件 「cluster-enabled yes」 開啓集羣。
  • Memcached單個key-value大小有限,一個value最大隻支持1MB,而Redis最大支持512MB。
  • Memcached只是個內存緩存,對可靠性無要求;而Redis更傾向於內存數據庫,所以對對可靠性方面要求比較高。
  • 對持久化要求不高,更但願快速高效,優先考慮Memcached
  • 須要進行實時配置(預熱服務器配置,經過在線修改配置信息達到不一樣的效果),有限考慮Memcached。
  • 存儲JSON字符串的場景使用Memcached。
  • 須要支持多類型數據類型,持久化要求比較高的狀況下,優先使用Redis
  • 使用RedisString類型作的事,均可以用Memcached替換,以此換取更好的性能提高; 除此之外,優先考慮Redis;


圖片描述
 
相關文章
相關標籤/搜索