Nosql簡介 Redis眷射,Memchche,MongoDb的區(qū)別

本篇文章主要介紹Nosql的一些東西,以及Nosql中比較火的三個數(shù)據(jù)庫Redis妖碉、Memchache涌庭、MongoDb和他們之間的區(qū)別。

Nosql介紹

Nosql的全稱是Not Only Sql欧宜,這個概念早起就有人提出坐榆,在09年的時候比較火。Nosql指的是非關系型數(shù)據(jù)庫冗茸,而我們常用的都是關系型數(shù)據(jù)庫席镀。就像我們常用的mysql,sqlserver一樣夏漱,這些數(shù)據(jù)庫一般用來存儲重要信息豪诲,應對普通的業(yè)務是沒有問題的。但是挂绰,隨著互聯(lián)網的高速發(fā)展跛溉,傳統(tǒng)的關系型數(shù)據(jù)庫在應付超大規(guī)模,超大流量以及高并發(fā)的時候力不從心扮授。而就在這個時候芳室,Nosql得到的告訴的發(fā)展。

Nosql和關系型數(shù)據(jù)庫的區(qū)別

1.存儲方式

關系型數(shù)據(jù)庫是表格式的刹勃,因此存儲在表的行和列中堪侯。他們之間很容易關聯(lián)協(xié)作存儲,提取數(shù)據(jù)很方便荔仁。而Nosql數(shù)據(jù)庫則與其相反伍宦,他是大塊的組合在一起。通常存儲在數(shù)據(jù)集中乏梁,就像文檔次洼、鍵值對或者圖結構。

2.存儲結構

關系型數(shù)據(jù)庫對應的是結構化數(shù)據(jù)遇骑,數(shù)據(jù)表都預先定義了結構(列的定義)卖毁,結構描述了數(shù)據(jù)的形式和內容。這一點對數(shù)據(jù)建模至關重要落萎,雖然預定義結構帶來了可靠性和穩(wěn)定性亥啦,但是修改這些數(shù)據(jù)比較困難。而Nosql數(shù)據(jù)庫基于動態(tài)結構练链,使用與非結構化數(shù)據(jù)翔脱。因為Nosql數(shù)據(jù)庫是動態(tài)結構,可以很容易適應數(shù)據(jù)類型和結構的變化媒鼓。

3.存儲規(guī)范

關系型數(shù)據(jù)庫的數(shù)據(jù)存儲為了更高的規(guī)范性届吁,把數(shù)據(jù)分割為最小的關系表以避免重復错妖,獲得精簡的空間利用。雖然管理起來很清晰疚沐,但是單個操作設計到多張表的時候暂氯,數(shù)據(jù)管理就顯得有點麻煩。而Nosql數(shù)據(jù)存儲在平面數(shù)據(jù)集中濒旦,數(shù)據(jù)經持昕酰可能會重復。單個數(shù)據(jù)庫很少被分隔開尔邓,而是存儲成了一個整體晾剖,這樣整塊數(shù)據(jù)更加便于讀寫。

4.存儲擴展

這可能是兩者之間最大的區(qū)別梯嗽,關系型數(shù)據(jù)庫是縱向擴展齿尽,也就是說想要提高處理能力,要使用速度更快的計算機灯节。因為數(shù)據(jù)存儲在關系表中循头,操作的性能瓶頸可能涉及到多個表,需要通過提升計算機性能來克服炎疆。雖然有很大的擴展空間卡骂,但是最終會達到縱向擴展的上限。而Nosql數(shù)據(jù)庫是橫向擴展的形入,它的存儲天然就是分布式的全跨,可以通過給資源池添加更多的普通數(shù)據(jù)庫服務器來分擔負載。

5.查詢方式

關系型數(shù)據(jù)庫通過結構化查詢語言來操作數(shù)據(jù)庫(就是我們通常說的SQL)亿遂。SQL支持數(shù)據(jù)庫CURD操作的功能非常強大浓若,是業(yè)界的標準用法。而Nosql查詢以塊為單元操作數(shù)據(jù)蛇数,使用的是非結構化查詢語言(UnQl)挪钓,它是沒有標準的。關系型數(shù)據(jù)庫表中主鍵的概念對應Nosql中存儲文檔的ID耳舅。關系型數(shù)據(jù)庫使用預定義優(yōu)化方式(比如索引)來加快查詢操作碌上,而Nosql更簡單更精確的數(shù)據(jù)訪問模式。

6.事務

關系型數(shù)據(jù)庫遵循ACID規(guī)則(原子性(Atomicity)挽放、一致性(Consistency)绍赛、隔離性(Isolation)、持久性(Durability))辑畦,而Nosql數(shù)據(jù)庫遵循BASE原則(基本可用(Basically Availble)、軟/柔性事務(Soft-state )腿倚、最終一致性(Eventual Consistency))纯出。由于關系型數(shù)據(jù)庫的數(shù)據(jù)強一致性,所以對事務的支持很好。關系型數(shù)據(jù)庫支持對事務原子性細粒度控制暂筝,并且易于回滾事務箩言。而Nosql數(shù)據(jù)庫是在CAP(一致性、可用性焕襟、分區(qū)容忍度)中任選兩項陨收,因為基于節(jié)點的分布式系統(tǒng)中,很難全部滿足鸵赖,所以對事務的支持不是很好务漩,雖然也可以使用事務,但是并不是Nosql的閃光點它褪。

7.性能

關系型數(shù)據(jù)庫為了維護數(shù)據(jù)的一致性付出了巨大的代價饵骨,讀寫性能比較差。在面對高并發(fā)讀寫性能非常差茫打,面對海量數(shù)據(jù)的時候效率非常低居触。而Nosql存儲的格式都是key-value類型的,并且存儲在內存中老赤,非常容易存儲轮洋,而且對于數(shù)據(jù)的 一致性是 弱要求。Nosql無需sql的解析抬旺,提高了讀寫性能弊予。

8.授權方式

關系型數(shù)據(jù)庫通常有SQL Server,Mysql嚷狞,Oracle块促。主流的Nosql數(shù)據(jù)庫有redis,memcache床未,MongoDb竭翠。大多數(shù)的關系型數(shù)據(jù)庫都是付費的并且價格昂貴,成本較大薇搁,而Nosql數(shù)據(jù)庫通常都是開源的斋扰。

Redis,Memcache啃洋,MongoDb的特點與區(qū)別

Redis

優(yōu)點

支持多種數(shù)據(jù)結構传货,如 string(字符串)、 list(雙向鏈表)宏娄、dict(hash表)问裕、set(集合)、zset(排序set)孵坚、hyperloglog(基數(shù)估算)

支持持久化操作粮宛,可以進行aof及rdb數(shù)據(jù)持久化到磁盤窥淆,從而進行數(shù)據(jù)備份或數(shù)據(jù)恢復等操作,較好的防止數(shù)據(jù)丟失  的手段巍杈。

支持通過Replication進行數(shù)據(jù)復制忧饭,通過master-slave機制,可以實時進行數(shù)據(jù)的同步復制筷畦,支持多級復制和增量復制词裤,master-slave機制是Redis進行HA的重要手段。

單線程請求鳖宾,所有命令串行執(zhí)行吼砂,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。

支持pub/sub消息訂閱機制攘滩,可以用來進行消息訂閱與通知帅刊。

支持簡單的事務需求,但業(yè)界使用場景很少漂问,并不成熟赖瞒。

缺點

Redis只能使用單線程,性能受限于CPU性能蚤假,故單實例CPU最高才可能達到5-6wQPS每秒(取決于數(shù)據(jù)結構栏饮,數(shù)據(jù)大小以及服務器硬件性能,日常環(huán)境中QPS高峰大約在1-2w左右)磷仰。

支持簡單的事務需求袍嬉,但業(yè)界使用場景很少,并不成熟灶平,既是優(yōu)點也是缺點伺通。

Redis在string類型上會消耗較多內存,可以使用dict(hash表)壓縮存儲以降低內存耗用逢享。

Memcache

優(yōu)點

Memcached可以利用多核優(yōu)勢罐监,單實例吞吐量極高,可以達到幾十萬QPS(取決于key瞒爬、value的字節(jié)大小以及服務器硬件性能弓柱,日常環(huán)境中QPS高峰大約在4-6w左右)。適用于最大程度扛量侧但。

支持直接配置為session handle矢空。

缺點

只支持簡單的key/value數(shù)據(jù)結構,不像Redis可以支持豐富的數(shù)據(jù)類型禀横。

無法進行持久化屁药,數(shù)據(jù)不能備份,只能用于緩存使用柏锄,且重啟后數(shù)據(jù)全部丟失者祖。

無法進行數(shù)據(jù)同步立莉,不能將MC中的數(shù)據(jù)遷移到其他MC實例中绢彤。

Memcached內存分配采用Slab Allocation機制管理內存七问,value大小分布差異較大時會造成內存利用率降低,并引發(fā)低利用率時依然出現(xiàn)踢出等問題茫舶。需要用戶注重value設計械巡。

MongoDB

優(yōu)點

更高的寫負載,MongoDB擁有更高的插入速度饶氏。

處理很大的規(guī)模的單表讥耗,當數(shù)據(jù)表太大的時候可以很容易的分割表。

高可用性疹启,設置M-S不僅方便而且很快古程,MongoDB還可以快速、安全及自動化的實現(xiàn)節(jié)點(數(shù)據(jù)中心)故障轉移喊崖。

快速的查詢挣磨,MongoDB支持二維空間索引,比如管道荤懂,因此可以快速及精確的從指定位置獲取數(shù)據(jù)茁裙。MongoDB在啟動后會將數(shù)據(jù)庫中的數(shù)據(jù)以文件映射的方式加載到內存中。如果內存資源相當豐富的話节仿,這將極大地提高數(shù)據(jù)庫的查詢速度晤锥。

非結構化數(shù)據(jù)的爆發(fā)增長,增加列在有些情況下可能鎖定整個數(shù)據(jù)庫廊宪,或者增加負載從而導致性能下降矾瘾,由于MongoDB的弱數(shù)據(jù)結構模式,添加1個新字段不會對舊表格有任何影響箭启,整個過程會非澈爵妫快速。

