【问题标题】:Update all data in MongoDB or replace MongoDB instance更新 MongoDB 中的所有数据或替换 MongoDB 实例
【发布时间】:2017-12-03 09:11:49
【问题描述】:

MongoDB 包含可供客户端应用程序使用的数据。存储在 Google BigQuery (GBQ) 中的原始数据。每天都会有大量新数据添加到 GBQ 中,并且每天一次,MongoDB 中的几乎所有内容都需要根据 GBQ 中的最新数据进行更新。必须删除所有过时(未更新)的记录。

在停机时间接近 0 的情况下处理 MongoDB 更新的正确方法是什么?

  1. 在疯狂的解决方案中:可能我应该有两个 MongoDB 实例,一个正在生产中,另一个正在更新。一旦第二个数据库更新,我将使用更改的配置运行 Google Kubernetes Engine 部署,因此所有客户端都将从以前的数据顺利移动到更新的数据,而不会弄乱部分更新的数据,也不会停机。不过,我从来没有听说过这样的解决方案,所以我不确定这是否是正确的。
  2. 另一个解决方案是在单个 MongoDB 实例下拥有每个集合的两个版本。更新集合后,服务器将切换到该集合。

【问题讨论】:

  • 是否有办法识别哪些数据已过时,哪些未过时?还是说一切都过时了?
  • 客户端是否指向域名?您可以运行两个 mongoDB 实例,然后在更新完成后更新域后面的 ip
  • 只是为了更好地了解上下文:为什么在你的情况下使用 mongodb 而不是常规的 rdbms?

标签: mongodb google-bigquery


【解决方案1】:

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

我曾经在某个时尚网站上做过一些很好的经验,在那里我们抓取数据(使用 scrapinghub)并将它们导入 mongodb(按日期存储的集合)并相应地使用。所以我们的抓取是在清晨(早上 5 点到 6 点)进行的,当我们的编辑/策展人来到办公室时,他们会开始使用当前过时的收藏(当然是通过 Web 界面 :))

【讨论】:

    猜你喜欢
    • 2016-12-24
    • 1970-01-01
    • 2018-05-21
    • 2018-01-21
    • 2017-04-13
    • 2014-06-02
    • 2018-02-14
    • 2022-10-09
    • 1970-01-01
    相关资源
    最近更新 更多