何時去Redis?何時到MongoDB? [關閉]

我想要的不是Redis和MongoDB之間的比較。 我知道他們是不一樣的; 性能和API徹底不一樣。 php

Redis很是快,但API很是'原子'。 MongoDB將佔用更多資源,但API很是易於使用,我對此很是滿意。 html

它們都很棒,我想盡量多地使用Redis進行部署,可是很難編碼。 我想盡量多地在開發中使用MongoDB,但它須要一臺昂貴的機器。 redis

那麼你怎麼看待它們的使用呢? 何時選Redis? 何時選擇MongoDB? sql


#1樓

也許這個資源有助於在二者之間作出決定。 它還討論了其餘幾個NoSQL數據庫,並提供了一個簡短的特性列表,以及每一個數據庫的「我將使用它」的解釋。 mongodb

http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis 數據庫


#2樓

我剛纔注意到這個問題很老了。 不過,我認爲如下幾個方面值得補充: 緩存

  • 若是您還不知道如何查詢數據,請使用MongoDB。 服務器

    MongoDB適用於黑客馬拉松,初創公司或每次你不知道如何查詢你插入的數據。 MongoDB不對您的底層架構作任何假設。 雖然MongoDB是無模式和非關係的,但這並不意味着根本沒有模式。 它只是意味着您的架構須要在您的應用程序中定義(例如使用Mongoose)。 除此以外,MongoDB很是適合原型設計或嘗試。 它的性能不是很好,也沒法與Redis相提並論。 數據結構

  • 使用Redis能夠加快現有應用程序的速度。 架構

    Redis能夠輕鬆集成爲LRU緩存 。 將Redis用做獨立的數據庫系統是很是罕見的(有些人更喜歡將其稱爲「鍵值」-store)。 像Craigslist這樣的網站在他們的主數據庫旁邊使用Redis 。 Antirez(Redis的開發人員)證實了使用Lamernews確實能夠將Redis用做獨立的數據庫系統。

  • Redis不會根據您的數據作出任何假設。

    Redis提供了許多有用的數據結構(例如集合,散列,列表),但您必須明肯定義如何存儲數據。 簡而言之,可使用Redis和MongoDB來實現相似的功能。 Redis速度更快,但不適合原型設計。 這是一個一般更喜歡MongoDB的用例。 除此以外,Redis 很是靈活。 它提供的底層數據結構是高性能數據庫系統的構建塊。

何時使用Redis?

  • 高速緩存

    使用MongoDB進行緩存並非頗有意義。 這太慢了。

  • 若是你有足夠的時間考慮你的數據庫設計。

    您不能簡單地將文檔輸入Redis。 您必須考慮要存儲和組織數據的方式。 一個例子是Redis中的哈希。 它們與「傳統的」嵌套對象徹底不一樣,這意味着您必須從新考慮存儲嵌套文檔的方式。 一種解決方案是將散列內的引用存儲到另外一個散列(相似於key:[id of second hash] )。 另外一個想法是將它存儲爲JSON,這對於具備* SQL背景的大多數人來講彷佛是違反直覺的。

  • 若是你須要真正的高性能。

    擊敗Redis提供的性能幾乎是不可能的。 想象一下,您的數據庫與緩存同樣快。 這就是將Redis用做真實數據庫的感受。

  • 若是你不很在意縮放。

    縮放Redis並不像之前那麼難。 例如,您可使用一種代理服務器,以便在多個Redis實例之間分發數據。 主從複製並不複雜,可是你分發鑰匙多個Redis的-實例之間須要在應用程序的網站上完成(例如使用散列函數,模等)。 經過比較縮放MongoDB要簡單得多。

什麼時候使用MongoDB

  • 原型,初創公司,黑客馬拉松

    MongoDB很是適合快速原型設計。 儘管如此,表現還不是那麼好。 還要記住,您極可能必須在應用程序中定義某種模式。

  • 當您須要快速更改架構時。

    由於沒有架構! 在傳統的關係DBMS中更改表格很是昂貴且速度慢。 MongoDB經過不對您的基礎數據作出不少假設來解決這個問題。 儘管如此,它仍是儘量地優化,而不須要您定義模式。

TL; DR - 若是性能很重要而且您願意花時間優化和組織數據,請使用Redis。 - 若是您須要構建原型而沒必要過多擔憂數據庫,請使用MongoDB。

進一步閱讀:


#3樓

Redis的。 假設您已經在php中編寫了一個站點; 不管出於什麼緣由,它變得流行,它超前於它的時間或者有色情內容。 你意識到這個php很是緩慢,「我會失去個人粉絲,由於他們根本不會等待10秒鐘。」 你忽然意識到一個網頁有一個常量的網址(它永遠不會改變,哇),若是你願意的話,它是一個主鍵,而後你會想起內存很快,而磁盤很慢並且php甚至更慢。 :(而後你使用內存和這個你稱之爲「密鑰」的URL來設計存儲機制,而你決定稱之爲「價值」的網頁內容。這就是你所擁有的 - 關鍵和內容。你稱之爲「meme cache」。你喜歡理查德道金斯,由於他很棒。你緩存你的html像松鼠緩存他們的堅果。你不須要重寫你的垃圾PHP代碼。你很高興。而後你看到其餘人已經作到了 - 但你選擇Redis由於另外一個有貓的混亂圖像,有些有f牙。

蒙戈。 你寫過一個網站。 哎呀你寫了不少,用任何語言寫的。 你意識到你花了不少時間來編寫那些臭臭的SQL子句。 你不是dba,可是你在那裏,編寫愚蠢的sql語句......不只僅是一個,而是在各處嚇壞。 「選擇這個,選擇那個」。 但特別要記住煩人的WHERE子句。 lastname等於「thornton」,電影等於「壞聖誕老人」。 Urgh。 你認爲,「爲何那些dbas不作他們的工做並給我一些存儲過程?」 而後你忘記了一些像midname那樣的小字段,而後你必須放棄表格,導出全部10G的大數據並用這個新字段建立另外一個,而後輸入數據 - 在接下來的14天裏,你將繼續10次繼續記住像稱呼,標題的廢話,再加上帶地址的外鍵。 而後你認爲lastname應該是lastName。 天天幾乎換一次。 而後你說darnit。 我必須繼續寫一個網站/系統,不要介意這個數據模型。 因此你谷歌,「我討厭編寫SQL,請不要SQL,讓它中止」可是彈出'nosql'而後你讀了一些東西,它說它只是轉儲沒有任何架構的數據。 你記得上週的慘敗讓更多的桌子和笑容消失了。 而後你選擇mongo,由於像'airbud'這樣的租賃網站的一些你們夥使用它。 甜。 沒有更多的數據模型更改,由於您擁有一個您不斷變化的模型。


#4樓

若是你有足夠的RAM,你應該使用它們。 Redis和MongoDB是以通用工具爲代價的。 這引入了不少開銷。

有人說Redis比Mongo快10倍。 那可能再也不那麼真實了。 MongoDB(若是我沒記錯的話)聲稱只要內存配置相同,就可使用memcache來存儲和緩存文件。

不管如何。 Redis很好,MongoDB很好。 若是您關心子結構並須要聚合,請訪問MongoDB。 若是存儲密鑰和值是您主要關心的所有關於Redis。 (或任何其餘鍵值存儲)。


#5樓

Redis是一個內存數據存儲,能夠將其狀態保存到磁盤 (以便在從新啓動後啓用恢復)。 可是,做爲內存數據存儲意味着數據存儲(在單個節點上)的大小不能超過系統上的總內存空間(物理RAM +交換空間)。 實際上,因爲Redis與系統上的許多其餘進程共享該空間,而且若是它耗盡系統內存空間,它可能會被操做系統殺死,這將遠不如此。

Mongo是一個基於磁盤的數據存儲,當它的工做集適合物理RAM(如全部軟件)時效率最高。 做爲基於磁盤的數據意味着對Mongo數據庫的大小沒有內在限制,可是配置選項,可用磁盤空間和其餘問題可能意味着超過某個限制的數據庫大小可能變得不切實際或效率低下。

Redis和Mongo均可以進行羣集,以實現高可用性,備份和增長數據存儲的整體大小。

相關文章
相關標籤/搜索