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