2017-12-03 97 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)進行了剪輯,當我們的編輯/策展人進入辦公室時,他們將開始使用當前的過期集合(當然通過網絡界面:))