您好,登錄后才能下訂單哦!
本系列文章翻譯自《50 Tips and Tricks for MongoDB Developers》,暫時(shí)沒(méi)有找到中文版,反正自己最近也在深入學(xué)習(xí)mongodb,所以正好拿來(lái)翻譯一下。一方面加強(qiáng)自己學(xué)習(xí)的效果,另一方面讓大 家也一起來(lái)體驗(yàn)一下需要我們這些mongodb使用者需要注意的地方。
首先聲明自己的英文水平不是太高,加之有些英文翻譯成中文也找不到合適的詞來(lái)表達(dá),所以在文章中可能會(huì)出現(xiàn)英文原詞,或者說(shuō)有些地方的翻譯會(huì)有些生 硬,也就是說(shuō)會(huì)出現(xiàn)直譯的地方。翻譯該書的主要目的是為大家學(xué)習(xí)探討用的,如果有翻譯不精準(zhǔn)的地方,或者說(shuō)有更加精準(zhǔn)的翻譯,還請(qǐng)大家指出,我會(huì)及時(shí)的更 正的,在此先謝過(guò)各位了。
Tip#7.Pre-populate anything you can
預(yù)先填充你能填充的
如果你知道,在將來(lái),你的文檔中肯定會(huì)需要一些字段,在你插入文檔的時(shí)候就填充它們,而不是在需要它們的時(shí)候在創(chuàng)建,會(huì)更高效。例如,你正在創(chuàng)建一個(gè)站點(diǎn)分析的應(yīng)用,可以查看一天中有每一頁(yè)都有多少用戶訪問(wèn)。你會(huì)有一個(gè)pages collection,每個(gè)document記錄在過(guò)去的6個(gè)小時(shí)中,每分鐘和每小時(shí)的訪問(wèn)量。
- {
- "_id":pageId,
- "start":time,
- "visits":{
- "minutes":[
- [num0,num1,...,num59],
- [num0,num1,...,num59],
- [num0,num1,...,num59],
- [num0,num1,...,num59],
- [num0,num1,...,num59],
- [num0,num1,...,num59]
- ],
- "hours":[num0,num1,...,num5]
- }
- }
這么做有一個(gè)優(yōu)勢(shì),就是我們知道從現(xiàn)在到某一個(gè)時(shí)間點(diǎn)文檔會(huì)是什么樣子。是一個(gè)從現(xiàn)在開始,在接下來(lái)的6個(gè)小時(shí),每分鐘和每小時(shí)的訪問(wèn)量。后面的6個(gè)小時(shí)又會(huì)是一個(gè)新的文檔。
因此,我們需要一個(gè)批量處理的任務(wù),在空閑的時(shí)候,或者是在一天的固定時(shí)間,插入這些模板文檔。插入的模板應(yīng)該是下面的樣子。
- {
- "_id":pageId,
- "start":someTime,
- "visits":{
- "minutes":[
- [0,0,...,0],
- [0,0,...,0],
- [0,0,...,0],
- [0,0,...,0],
- [0,0,...,0],
- [0,0,...,0]
- ],
- "hours":[0,0,0,0,0]
- }
- }
現(xiàn)在,當(dāng)你增加這些計(jì)數(shù)器的時(shí)候,mongodb不需要為他們現(xiàn)去分配空間。只是更新已經(jīng)插入的文檔的值,這么做速度會(huì)更快。
例如,在剛開始的一個(gè)小時(shí),你只需要這么做。
- db.page.update({"_id":pageId,"start":thisHour},{"$inc":{"visits.0.0":3}})
這種做法也可以擴(kuò)展到集合和數(shù)據(jù)庫(kù)的其他類型數(shù)據(jù),如果你每天需要一個(gè)新的集合,最好預(yù)先創(chuàng)建他們。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。