缺點

不支持事務册烈。

MongoDB占用空間過大 戈泼。

MongoDB沒有成熟的維護工具。

Redis赏僧、Memcache和MongoDB的區(qū)別

1. 性能

三者的性能都比較高大猛,總的來講:Memcache和Redis差不多,要高于MongoDB淀零。

2. 便利性

memcache數(shù)據(jù)結構單一挽绩。

redis豐富一些,數(shù)據(jù)操作方面驾中,redis更好一些唉堪,較少的網絡IO次數(shù)模聋。

mongodb支持豐富的數(shù)據(jù)表達,索引唠亚,最類似關系型數(shù)據(jù)庫链方,支持的查詢語言非常豐富。

3. 存儲空間

redis在2.0版本后增加了自己的VM特性灶搜,突破物理內存的限制祟蚀;可以對key value設置過期時間(類似memcache)。

memcache可以修改最大可用內存,采用LRU算法割卖。

mongoDB適合大數(shù)據(jù)量的存儲前酿,依賴操作系統(tǒng)VM做內存管理,吃內存也比較厲害鹏溯,服務不要和別的服務在一起罢维。

4. 可用性

redis,依賴客戶端來實現(xiàn)分布式讀寫丙挽;主從復制時肺孵,每次從節(jié)點重新連接主節(jié)點都要依賴整個快照,無增量復制,因性能和效率問題取试,所以單點問題比較復雜悬槽;不支持自動sharding,需要依賴程序設定一致hash 機制。一種替代方案是瞬浓,不用redis本身的復制機制初婆,采用自己做主動復制(多份存儲),或者改成增量復制的方式(需要自己實現(xiàn))猿棉,一致性問題和性能的權衡磅叛。

Memcache本身沒有數(shù)據(jù)冗余機制,也沒必要萨赁;對于故障預防弊琴,采用依賴成熟的hash或者環(huán)狀的算法,解決單點故障引起的抖動問題杖爽。

mongoDB支持master-slave,replicaset(內部采用paxos選舉算法敲董,自動故障恢復),auto sharding機制,對客戶端屏蔽了故障轉移和切分機制慰安。

5. 可靠性

redis支持(快照腋寨、AOF):依賴快照進行持久化,aof增強了可靠性的同時化焕,對性能有所影響萄窜。

memcache不支持,通常用在做緩存,提升性能。

MongoDB從1.8版本開始采用binlog方式支持持久化的可靠性查刻。

6. 一致性

Memcache 在并發(fā)場景下键兜,用cas保證一致性。

redis事務支持比較弱穗泵,只能保證事務中的每個操作連續(xù)執(zhí)行普气。

mongoDB不支持事務。

7. 數(shù)據(jù)分析

mongoDB內置了數(shù)據(jù)分析的功能(mapreduce),其他兩者不支持火欧。

8. 應用場景

redis:數(shù)據(jù)量較小的更性能操作和運算上棋电。

memcache:用于在動態(tài)系統(tǒng)中減少數(shù)據(jù)庫負載,提升性能;做緩存苇侵,提高性能(適合讀多寫少,對于數(shù)據(jù)量比較大企锌,可以采用sharding)榆浓。

MongoDB:主要解決海量數(shù)據(jù)的訪問效率問題。

原文:http://www.cnblogs.com/lina520/p/7919551.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末撕攒,一起剝皮案震驚了整個濱河市陡鹃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抖坪,老刑警劉巖萍鲸,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異擦俐,居然都是意外死亡脊阴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門蚯瞧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嘿期,“玉大人,你說我怎么就攤上這事埋合”感欤” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵甚颂,是天一觀的道長蜜猾。 經常有香客問我,道長振诬,這世上最難降的妖魔是什么蹭睡? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮贷揽,結果婚禮上棠笑,老公的妹妹穿的比我還像新娘。我一直安慰自己禽绪,他們只是感情好蓖救,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布洪规。 她就那樣靜靜地躺著,像睡著了一般循捺。 火紅的嫁衣襯著肌膚如雪斩例。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天从橘,我揣著相機與錄音念赶,去河邊找鬼。 笑死恰力,一個胖子當著我的面吹牛叉谜,可吹牛的內容都是我干的。 我是一名探鬼主播踩萎,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼停局,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了香府?” 一聲冷哼從身側響起董栽,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎企孩,沒想到半個月后锭碳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡勿璃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年擒抛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蝗柔。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡闻葵,死狀恐怖,靈堂內的尸體忽然破棺而出癣丧,到底是詐尸還是另有隱情槽畔,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布胁编,位于F島的核電站厢钧,受9級特大地震影響,放射性物質發(fā)生泄漏嬉橙。R本人自食惡果不足惜早直,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望市框。 院中可真熱鬧霞扬,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斧拍,卻和暖如春雀扶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背肆汹。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工愚墓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人昂勉。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓浪册,卻偏偏與公主長得像,于是被迫代替她去往敵國和親硼啤。 傳聞我的和親對象是個殘疾皇子议经,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360