2017-05-27 78 views
0

我正在做一個關於CMS系統的學校項目,以幫助運營我的學校網站。它使用3數據庫:每天在特定時間自動運行的功能

  • 的MongoDB(主管數據庫,存儲所有信息)
  • Redis的(商店網站的菜單)
  • Elasticsearch(商店帖)

目前,當我插入/編輯/刪除數據,我也插入/編輯/刪除到相關的數據庫。但是我的導師希望我寫一個函數讓系統在特定時間自動同步這三個數據庫之間的數據(用戶可以選擇何時)。

我的服務器使用Node JS來操作,這個要求對我來說是新的,以前從來沒有聽說過。我的新做法是:

  • 添加1個標誌數據庫字段
  • 選擇含有標誌== true的行。
  • 同步數據

但我不知道如何在特定的時間自動上述功能運行。我希望你們能幫助我優化我的新流程並解決同步問題。

謝謝大家!

編輯1:改變標題。

編輯2:我發現這個主題的解決方案:Running a function everyday midnight,有無論如何重新運行此功能,如果同步數據時發生錯誤。事情是這樣的:

function syncDataAtMidNight(){ 
 
var now = new Date(); 
 
    var night = new Date(
 
     now.getFullYear(), 
 
     now.getMonth(), 
 
     now.getDate() + 1, // the next day, ... 
 
     0, 0, 0 // ...at 00:00:00 hours 
 
    ); 
 
    var msToMidnight = night.getTime() - now.getTime(); 
 

 
    setTimeout(function() { 
 
    // is this a correct way to loop, in case of error when sync ??? 
 
     myFunctionSync(err, resp) { 
 
      if(err){ 
 
      myFunctionSync(); 
 
      } else { 
 
      changeFlagToFalse(); 
 
      syncDataAtMidNight(); 
 
      } 
 
     }    
 
    }, msToMidnight);}

+0

在你的node.js程序中,你可以使用'setTimeout()'使某些東西從現在起運行任意數量的ms。獲取當前時間並計算多少毫秒,直到您希望函數運行的時間,然後發出'setTimeout()'調用來調度它。如果這個問題真的只是在將來某個時候運行某個功能,請將問題標題和主體更改爲關於該問題。 – jfriend00

+0

@ jfriend00謝謝你,我編輯了標題併爲此添加了新的解決方案。你能幫我再檢查一次嗎? – Huy

+0

嗯,在這裏問題的工作方式,你可以澄清你的原意,但你不應該改變你的問題到一個新的問題。看來你現在正在問一些關於如果有錯誤再次運行該功能的新東西。這與你第一次問到的完全不同。如果你不斷改變問題的癥結,人們會避免花時間在你的問題上。僅供參考,您首次調用myFunctionSync()的語法不適用於調用函數的合法Javascript。我不知道你在做什麼,因爲你沒有顯示'myFunctionSync()'代碼。 – jfriend00

回答

0

你應該考慮使用cron,他必須要在系統級的顯著優勢,他可以得到代碼錯誤返回,並在必要時大多會啓動/重新開張節點。

相關問題