創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
巴馬ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為成都創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!這篇文章主要介紹選擇mongodb的原因,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
在使用場景方面,MongoDB非常適合用做以下應(yīng)用程序的主要數(shù)據(jù)存儲——Web應(yīng)用程序、分析與記錄應(yīng)用程序,以及任何要求有中等級別緩存的應(yīng)用程序。此外,由于能方便地存儲無Schema數(shù)據(jù),MongoDB還很適合保存事先無法知曉其數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)。
之前所說的內(nèi)容還不太足以讓人信服,為了證實它們,我們大致了解一下目前市面上的眾多數(shù)據(jù)庫,并和MongoDB做個對比。接下來,我將討論一些特殊的MongoDB使用場景,提供一些生產(chǎn)環(huán)境中的例子。最后,我還會討論一些MongoDB實際使用中的重要注意事項。
MongoDB與其他數(shù)據(jù)庫的對比
市面上的數(shù)據(jù)庫數(shù)量成爆炸式增長,要在它們之間進(jìn)行權(quán)衡是很困難的。幸運的是,它們之中的大多數(shù)數(shù)據(jù)庫都能歸在幾個分類里。本節(jié)中,我會描述簡單及復(fù)雜的鍵值存儲、關(guān)系型數(shù)據(jù)庫和文檔數(shù)據(jù)庫,并對它們做一個比較。
推薦學(xué)習(xí)《python教程》
簡單鍵值存儲
簡單鍵值存儲正如其名,它們基于給定的鍵對值做索引。常見的場景是緩存。舉例來說,假設(shè)您需要緩存一個由應(yīng)用程序呈現(xiàn)的HTML頁面,此處的鍵可能是頁面的URL,值是HTML本身。請注意,對鍵值存儲而言,值就是一個不透明的字節(jié)數(shù)組。不用強(qiáng)加關(guān)系型數(shù)據(jù)庫中的Schema,也沒有任何數(shù)據(jù)類型的概念。這自然限制了鍵值存儲的操作:可以放入一個新值,然后通過鍵將其取出或刪除。擁有如此簡單性的系統(tǒng)通常很快,而且具有可伸縮性。
最著名的簡單鍵值存儲是memcached(發(fā)音是mem-cach-dee)。memcached僅在內(nèi)存里存儲數(shù)據(jù),用持久性來換取速度。它也是分布式的,跨多臺服務(wù)器的memcached節(jié)點能像單個數(shù)據(jù)存儲來使用,這消除了維護(hù)跨服務(wù)器緩存狀態(tài)的復(fù)雜性。
與MongoDB相比,memcached這樣的簡單鍵值存儲通常讀寫會更快。但與MongoDB不同的是,這些系統(tǒng)很少能充當(dāng)主要數(shù)據(jù)存儲。簡單鍵值存儲的最佳用途是附加存儲,既可以作為傳統(tǒng)數(shù)據(jù)庫之上的緩存層,也可以作為任務(wù)隊列之類的短暫服務(wù)的簡單持久層。
復(fù)雜鍵值存儲
可以改進(jìn)簡單鍵值模型來處理復(fù)雜的讀寫Schema或提供更豐富的數(shù)據(jù)模型。如此一來,就有了復(fù)雜鍵值存儲。廣為流傳的論文 Dynamo:Amazon's Highly Available Key-value Store中描述的Amazon Dynamo就是這樣一個例子。Dynamo旨在成為一個健壯的數(shù)據(jù)庫,在網(wǎng)絡(luò)故障、數(shù)據(jù)中心停轉(zhuǎn)及類似情況下仍能工作。這要求系統(tǒng)總是能夠進(jìn)行讀和寫,本質(zhì)上就是要求數(shù)據(jù)能自動跨多個節(jié)點進(jìn)行復(fù)制。如果一個節(jié)點發(fā)生故障,系統(tǒng)的用戶,也許這里是一個使用Amazon購物車的顧客,不會察覺到服務(wù)中斷。當(dāng)系統(tǒng)允許同一份數(shù)據(jù)被寫到多個節(jié)點時,發(fā)生沖突的情況是不可避免的,Dynamo提供了一些解決沖突的方法。與此同時,Dynamo也很容易伸縮。因為沒有主節(jié)點——所有節(jié)點都是對等的,很容易從整體上理解系統(tǒng),能方便地添加節(jié)點。盡管Dynamo是一個私有系統(tǒng),但其構(gòu)建理念啟發(fā)了很多NoSQL系統(tǒng),包括Cassandra、Project Voldemort和Riak。
看看是誰開發(fā)了這些復(fù)雜鍵值存儲,看看實踐中它們的使用情況如何,您就能知道它們的優(yōu)點了。以Cassandra為例,它實現(xiàn)了很多Dynamo的伸縮屬性,同時還提供了與Google BigTable類似的面向列的數(shù)據(jù)模型。Cassandra是一款開源的數(shù)據(jù)存儲,是Facebook為其收件箱搜索功能而開發(fā)的。該系統(tǒng)可以水平擴(kuò)展,索引60TB以上的收件箱數(shù)據(jù),允許在收件箱中對關(guān)鍵字和收件人做檢索。數(shù)據(jù)是根據(jù)用戶ID做索引的,每條記錄由一個用于關(guān)鍵字檢索的搜索項數(shù)組和一個用于收件人檢索的收件人ID數(shù)組構(gòu)成。
這些復(fù)雜鍵值存儲是由Amazon、Google和Facebook這樣的大型互聯(lián)網(wǎng)公司開發(fā)的,用來管理系統(tǒng)的多個部分,擁有非常大的數(shù)據(jù)量。換言之,復(fù)雜鍵值存儲管理了一個相對自包含的域,它對有效存儲和可用性有一定要求。由于采用了無主節(jié)點的架構(gòu),這些系統(tǒng)能輕松地通過添加節(jié)點進(jìn)行擴(kuò)展。它們都選擇了最終一致性,也就是說讀請求不必返回最后一次寫的內(nèi)容。用戶用較弱的一致性所換得的是在某一節(jié)點失效時仍能寫入的能力。
這與MongoDB正好相反,它提供了強(qiáng)一致性、(每個分片)一個主節(jié)點、更豐富的數(shù)據(jù)模型,還有二級索引,最后兩項特性總是一起出現(xiàn)的。如果一個系統(tǒng)允許建模多個領(lǐng)域?qū)ο螅纾瑯?gòu)建完整Web應(yīng)用程序時就會有此要求,那么查詢就需要跨整個數(shù)據(jù)模型,這時就要用到二級索引了。
因為有豐富的數(shù)據(jù)模型,可以考慮把MongoDB作為更通用的大型、可伸縮Web應(yīng)用程序的解決方案。MongoDB的伸縮架構(gòu)有時也會受到爭議,因為它并非源自Dynamo。但MongoDB針對不同領(lǐng)域有不同的伸縮解決方案。MongoDB的自動分片受到了Yahoo! PNUTS數(shù)據(jù)存儲和Google BigTable的啟發(fā)。讀過這些數(shù)據(jù)存儲的白皮書的人會發(fā)現(xiàn),MongoDB實現(xiàn)伸縮的方法已經(jīng)被實現(xiàn)了,而且還很成功。
關(guān)系型數(shù)據(jù)庫
本章中已經(jīng)介紹了不少關(guān)系型數(shù)據(jù)庫的內(nèi)容,簡單起見,我只討論RDBMS與MongoDB的相同點和不同點。盡管MySQL使用固定Schema的數(shù)據(jù)表,MongoDB使用無Schema的文檔,但兩者都能表示豐富的數(shù)據(jù)模型。MySQL和MongoDB都支持B樹索引,那些適用于MySQL索引的經(jīng)驗也同樣適用于MongoDB。MySQL支持關(guān)聯(lián)和事務(wù),因此,如果您必須使用SQL或者要求有事務(wù),那么只能選擇MySQL或其他RDBMS。在不需要事務(wù)的情況下,MongoDB的文檔模型通常也足夠表示對象了。MongoDB中對單獨文檔的更新也是原子的,這提供了傳統(tǒng)事務(wù)的一個子集。MongoDB和MySQL都支持復(fù)制。就可伸縮性而言,MongoDB設(shè)計成能水平擴(kuò)展的,能自動分片并處理故障轉(zhuǎn)移。MySQL上的分片都需要手動管理,有一定的復(fù)雜性,更常見的是垂直擴(kuò)展的MySQL系統(tǒng)。
文檔數(shù)據(jù)庫
自稱為文檔數(shù)據(jù)庫的產(chǎn)品還不多,在本書編寫時,除了MongoDB之外,唯一的著名文檔型數(shù)據(jù)庫就是Apache CouchDB。盡管CouchDB的數(shù)據(jù)是使用JSON格式的純文本存儲的,而MongoDB使用的是BSON二進(jìn)制格式,但兩者的文檔模型是相似的。與MongoDB一樣,CouchDB也支持二級索引,不同之處是CouchDB中的索引是通過編寫MapReduce函數(shù)來定義的,這比MySQL和MongoDB使用的聲明式語法更復(fù)雜一些。兩者伸縮的方式也有所不同,CouchDB不會把數(shù)據(jù)分散到多臺服務(wù)器上,每個CouchDB節(jié)點都是其他節(jié)點的完整副本。
使用場景和生產(chǎn)部署
老實說,您不會僅根據(jù)數(shù)據(jù)庫的特性就做出選擇,您需要知道使用它的真實成功案例。這里,我提供一些廣義上的MongoDB使用場景,以及一些生產(chǎn)環(huán)境中的范例。
Web應(yīng)用程序
MongoDB很適合作為Web應(yīng)用程序的主要數(shù)據(jù)存儲。就算是一個簡單的Web應(yīng)用程序也會有很多數(shù)據(jù)模型,用來管理用戶、會話、應(yīng)用特定的數(shù)據(jù)、上傳和權(quán)限,更不用說完整領(lǐng)域了。正如它們能和關(guān)系型數(shù)據(jù)庫的扁平式方法對齊一樣,它們也能獲益于MongoDB的集合與文檔模型。因為文檔能表示豐富的數(shù)據(jù)結(jié)構(gòu),建模相同數(shù)據(jù)所需的集合數(shù)量通常會比使用完全正規(guī)化關(guān)系型模型的數(shù)據(jù)表數(shù)量要少。此外,動態(tài)查詢和二級索引能讓您輕松地實現(xiàn)SQL開發(fā)者所熟悉的大多數(shù)查詢。最后,作為一個成長中的Web應(yīng)用程序,MongoDB提供了清晰的擴(kuò)展路線。
在生產(chǎn)環(huán)境中,MongoDB已經(jīng)證明它能管理應(yīng)用的方方面面,從主要數(shù)據(jù)領(lǐng)域到附加數(shù)據(jù)存儲,比如日志和實時分析。這里的案例來自The Business Insider(TBE),它從2008年1月起使用MongoDB作為主要數(shù)據(jù)存儲。雖然TBE是一個新聞網(wǎng)站,但它流量很大,每天有超過一百萬獨立頁面訪問(page view)。這個案例中有意思的是除了處理站點的主要內(nèi)容(文章、評論、用戶等等),MongoDB還處理并存儲實時分析數(shù)據(jù)。這些分析被TBE用于生成動態(tài)熱點地圖,標(biāo)明不同新聞故事的點擊率。該站目前還沒有太多的數(shù)據(jù)需要分片,但它有使用副本集來保證自動故障轉(zhuǎn)移。
敏捷開發(fā)
無論如何看待敏捷開發(fā)運動,您都很難否認(rèn)大家對于快速構(gòu)建應(yīng)用程序的渴望。不少開發(fā)團(tuán)隊,包括Shutterfly和紐約時代的團(tuán)隊,都部分選擇了MongoDB,因為相比關(guān)系型數(shù)據(jù)庫,使用MongoDB他們能更快地開發(fā)應(yīng)用程序。一個明顯的原因是MongoDB沒有固定的Schema,所有花在提交、溝通和實施Schema變更的時間都省下來了。
除此之外,不再需要花時間把數(shù)據(jù)的關(guān)系型表述硬塞進(jìn)面向?qū)ο蟮臄?shù)據(jù)模型里去了,也不用處理ORM生成的SQL的奇怪行為,或者對它做優(yōu)化了。如此一來,MongoDB為項目帶來了更短的開發(fā)周期和敏捷的、中型大小的團(tuán)隊。
分析和日志
我之前已經(jīng)暗示過MongoDB適用于分析和日志,將MongoDB用于這些方面的應(yīng)用程序數(shù)量增長得越來越快。通常,發(fā)展成熟的公司都會選擇用于分析的特殊應(yīng)用作為切入點,進(jìn)入MongoDB的世界。這些公司包括GitHub、Disqus、Justin.tv和Gilt Groupe,還有其他公司就不再列舉了。
MongoDB與分析的關(guān)聯(lián)源自于它的速度和兩個關(guān)鍵特性:目標(biāo)原子更新和固定集合(capped collection)。原子更新讓客戶端能高效地增加計數(shù)器,將值放入數(shù)組。固定集合,常被用于日志,特點是分配的大小是固定的,能實現(xiàn)自動過期。相比文件系統(tǒng),將日志數(shù)據(jù)保存在數(shù)據(jù)庫里更易組織,而且能提供更強(qiáng)大的查詢能力。現(xiàn)在,拋開grep或自定義日志檢索工具,用戶可以使用他們熟悉并喜歡的MongoDB查詢語言來查看日志輸出。
緩存
這是一種數(shù)據(jù)模型,它能更完整地表示對象,結(jié)合了更快的平均查詢速度,經(jīng)常讓MongoDB介于傳統(tǒng)的MySQL與memcached之間。例如之前提到的TBE,它不使用memcached,直接通過MongoDB來響應(yīng)頁面請求。
以上是選擇mongodb的原因的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
本文名稱:選擇mongodb的原因-創(chuàng)新互聯(lián)
文章URL:http://m.newbst.com/article16/dopdgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、網(wǎng)站制作、網(wǎng)站收錄、關(guān)鍵詞優(yōu)化、微信小程序、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)