溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

寫給MongoDB開發(fā)者的50條建議Tip7

發(fā)布時(shí)間:2020-06-20 15:47:12 來(lái)源:網(wǎng)絡(luò) 閱讀:794 作者:virusswb 欄目:MongoDB數(shù)據(jù)庫(kù)

本系列文章翻譯自《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)量。

 

  1.   "_id":pageId, 
  2.   "start":time, 
  3.   "visits":{ 
  4.     "minutes":[ 
  5.       [num0,num1,...,num59], 
  6.       [num0,num1,...,num59], 
  7.       [num0,num1,...,num59], 
  8.       [num0,num1,...,num59], 
  9.       [num0,num1,...,num59], 
  10.       [num0,num1,...,num59] 
  11.     ], 
  12.     "hours":[num0,num1,...,num5] 
  13.   } 

 

這么做有一個(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)該是下面的樣子。

 

  1.   "_id":pageId, 
  2.   "start":someTime, 
  3.   "visits":{ 
  4.     "minutes":[ 
  5.       [0,0,...,0], 
  6.       [0,0,...,0],
  7.       [0,0,...,0], 
  8.       [0,0,...,0], 
  9.       [0,0,...,0], 
  10.       [0,0,...,0] 
  11.     ], 
  12.     "hours":[0,0,0,0,0] 
  13.   } 

現(xiàn)在,當(dāng)你增加這些計(jì)數(shù)器的時(shí)候,mongodb不需要為他們現(xiàn)去分配空間。只是更新已經(jīng)插入的文檔的值,這么做速度會(huì)更快。

例如,在剛開始的一個(gè)小時(shí),你只需要這么做。

 

  1. db.page.update({"_id":pageId,"start":thisHour},{"$inc":{"visits.0.0":3}}) 

這種做法也可以擴(kuò)展到集合和數(shù)據(jù)庫(kù)的其他類型數(shù)據(jù),如果你每天需要一個(gè)新的集合,最好預(yù)先創(chuàng)建他們。

 

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI