MongoDB與Redis的區(qū)別分析

MongoDB 和 Redis 的區(qū)別:

簡介

MongoDB 更類似?MySQL,支持字段索引缤剧、游標操作,其優(yōu)勢在于查詢功能比較強大域慷,擅長查詢 JSON 數(shù)據(jù)鞭执,能存儲海量數(shù)據(jù)司顿,但是不支持事務

MySQL?在大數(shù)據(jù)量時效率顯著下降兄纺,MongoDB 更多時候作為關(guān)系數(shù)據(jù)庫的一種替代大溜。

Redis 是一個開源(BSD許可)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng)估脆,它可以用作數(shù)據(jù)庫钦奋、緩存消息中間件。它支持多種類型的數(shù)據(jù)結(jié)構(gòu)疙赠,如 字符串(strings)付材, 散列(hashes),列表(lists)圃阳, 集合(sets)厌衔, 有序集合(sorted sets) 與范圍查詢, bitmaps捍岳, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢富寿。 Redis 內(nèi)置了 復制(replication),LUA腳本(Lua scripting)锣夹, LRU驅(qū)動事件(LRU eviction)页徐,事務(transactions) 和不同級別的 磁盤持久化(persistence),并通過 Redis哨兵(Sentinel)和自動 分區(qū)(Cluster)提供高可用性(high availability)

內(nèi)存管理機制

Redis 數(shù)據(jù)全部存在內(nèi)存银萍,定期寫入磁盤变勇,當內(nèi)存不夠時,可以選擇指定的 LRU 算法刪除數(shù)據(jù)贴唇。

MongoDB 數(shù)據(jù)存在內(nèi)存搀绣,由 linux系統(tǒng) mmap 實現(xiàn),當內(nèi)存不夠時戳气,只將熱點數(shù)據(jù)放入內(nèi)存链患,其他數(shù)據(jù)存在磁盤。

持久化方式:

mongodb的所有數(shù)據(jù)實際上是存放在硬盤的物咳,所有要操作的數(shù)據(jù)通過mmap的方式映射到內(nèi)存某個區(qū)域內(nèi)。

然后蹄皱,mongodb就在這塊區(qū)域里面進行數(shù)據(jù)修改览闰,避免了零碎的硬盤操作。

至于mmap上的內(nèi)容flush到硬盤就是操作系統(tǒng)的事情了巷折,所以压鉴,如果,mongodb在內(nèi)存中修改了數(shù)據(jù)后锻拘,mmap數(shù)據(jù)flush到硬盤之前油吭,系統(tǒng)宕機了击蹲,數(shù)據(jù)就會丟失。

mmap詳解鏈接:http://www.cnblogs.com/techdoc/archive/2010/12/22/1913521.html

(mmap系統(tǒng)調(diào)用并不是完全為了用于共享內(nèi)存而設計的婉宰。它本身提供了不同于一般對普通文件的訪問方式,進程可以像讀寫內(nèi)存一樣對普通文件進行操作心包。

mmap 系統(tǒng)調(diào)用使得進程之間通過映射同一個普通文件實現(xiàn)共享內(nèi)存类咧。普通文件被映射到進程地址空間后,進程可以像訪問普通內(nèi)存一樣對文件進行訪問蟹腾,不必再調(diào)用痕惋。 read(),write()等操作娃殖。mmap并不分配空間, 只是將文件映射到調(diào)用進程的地址空間里, 然后你就可以用memcpy等操作寫文件, 而不用write()了.寫完后用msync()同步一下, 你所寫的內(nèi)容就保存到文件里了. 不過這種方式?jīng)]辦法增加文件的長度, 因為要映射的長度在調(diào)用mmap()的時候就決定了值戳。)

redis:

它就是一個不折不扣的內(nèi)存數(shù)據(jù)庫了。

持久化方式:

redis所有數(shù)據(jù)都是放在內(nèi)存中的炉爆,持久化是使用RDB方式或者aof方式堕虹。

