天掌握mongodbx版實(shí)戰(zhàn)驗(yàn)_第1頁
天掌握mongodbx版實(shí)戰(zhàn)驗(yàn)_第2頁
天掌握mongodbx版實(shí)戰(zhàn)驗(yàn)_第3頁
天掌握mongodbx版實(shí)戰(zhàn)驗(yàn)_第4頁
天掌握mongodbx版實(shí)戰(zhàn)驗(yàn)_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

——網(wǎng)鳥老兵系列課程之10天掌握MongoDB第十天:分享實(shí)戰(zhàn)經(jīng)驗(yàn)網(wǎng)鳥出擊,必屬精品!微博:QQ:120468681(ymindchan)Q群:47700865(刺客巔峰)陳顏銘出品索引本課沒有目錄,想到啥就寫啥!最近趕上團(tuán)隊(duì)項(xiàng)目緊張,因此第十課的內(nèi)容以文字描述為主——陳顏銘NoSQL并不是No-SQL,而是指NotOnlySQL。對(duì)NoSQL的理解NoSQL的出現(xiàn)是為了彌補(bǔ)SQL數(shù)據(jù)庫因?yàn)槭聞?wù)等機(jī)制帶來的對(duì)海量數(shù)據(jù)、高并發(fā)請(qǐng)求的處理的性能上的欠缺。NoSQL不是為了替代SQL而出現(xiàn)的,它是一種替補(bǔ)方案,而不是任何項(xiàng)目的首選。絕大多數(shù)的NoSQL產(chǎn)品都是基于大內(nèi)存和高性能隨機(jī)讀寫的(比如具有更高性能的固態(tài)硬盤陣列),一般的小型企業(yè)在選擇NoSQL時(shí)一定要慎重!不要為了NoSQL而NoSQL,可能會(huì)導(dǎo)致花了冤枉錢又耽擱了項(xiàng)目進(jìn)程。NoSQL不是萬能的,但在大型項(xiàng)目中,你往往需要它!基于BSON,兼容JSON有廣泛的驅(qū)動(dòng)支持高性能、開源、面向文檔全文索引支持自動(dòng)復(fù)制分片內(nèi)置分布式文件系統(tǒng)內(nèi)置MapReduce支持……為什么是MongoDB?請(qǐng)閱讀:不要被老陳騙了,我只是想羅列一下MongoDB的優(yōu)點(diǎn),如果想了解其他NoSQL產(chǎn)品,不妨看看下面提供的網(wǎng)頁。在SQL時(shí)代,我們可以任意設(shè)計(jì)自己的表結(jié)構(gòu),僅僅需要注意數(shù)據(jù)類型的選擇,只是無法直接使用樹形設(shè)計(jì)而已。在MongoDB就沒這么幸運(yùn)了,MongoDB內(nèi)置的查詢機(jī)制非常有限,它無法讓“你的原來的設(shè)計(jì)”那么輕松的就能遷移過來。其實(shí),MongoDB這樣的“不給力”,都是“故意”的!通過核心算法的約束,強(qiáng)迫開發(fā)者大量的使用冗余數(shù)據(jù)來提升計(jì)算效率。這個(gè)做法,好!也不好!好的是,的確可以解決很多問題,不好的是,因此我們需要改變之前一貫的思路,甚至是之前認(rèn)為非常一般般的做法,還會(huì)給維護(hù)帶來很多“看起來不必要”的麻煩。MongoDB宣稱自己占用的處理器資源是很低的——其實(shí)是因?yàn)樗募軜?gòu)就直接繞開了很多運(yùn)算?。?!在這里我沒有太多想說的,總結(jié)起來就一句話——不要吝嗇存儲(chǔ)空間,要將冗余數(shù)據(jù)的優(yōu)點(diǎn)發(fā)揮到極致!文檔結(jié)構(gòu)設(shè)計(jì)傳統(tǒng)的用于優(yōu)化SQL的技巧,在MongoDB中同樣適用;不要為所有鍵都創(chuàng)建索引,也不要一個(gè)索引也不用;如果需要,請(qǐng)優(yōu)先考慮復(fù)合索引,但請(qǐng)注意鍵的順序;如果發(fā)現(xiàn)即使創(chuàng)建索引也無法很有效的提升,此時(shí)應(yīng)該考慮將數(shù)據(jù)分片;設(shè)計(jì)查詢時(shí),應(yīng)當(dāng)將能夠過濾掉大量記錄的條件放在前面,除非這樣的改動(dòng)影響了業(yè)務(wù)需求。無論什么業(yè)務(wù),請(qǐng)盡量避免在數(shù)據(jù)庫端處理各種排序,如果可以,請(qǐng)盡量減少這樣的設(shè)計(jì),以提升數(shù)據(jù)庫服務(wù)器的吞吐量。老陳的經(jīng)驗(yàn)是:用戶其實(shí)并不討厭多點(diǎn)幾次鼠標(biāo),討厭的是點(diǎn)了N多次鼠標(biāo)之后,找不到合適的內(nèi)容。試想一下,為什么baidu不提供用戶主動(dòng)排序的功能?此外,老陳的酒店搜索算法也去掉了用戶指定排序方式的支持——因?yàn)槲覀儗?duì)搜索結(jié)果非常自信,我們相信用戶已經(jīng)找到了自己期望的酒店(參考:)!索引及查詢優(yōu)化復(fù)制是指將數(shù)據(jù)完完整整的復(fù)制到其他MongoDB實(shí)例上;分片是將一塊數(shù)據(jù)很多小塊并分發(fā)到不同的集合或MongoDB實(shí)例;副本集帶有故障轉(zhuǎn)移的特性而實(shí)際上,在生產(chǎn)環(huán)境中,我們應(yīng)當(dāng)將如上三個(gè)概念混合使用,并發(fā)揮到極致。數(shù)據(jù)安全、運(yùn)算效率以及負(fù)載分流、故障轉(zhuǎn)移等等,每一個(gè)特性都需要做的很強(qiáng)壯!還記得前面說過的嗎,NoSQL不是誰都可以玩的,也不是誰都可以玩好的!一個(gè)強(qiáng)壯的MongoDB集群可能需要至少十幾臺(tái)服務(wù)器,光硬件就是不小的投入!關(guān)于數(shù)據(jù)安全——不要迷信任何設(shè)備,應(yīng)當(dāng)經(jīng)常備份重要的業(yè)務(wù)數(shù)據(jù)。是的,使用復(fù)制可以對(duì)MongoDB的數(shù)據(jù)執(zhí)行熱備份。而不需要停掉主數(shù)據(jù)庫引擎。復(fù)制分片及副本集盡量少用嵌套文檔,它會(huì)讓你的數(shù)據(jù)庫膨脹的非???,且不利于擴(kuò)展;當(dāng)然,我不是說不要用,如果沒有對(duì)子文檔的深層查詢、排序,或者根本就是記錄一下而已,這種情況用子文檔是最爽不過了!MongoDB不適合存儲(chǔ)高精度的數(shù)字,比如你需要精度非常高的財(cái)務(wù)數(shù)據(jù)存儲(chǔ),此時(shí)建議使用其他持久化方案,或者你干脆就存成字符串或者創(chuàng)建一個(gè)字符串格式的副本進(jìn)行存儲(chǔ)。MongoDB沒有內(nèi)聯(lián)查詢機(jī)制,全靠手工外鍵;MongoDB沒有自增標(biāo)識(shí),未來的規(guī)劃中也沒有跡象表明要支持,實(shí)際上,這是MongoDB故意的!我們建議使用隨機(jī)標(biāo)識(shí),而不是遞增標(biāo)識(shí)。標(biāo)識(shí),讀作biaozhi4,而不是biaoshi2,記好了哈!其他原本,第十課是打算給大家配上一個(gè)實(shí)例項(xiàng)目的,但時(shí)間上與公司項(xiàng)目沖突,因此不得不草草了之。如果本系列PPT對(duì)你有幫

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論