2017-04-01 71 views
0

我正在寫一個快速應用程序,將數據從我的視圖推送到數據庫。但大部分數據都映射到數據庫表中的其他數據。在服務器端緩存選擇查詢數據

例如,是選擇學生姓名下降向下,一旦你通過自己的名字選擇學生,跌幅低於下跌 - 將會證明他被允許用於所有角色。

所以我下面的

app.post('\action1', function(req,res){ 
    function querySomething(){ 
    var defered = Q.defer(); 
     connection.query(some_select_query,defered.makeNodeResolver()); 
     return defered.promise; 
    } 

    function querySomethingElse(){ 
    var defered = Q.defer(); 
     connection.query(some_other_select_query,defered.makeNodeResolver()); 
     return defered.promise; 
    } 

    Q.all([querySomething(), querySomethingElse()]).then((results,err) => { 
     connection.release() 
     if(results){ 
      res.render('some_view.ejs', { 
      result1:results[0][0], 
      result2:results[1][0] 
      }); 
     } 
     else{ 
     res.render('error.ejs',{}); 
     } 
    }) 
}) 

現在的問題這種模式是我必須遵循選擇從多個表什麼的這種模式,通過所有這些功能的許諾,而當結果是傳遞回去,把所有這些結果對象的視圖轉到我的視圖中 - 這樣我就可以在我的視圖中使用它們 - 作爲相互依賴的下拉方式。

有時我必須重複多次寫這個。

做這樣的選擇查詢將是性能密集型,尤其是如果所有視圖都使用相同查詢的結果。

有什麼辦法,我可以建立在我的Express服務器端代碼和查詢緩存的數據存儲,而不是實際的數據庫?

如果有插入或更新 - 我將刷新這個店,只是做一個新的選擇*那一次。

什麼庫在快遞上面會幫我做到這一點?

mysql-cache是​​否做同樣的事情?我還使用createPool使用連接池。

如何做到這一點 - 或者我只是恢復到使用大MVC的像船帆重寫我的應用程序?

回答

1

您可以嘗試apiCache npm模塊。

有時候,我不得不這樣多次重新寫。

根據業務需要,您可能要分別處理每個用例這種情況下不緩存處理。

特別是如果所有的觀點都使用相同的查詢結果做一個選擇查詢像這將是性能密集型。

這是需要server-side緩存的一個典型的例子。