Каков наилучший способ обновить (или заменить) всю коллекцию баз данных на действующей машине mongodb? - PullRequest
0 голосов
/ 26 октября 2019

Мне ежемесячно дают источник данных, который я анализирую и помещаю в базу данных MongoDB. Каждый месяц некоторые данные будут обновляться, а некоторые новые записи будут добавляться в существующие коллекции. Исходный файл размером в несколько гигабайт. Помимо этих ежемесячных обновлений, данные не изменятся вообще.

В конце концов, эта база данных будет действующей, и я хочу, чтобы, по возможности, не было простоев во время этих ежемесячных обновлений. Каков наилучший способ обновить мою базу данных без простоев?


Этот вопрос в основном именно то, что я спрашиваю, но не для базы данных MongoDB. Принятый ответ - загрузить новую версию базы данных, а затем переименовать новую базу данных, используя имя старой. Однако, согласно этому вопросу , невозможно легко переименовать базу данных MongoDB. Это делает этот подход непригодным для использования.

Интуитивно я попытался бы итеративно «вставлять» всю базу данных, используя уникальный идентификатор «gid» каждого документа (это свойство данных, в отличие от сгенерированного «_id»). MongoDB) в качестве фильтра, но это может быть неэффективным способом работы.

Я использую MongoDB версии 4.2.1

1 Ответ

0 голосов
/ 26 октября 2019

Почему вы думаете, что обновление данных будет означать время простоя?

Похоже, вы не хотите, чтобы ваши пользователи имели доступ к новым данным при средней загрузке.

Если этов этом случае стратегия может состоять в том, чтобы иметь 2 базы данных;живое и постановочное;вместо того, чтобы переименовывать промежуточную базу данных в живую, вы можете просто переименовать строку подключения в клиентских приложениях, которые к ней подключаются.

Также рассмотрите mongodump и mongorestore для копирования баз данных;хотя это может быть медленнее с большими базами данных.

...