2014-03-31 27 views
0

請原諒我。數據存儲到對象和更新,每20分鐘

我節點應用程序插入記錄到的MongoDB每隔20分鐘。

這似乎不合邏輯每一個用戶訪問該頁面時查詢數據庫,因爲數據庫是20分鐘的時間段相同的(直到我插入新記錄,每20分鐘)。

我想我可以在查詢結果存儲在一個對象,或什麼的,並更新此對象,每20分鐘(我每次插入新記錄時,這是每20分鐘發車的功能)。

我該怎麼做呢?我需要這是一個全局變量嗎?

這是一個好的或壞的想法,爲什麼?

+3

可能是一個壞主意。 MongoDB已經緩存了最近查詢過的數據 - 除非你有大量的頁面,只需重新查詢並且不用擔心。 –

回答

1

如果你的查詢索引和/或速度快,命中數據庫可能是要走的路。另一個選擇是有一個緩存層。如果你在原始node.js中這樣做,你會爲自己購買很多複雜性(和可能的性能問題),所以我會遠離它。如果你在另一個服務(redis,memcached)中做過,除非查詢複雜或緩慢,否則你可能看不到很多性能增益。如果查詢很複雜,可以每20分鐘重新生成一次結果,並將其保存在mongo中的某個地方,然後從中運行查詢。例如:

setInterval(regen_stats, 20 * 60 * 1000) 

的底線是,數據庫是爲了進行查詢,所以你不必開始服用的東西遠離他們,直到它停止執行(通常是由於規模或查詢的複雜性)

+0

因此,要確保我們都在同一頁面上。 你是說最好是查詢100次數據庫100次頁面瀏覽,而不是查詢他的數據庫1次,並將數據放入某種緩存的對象或什麼?那麼對於其餘的99個頁面視圖,只需提供我已經存在的對象中的數據? – Joel

+0

如果你只有一個對象,不,但是假設你有n,在n的某個值處,你會開始遇到內存問題。您還將擁有緩存構建和緩存失效複雜性。緩存問題不是速度,而是複雜性。 –

+0

同意。緩存很容易,但選擇何時失效變得越來越複雜。 – ndugger