創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),東安企業(yè)網(wǎng)站建設(shè),東安品牌網(wǎng)站建設(shè),網(wǎng)站定制,東安網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,東安網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。小編給大家分享一下redis和mongodb應(yīng)該選擇哪一個(gè),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Redis
Redis是一個(gè)開源的使用ANSI C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value非關(guān)系型數(shù)據(jù)庫(kù),并提供多種語言的API。redis是一個(gè)key-value存儲(chǔ)系統(tǒng)。Redis是非關(guān)系型數(shù)據(jù)庫(kù)的一種,經(jīng)常用作緩存。
和Memcached類似,它支持存儲(chǔ)的value類型相對(duì)更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數(shù)據(jù)類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎(chǔ)上,redis支持各種不同方式的排序。
與memcached一樣,為了保證效率,數(shù)據(jù)都是緩存在內(nèi)存中。區(qū)別的是redis會(huì)周期性的把更新的數(shù)據(jù)寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎(chǔ)上實(shí)現(xiàn)了master-slave(主從)同步。
Redis有以下的優(yōu)點(diǎn):
1.支持多種數(shù)據(jù)結(jié)構(gòu),如 string(字符串)、 list(雙向鏈表)、dict(hash表)、set(集合)、zset(排序set)、hyperloglog(基數(shù)估算)
2.支持持久化操作,可以進(jìn)行aof及rdb數(shù)據(jù)持久化到磁盤,從而進(jìn)行數(shù)據(jù)備份或數(shù)據(jù)恢復(fù)等操作,較好的防止數(shù)據(jù)丟失的手段。
3.支持通過Replication進(jìn)行數(shù)據(jù)復(fù)制,通過master-slave機(jī)制,可以實(shí)時(shí)進(jìn)行數(shù)據(jù)的同步復(fù)制,支持多級(jí)復(fù)制和增量復(fù)制,master-slave機(jī)制是Redis進(jìn)行HA的重要手段。
單線程請(qǐng)求,所有命令串行執(zhí)行,并發(fā)情況下不需要考慮數(shù)據(jù)一致性問題。
4.支持pub/sub消息訂閱機(jī)制,可以用來進(jìn)行消息訂閱與通知。
5.支持簡(jiǎn)單的事務(wù)需求,但業(yè)界使用場(chǎng)景很少,并不成熟。
Redis的缺點(diǎn):
1.Redis只能使用單線程,性能受限于CPU性能,故單實(shí)例CPU最高才可能達(dá)到5-6wQPS每秒(取決于數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)大小以及服務(wù)器硬件性能,日常環(huán)境中QPS高峰大約在1-2w左右)。
2.支持簡(jiǎn)單的事務(wù)需求,但業(yè)界使用場(chǎng)景很少,并不成熟,既是優(yōu)點(diǎn)也是缺點(diǎn)。
3.Redis在string類型上會(huì)消耗較多內(nèi)存,可以使用dict(hash表)壓縮存儲(chǔ)以降低內(nèi)存耗用。
4.Mc和Redis都是Key-Value類型,不適合在不同數(shù)據(jù)集之間建立關(guān)系,也不適合進(jìn)行查詢搜索。比如redis的keys pattern這種匹配操作,對(duì)redis的性能是災(zāi)難。
MongoDB
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。先解釋一下文檔的數(shù)據(jù)庫(kù),即可以存放xml、json、bson類型系那個(gè)的數(shù)據(jù)。同時(shí)MongoDB是由C++語言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。
它支持的數(shù)據(jù)結(jié)構(gòu)非常松散,是類似json的bson格式,因此可以存儲(chǔ)比較復(fù)雜的數(shù)據(jù)類型。Mongo大的特點(diǎn)是它支持的查詢語言非常強(qiáng)大,其語法有點(diǎn)類似于面向?qū)ο蟮牟樵冋Z言,幾乎可以實(shí)現(xiàn)類似關(guān)系數(shù)據(jù)庫(kù)單表查詢的絕大部分功能,而且還支持對(duì)數(shù)據(jù)建立索引。
mongodb與mysql不同,mysql的每一次更新操作都會(huì)直接寫入硬盤,但是mongo不會(huì),做為內(nèi)存型數(shù)據(jù)庫(kù),數(shù)據(jù)操作會(huì)先寫入內(nèi)存,然后再會(huì)持久化到硬盤中去 ,但MongoDB采用的預(yù)分配空間的方式來防止文件碎片,所以MongoDB的數(shù)據(jù)文件很大。
MongoDB的特點(diǎn)是:
(1)面向文檔;
(2)高性能;
(3)高可用;
(4)易擴(kuò)展;
(5)豐富的查詢語言。
Redis和MongoDB的區(qū)別
從以下幾個(gè)維度,對(duì)redis、mongoDB 做了對(duì)比:
1、性能
都比較高,性能對(duì)我們來說應(yīng)該都不是瓶頸
總體來講,TPS方面redis要大于mongodb
2、操作的便利性
redis豐富一些,數(shù)據(jù)操作方面,redis更好一些,較少的網(wǎng)絡(luò)IO次數(shù)
mongodb支持豐富的數(shù)據(jù)表達(dá),索引,最類似關(guān)系型數(shù)據(jù)庫(kù),支持的查詢語言非常豐富
3、內(nèi)存空間的大小和數(shù)據(jù)量的大小
redis在2.0版本后增加了自己的VM特性,突破物理內(nèi)存的限制;可以對(duì)key value設(shè)置過期時(shí)間(類似memcache)
mongoDB適合大數(shù)據(jù)量的存儲(chǔ),依賴操作系統(tǒng)VM做內(nèi)存管理,吃內(nèi)存也比較厲害,服務(wù)不要和別的服務(wù)在一起
4、可用性(單點(diǎn)問題)
對(duì)于單點(diǎn)問題,
redis,依賴客戶端來實(shí)現(xiàn)分布式讀寫;主從復(fù)制時(shí),每次從節(jié)點(diǎn)重新連接主節(jié)點(diǎn)都要依賴整個(gè)快照,無增量復(fù)制,因性能和效率問題,所以單點(diǎn)問題比較復(fù)雜;不支持自動(dòng)sharding,需要依賴程序設(shè)定一致hash 機(jī)制。
一種替代方案是,不用redis本身的復(fù)制機(jī)制,采用自己做主動(dòng)復(fù)制(多份存儲(chǔ)),或者改成增量復(fù)制的方式(需要自己實(shí)現(xiàn)),一致性問題和性能的權(quán)衡
mongoDB支持master-slave,replicaset(內(nèi)部采用paxos選舉算法,自動(dòng)故障恢復(fù)),auto sharding機(jī)制,對(duì)客戶端屏蔽了故障轉(zhuǎn)移和切分機(jī)制。
5、可靠性(持久化)
對(duì)于數(shù)據(jù)持久化和數(shù)據(jù)恢復(fù),
redis支持(快照、AOF):依賴快照進(jìn)行持久化,aof增強(qiáng)了可靠性的同時(shí),對(duì)性能有所影響
MongoDB從1.8版本開始采用binlog方式支持持久化的可靠性
6、數(shù)據(jù)一致性(事務(wù)支持)
redis事務(wù)支持比較弱,只能保證事務(wù)中的每個(gè)操作連續(xù)執(zhí)行
mongoDB不支持事務(wù)
7、數(shù)據(jù)分析
mongoDB內(nèi)置了數(shù)據(jù)分析的功能(mapreduce),其他不支持
8、應(yīng)用場(chǎng)景
redis:數(shù)據(jù)量較小的更性能操作和運(yùn)算上
MongoDB:主要解決海量數(shù)據(jù)的訪問效率問題
以上是redis和mongodb應(yīng)該選擇哪一個(gè)的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!