解密redis持久化:http://blog.nosqlfan.com/html/3813.html

mysql:

無論數(shù)據(jù)還是索引都存放在硬盤中。到要使用的時候才交換到內(nèi)存中叶洞。能夠處理遠超過內(nèi)存總量的數(shù)據(jù)鲫凶。

支持的數(shù)據(jù)結(jié)構(gòu)

Redis 支持的數(shù)據(jù)結(jié)構(gòu)豐富,包括hash衩辟、set螟炫、list等。

MongoDB 數(shù)據(jù)結(jié)構(gòu)比較單一艺晴,但是支持豐富的數(shù)據(jù)表達昼钻,索引,最類似關(guān)系型數(shù)據(jù)庫封寞,支持的查詢語言非常豐富然评。

數(shù)據(jù)量和性能:

當物理內(nèi)存夠用的時候,redis>mongodb>mysql

當物理內(nèi)存不夠用的時候狈究,redis和mongodb都會使用虛擬內(nèi)存碗淌。

實際上如果redis要開始虛擬內(nèi)存,那很明顯要么加內(nèi)存條抖锥,要么你換個數(shù)據(jù)庫了亿眠。

但是,mongodb不一樣磅废,只要纳像,業(yè)務上能保證,冷熱數(shù)據(jù)的讀寫比拯勉,使得熱數(shù)據(jù)在物理內(nèi)存中竟趾,mmap的交換較少憔购。

mongodb還是能夠保證性能。

性能

二者性能都比較高岔帽,應該說都不會是瓶頸玫鸟。

可靠性

二者均支持持久化。

事務支持情況

Redis 事務支持比較弱山卦,只能保證事務中的每個操作連續(xù)執(zhí)行

mongodb不支持事務

集群

MongoDB 集群技術(shù)比較成熟鞋邑,Redis從3.0開始支持集群。

不適用的場景

? ?需要使用復雜sql的操作

? ?事務性系統(tǒng)

下面是?MongoDB 和?Redis?的對比圖:

MySQL 與?Redis 的區(qū)別:

MySQL 是持久化存儲账蓉,存放在磁盤里面枚碗,檢索的話,會涉及到一定的 IO铸本,為了解決這個瓶頸肮雨,于是出現(xiàn)了緩存,比如現(xiàn)在用的最多的 memcached(簡稱mc)箱玷。首先怨规,用戶訪問mc,如果未命中锡足,就去訪問 MySQL波丰,之后像內(nèi)存和硬盤一樣,把數(shù)據(jù)復制到mc一部分舶得。

  Redis 和mc都是緩存掰烟,并且都是駐留在內(nèi)存中運行的,這大大提升了高數(shù)據(jù)量web訪問的訪問速度沐批。然而mc只是提供了簡單的數(shù)據(jù)結(jié)構(gòu)纫骑,比如 string存儲;Redis卻提供了大量的數(shù)據(jù)結(jié)構(gòu)九孩,比如string先馆、list、set躺彬、hashset煤墙、sorted set這些,這使得用戶方便了好多宪拥,畢竟封裝了一層實用的功能仿野,同時實現(xiàn)了同樣的效果,當然用Redis而慢慢舍棄mc江解。

  內(nèi)存和硬盤的關(guān)系设预,硬盤放置主體數(shù)據(jù)用于持久化存儲徙歼,而內(nèi)存則是當前運行的那部分數(shù)據(jù)犁河,CPU訪問內(nèi)存而不是磁盤鳖枕,這大大提升了運行的速度,當然這是基于程序的局部化訪問原理桨螺。

  推理到 Redis + MySQL宾符,它是內(nèi)存+磁盤關(guān)系的一個映射,MySQL 放在磁盤灭翔,Redis放在內(nèi)存魏烫,這樣的話,web應用每次只訪問Redis肝箱,如果沒有找到的數(shù)據(jù)哄褒,才去訪問 MySQL。

  然而 Redis + MySQL 和內(nèi)存+磁盤的用法最好是不同的煌张。

