Как уменьшить количество документов для синхронизации с БД Монго - PullRequest
0 голосов
/ 02 февраля 2012

В моем текущем проекте я использую две базы данных.

  1. Экземпляр MongoDB, собирающий данные от разных поставщиков данных (около 15M документов)
  2. Удержание другого (реляционного) экземпляра базы данныхтолько данные, которые необходимы для приложения, то есть подмножество данных в экземпляре MongoDB.(около 5M строк)

В рамках процесса синхронизации мне необходимо регулярно проверять наличие новых записей в MongoDB в зависимости от данных в реляционной БД.

Скажем, этоЧто касается песен и исполнителей, документ в MongoDB может выглядеть следующим образом:

{_id:1,artists:["Simon","Garfunkel"],"name":"El Condor Pasa"}

Часть процесса синхронизации заключается в импорте / обновлении всех песен тех исполнителей, которые уже существуют в реляционной БД, которыев настоящее время около 1M исполнителей.

Итак, как мне извлечь все песни названных исполнителей 1M из MongoDB для импорта?

Моей первой мыслью (и попыткой) было найти всех исполнителей и запросить все песни длякаждого художника (конечно, есть указатель на поле «исполнители»).Но это займет несколько минут для каждой партии из 1000 исполнителей, что сделает этот процесс длительным.

Моя вторая мысль состояла в том, чтобы записать всех существующих исполнителей в отдельную коллекцию mongoDB и создать суперзапрос, который только извлекает песнихудожников, которые хранятся там.Но до сих пор я не смог получить данные, основанные на двух коллекциях.Это хороший вариант использования для карты / уменьшить?Если да, может кто-нибудь, пожалуйста.подскажите как этого добиться?(Я не совсем новичок в NoSQL, но вроде новичка, когда дело доходит до отображения / уменьшения.) Или эта идея просто сумасшедшая, и мне нужно придерживаться процесса, который выполняется в течение нескольких дней?

Спасибозаранее за любые подсказки.

1 Ответ

0 голосов
/ 02 февраля 2012

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

Вот несколько идей для повышения эффективности взаимодействия с монго:

  • Уменьшите нагрузку на сеть с помощью "in" запроса . Поэкспериментируйте с размером массива идентификаторов артистов, чтобы определить, что лучше всего подходит для вашего случая.
  • Уменьшите нагрузку на сеть, выбрав или прочитав только те атрибуты, которые вам нужны.
  • Убедитесь, что ваши документы проиндексированы по художнику.
  • На сервере Mongo убедитесь, что как можно больше ваших данных помещается в память. Получение данных с диска будет медленным независимо от того, что вы еще делаете. Если он не помещается в память, у вас есть несколько вариантов - купить больше памяти; уменьшить ваш набор данных (например, удалить атрибуты, которые вам на самом деле не нужны); осколок; и т.д.
...