2016-05-04 2 views
1

У меня есть коллекция (и) монго с 2,5 миллионами данных и может вырасти до 3 миллионов. Я использую весеннюю партию и пытаюсь скопировать эту коллекцию в другую коллекцию. Подходы я использовал следующие:Копирование коллекции mongo с огромными данными в другую коллекцию?

  • Внутри Тасклет, я создал объект ProcessBuilder и называется скрипт, который выполняет запрос Монго. Содержание скрипта выглядит следующим образом:

    > mongo $serverURL/$dbName js-file-to-execute.js 
    
    // js file contains copy command (db.collection.copyto('newCollection')) 
    

Для меньшего объема данных (< 200 к) он работает нормально, но за 2 миллиона данных он повесит сервер Монго и задание получило неудавшийся с розеткой Exception

  • Используется шаблон Монго и выполнен запрос

dbMongoTemplate.getDb().getCollection("collection").aggregate(Arrays.asList((DBObject) new BasicDBObject("$out","newCollection")));

Это выполняет Монго агрегатных запросов db.collection.aggregate({$out : "newCollection"})

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

Просьба предложить эффективный способ копирования данных?

+0

Какую версию и хранения двигателя вы используете? Какова структура кластера MongoDB: автономный, набор реплик, очерченный? Вы ищете самое быстрое решение (настенные часы), использует наименее дополнительные ресурсы (диск и/или память) или самое низкое влияние на сервер (например, не вешайте сервер). –

+0

Я использую ** mongodb 2.6 ** и mongoDB кластер ** автономный **. Я бы предпочел балансировочное решение, которое использует значительное количество времени со средним воздействием на сервер. –

+0

Помог ли совет profesor79 u? Im в той же ситуации –

ответ

1

Чтобы скопировать эту коллекцию я sugest с помощью mongodump/mongoexport

mongodump --db Databasename --collection CollectionName --out каталога путь

затем скопировать каталог directory-path, а затем восстановить на целевой машины с использованием

mongorestore --db databaseName - коллекция коллекцийName directory-path

0
//Fastest way to copy a Collection in MongoDB 
db.getCollection('OriginalCollection').aggregate([ { $out: "ClonedCollection" } ]); 

Эта команда скопирована коллекцию из 2 миллионов записей в 2-3 минут.

https://gist.github.com/tejzpr/ff37324a8c26d13fef08c318278c0718

+0

Привет, мне нужно скопировать коллекцию A записей, содержащих 100k наборов данных, в сборник B, содержащий миллионы наборов данных. В этом случае, когда я использую вышеуказанный запрос, это вызовет любую проблему с производительностью, и у меня есть индекс в коллекции B для быстрого чтения. Я использую 3.2.1 Mongodb –

Смежные вопросы