前者是內(nèi)存數(shù)據(jù)庫呐赡,數(shù)據(jù)保存在內(nèi)存中,當然速度快骏融。

后者是關(guān)系型數(shù)據(jù)庫链嘀,功能強大,數(shù)據(jù)訪問也就慢档玻。

像memcache怀泊,MongoDB,Redis误趴,都屬于No SQL系列霹琼。

不是一個類型的東西,應用場景也不太一樣冤留,還是要看你的需求來決定碧囊。

Mongodb與redis相比較:

mongoDB 源碼語言是C++,redis也是C或C++,

mongodb 文件存儲是BSON格式類似JSON,或自定義的二進制格式纤怒。

mongodb與redis性能都很依賴內(nèi)存的大小糯而,mongodb 有豐富的數(shù)據(jù)表達、索引泊窘;最類似于關(guān)系數(shù)據(jù)庫熄驼,支持豐富的查詢語言,redis數(shù)據(jù)豐富烘豹,較少的IO 瓜贾,這方面mongodb優(yōu)勢明顯。

mongodb不支持事物携悯,靠客戶端自身保證祭芦,redis支持事物,比較弱憔鬼,僅能保證事物中的操作按順序執(zhí)行龟劲,這方面 redis優(yōu)于mongodb胃夏。

mongodb對海量數(shù)據(jù)的訪問效率提升,redis 較小數(shù)據(jù)量的性能及運算,這方面 mongodb性能優(yōu)于redis .monbgodb 有mapredurce功能昌跌,提供數(shù)據(jù)分析仰禀,redis 沒有 ,這方面 mongodb優(yōu)于redis 蚕愤。

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末答恶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子萍诱,更是在濱河造成了極大的恐慌悬嗓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件裕坊,死亡現(xiàn)場離奇詭異烫扼,居然都是意外死亡,警方通過查閱死者的電腦和手機碍庵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門映企,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人静浴,你說我怎么就攤上這事堰氓。” “怎么了苹享?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵双絮,是天一觀的道長。 經(jīng)常有香客問我得问,道長囤攀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任宫纬,我火速辦了婚禮焚挠,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘漓骚。我一直安慰自己蝌衔,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布蝌蹂。 她就那樣靜靜地躺著噩斟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孤个。 梳的紋絲不亂的頭發(fā)上剃允,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音,去河邊找鬼斥废。 笑死覆享,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的营袜。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼丑罪,長吁一口氣:“原來是場噩夢啊……” “哼荚板!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吩屹,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤跪另,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后煤搜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體免绿,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年擦盾,在試婚紗的時候發(fā)現(xiàn)自己被綠了嘲驾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡迹卢,死狀恐怖辽故,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情腐碱,我是刑警寧澤誊垢,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站症见,受9級特大地震影響喂走,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜谋作,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一芋肠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遵蚜,春花似錦业栅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至攒钳,卻和暖如春帮孔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工文兢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晤斩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓姆坚,卻偏偏與公主長得像澳泵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子兼呵,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,898評論 2 89
  • 轉(zhuǎn)載地址:http://gnucto.blog.51cto.com/3391516/998509 Redis與Me...
    Ddaidai閱讀 21,442評論 0 82
  • 本文將從Redis的基本特性入手击喂,通過講述Redis的數(shù)據(jù)結(jié)構(gòu)和主要命令對Redis的基本能力進行直觀介紹维苔。之后概...
    kelgon閱讀 61,122評論 24 626
  • 月?lián)嵘骄?一線明光陰迫 月影婆娑 風在吟靜悄悄 月催人老 蟬在鳴燈火燒 月光搖落 手張開心放空 月上眉梢 魚美人有...
    二馬行空閱讀 415評論 5 6
  • 人生百態(tài)介时,社會萬象,一個人一個故事凌彬,一個故事一個輪回沸柔。 每個人都是主角,主導自己的人生大戲铲敛。無論是否有主角的光環(huán)照...
    肉羅閱讀 316評論 2 5