2017-05-27 177 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,他必须要在系统级的显著优势,他可以得到代码错误返回,并在必要时大多会启动/重新开张节点。

相关问题