2017-12-03 201 views
0

MongoDB包含准备好用于客户端应用程序的数据。原始数据存储在Google BigQuery(GBQ)中。每天都有大量新数据被添加到GBQ中,并且每天一次几乎所有MongoDB中的数据都需要根据GBQ中的最新数据进行更新。所有过期的(未更新的)记录都必须删除。更新MongoDB中的所有数据或替换MongoDB实例

什么是正确的方式来处理MongoDB更新接近0宕机?

  1. 其中疯狂的解决方案:可能是我应该有两个MongoDB实例,一个在生产,另一个正在更新。一旦更新了第二个数据库,我将运行带有更改配置的Google Kubernetes Engine部署,这样所有客户端将从以前的数据平滑地移动到更新的数据,而不会搞乱部分更新的数据并且不会停机。虽然,我从来没有听说过这样的解决方案,所以我不确定这是否是正确的。
  2. 另一种解决方案是在MongoDB的单个实例下有两个版本的每个集合。收集更新后,服务器切换到该集合。
+0

有没有办法识别哪些数据已过时,哪些不是?或者在一天结束时一切都过时了? –

+0

客户指向一个域名吗?你可以运行两个mongoDB实例,然后在更新完成后更新域后面的ip –

+0

只是为了更好地了解上下文:为什么在你的情况下使用mongodb而不是常规rdbms? – ffeast

回答

0

第二种解决方案似乎是一个不错的选择,如果知道更新的触发器,则可以通过创建新集合(按日期或唯一序列命名)来最小化停机时间并相应地更新您的代码。

我有一些很好的经验,为时尚网站做了这些,我们在那里抓取数据(使用scrapinghub),并将它们导入到mongodb(按日期存储的集合)并据此使用。所以我们在早上凌晨(5-6AM)进行了剪辑,当我们的编辑/策展人进入办公室时,他们将开始使用当前的过期集合(当然通过网络界面:))