Более быстрый способ удаления 2 ТБ данных из одной коллекции (без шардинга) - PullRequest
0 голосов
/ 12 декабря 2018

Мы собрали много данных и в настоящее время решили перенести наши данные из mongodb в озеро данных.Мы собираемся оставить в Монго только некоторую часть наших данных и использовать ее в качестве нашей оперативной базы данных, которая хранит только самые новые наиболее важные данные.У нас есть набор реплик, но мы не используем шардинг.Я подозреваю, что если бы у нас был сегментированный кластер, мы могли бы добиться необходимых результатов гораздо проще, но это была бы разовая операция, поэтому настройка кластера только для одной операции выглядит очень сложным решением (плюс я также подозреваю, что он будет очень долгимоперация по преобразованию такой коллекции в коллекцию sharded, но я могу ошибаться здесь)

Одна из наших коллекций имеет размер 2 ТБ прямо сейчас.Мы хотим удалить старые данные из исходной базы данных как можно быстрее, но похоже, что стандартная операция удаления выполняется очень медленно, даже если мы используем unorderedBulkOperation.

Я нашел несколько предложений, чтобы скопировать данные в другую коллекцию, а затем просто удалить оригинальную коллекцию вместо попытки удалить данные (поэтому перенесите данные, которые мы хотим сохранить, вместо удаления данных, которые мы не хотим сохранять),Я нашел несколько разных способов скопировать часть данных из исходной коллекции в другую коллекцию:

  1. Извлечение данных и вставка их в другую коллекцию по одному.Или извлеките часть данных и вставьте их массово, используя insertMany ().Это выглядит быстрее, чем просто удаление данных, но все же недостаточно быстро.
  2. Используйте оператор $ out с агрегационной структурой для извлечения частей данных.Это очень быстро!Но он извлекает каждую порцию данных в отдельные коллекции и не имеет возможности добавлять данные в текущей версии mongodb.Таким образом, нам нужно будет объединить все экспортированные части данных в одну конечную коллекцию, что снова медленноЯ вижу, что $ out сможет добавлять данные в следующем выпуске mongo (https://jira.mongodb.org/browse/SERVER-12280). Но сейчас нам нужно какое-то решение, и, к сожалению, мы все равно не сможем быстро обновить версию mongo.
  3. mongoexport / mongoimport - экспортирует часть данных в файл json и добавляет в другую коллекцию с помощью импорта. Это также довольно быстро, поэтому выглядит как хороший вариант.

В настоящее время это выглядит как лучшийвыбор для улучшения производительности миграции - это сочетание подходов $ out + mongoexport / mongoimport. Плюс многопоточность для одновременного выполнения нескольких описанных операций.

Но есть ли еще более быстрый вариант, который я мог бы пропустить?

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