2015-03-13 53 views
0

以下是我正在處理的問題。通過節點服務器上的多個API請求維護數據

客戶端需要使用API​​輪詢節點服務器以查找某些數據。爲了讓節點服務器響應,它需要一個數據集(從DB中讀取)。我想避免在每次調查中讀取數據庫。如何維護多個民意調查中的數據集?

如果這是可能的話,它會對服務器性能產生什麼影響。

回答

0

db查詢減少總是一個複雜的問題。我的解決方案是使數據庫查詢承諾,並緩存它,直到它過期。

例如:

var cache = {}; 
var cachedQuery = function(id) { 
    if(id in cache) return cache[id]; 

    return cache[id] = new Promise(function(resolve, reject) { 
    db.query('select * from test where id=?', id, function(err, rows) { 
     delete cache[id]; 
     if(err) reject(err); 
     else resolve(rows); 
    } 
    }); 
} 

假設你在共享相同的請求ID的同時100+查詢,這些查詢將共享同一個數據庫的請求。請求在第一個查詢到來時建立,當查詢完成時所有查詢都會返回相同的結果。

對於更通用的用法,可以使用lru-cache來存儲創建的promise,並給它一個expriation時間。

0

您可以使用內存中緩存。這個想法是,在訪問數據庫之前,請檢查緩存中是否存在請求的值。如果是 - 服務它。如果沒有 - 從數據庫中提取,保存並緩存並返回。

從內存中提供服務是您獲得最快速度。在那裏有節點的現有解決方案,如node-cache

相關問題