Mongodb для красного смещения

У нас есть несколько коллекций в mongodb, которые мы хотим перенести на redshift (в автоматическом инкрементальном ежедневном режиме). Как мы можем сделать это? Должны ли мы экспортировать монго в csv?

Ответ 1

Я написал код для экспорта данных из Mixpanel в Redshift для клиента. Первоначально клиент экспортировал в Mongo, но мы обнаружили, что Redshift предлагает очень большие улучшения производительности для запроса. Итак, в первую очередь мы перенесли данные из Mongo в Redshift, а затем придумали прямое решение, которое передает данные из Mixpanel в Redshift.

Чтобы сначала сохранить данные JSON в Redshift, вам нужно создать SQL DDL для хранения схемы в Redshift, т.е. CREATE TABLE script.

Вы можете использовать инструмент, например Variety, чтобы он мог дать вам некоторое представление о вашей схеме Mongo. Однако он борется с большими наборами данных - вам может понадобиться подзапрос вашего набора данных.

В качестве альтернативы DDLgenerator может генерировать DDL из разных источников, включая CSV или JSON. Это также связано с большими наборами данных (ну, набор данных, с которыми я имел дело, составлял 120 ГБ).

Итак, в теории вы можете использовать MongoExport для создания CSV или JSON из Mongo, а затем запустить его через генератор DDL для получения DDL.

На практике я нашел использование экспорта JSON немного проще, потому что вам не нужно указывать поля, которые вы хотите извлечь. Вам нужно выбрать формат массива JSON. В частности:

   mongoexport --db <your db> --collection <your_collection> --jsonArray > data.json
   head data.json > sample.json
   ddlgenerator postgresql sample.json       

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

Затем вы загрузите данные в Redshift.

Если вы экспортировали JSON, вам нужно использовать функцию Redshift Копировать из JSON. Для этого вам необходимо определить JSONpath.

Для получения дополнительной информации просмотрите Snowplow блог - они используют JSONpath для сопоставления JSON с реляционной схемой. См. Их сообщение в блоге о том, почему люди могут захотеть прочитать JSON для Redshift.

Включение JSON в столбцы позволяет гораздо быстрее запрашивать другие подходы, такие как использование JSON EXTRACT PATH TEXT.

Для инкрементных резервных копий это зависит от того, добавляются ли данные или данные меняются. Для аналитики это обычно первое. Подход, который я использовал, состоит в том, чтобы экспортировать аналитические данные один раз в день, а затем копировать его в Redshift поэтапно.

Вот некоторые связанные ресурсы, хотя в конце я их не использовал:

Ответ 2

Честно говоря, я бы рекомендовал использовать третью сторону здесь. Я использовал Panoply (panoply.io) и рекомендую его. Это займет ваши коллекции манго и сгладить их в свои столы в красном смещении.

Ответ 3

Служба миграции баз данных AWS (DMS) добавляет поддержку для MongoDB и Amazon DynamoDB.So Я думаю, что теперь лучший вариант перехода от MongoDB к Redshift - это DMS.

  • Версия MongoDB 2.6.x и 3.x в качестве источника базы данных
  • Режим документа и режим таблицы поддерживаются
  • Поддержка записи данных изменений (CDC)

Подробнее - http://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.MongoDB.html

Ответ 4

Несколько вопросов, которые были бы полезными для изучения, были бы следующими:

  • Является ли это добавлением только постоянно возрастающей инкрементной синхронизации, то есть данные только добавляются и не обновляются/удаляются, или, скорее, ваш экземпляр redshift интересует только добавления?
  • Является ли несоответствие данных из-за удаления/обновлений, происходящих у источника, а не для экземпляра красного смещения?
  • Нужно ли быть ежедневной инкрементной партией или может быть в реальном времени, как это происходит?

В зависимости от вашей ситуации может работать mongoexport, но вы должны понимать его недостаток, который можно найти на http://docs.mongodb.org/manual/reference/program/mongoexport/.

Ответ 5

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

Моим решением было передать mongoexport в небольшую служебную программу, которую я написал, которая преобразует строки jon mongoexport в мой желаемый вывод csv. трубопровод выход также позволяет сделать процесс параллельным.

Mongoexport позволяет добавить к команде запрос mongodb, поэтому, если ваши данные коллекции поддерживают его, вы можете создавать N различных процессов mongoexport, транслировать их в другую программу и уменьшать общую продолжительность процесса миграции.

Позже я загрузил файлы на S3 и выполнил КОПИРОВАНИЕ в соответствующую таблицу.
Это должно быть довольно простым решением.

Ответ 6

Экспортируйте данные из mongodb в формате csv в файл csv постепенно. Скопируйте файл csv в redshift с помощью команды copy redshift.

Ответ 7

Для базовой репликации вы можете сделать это:

  1. Создайте JSON файл MongoDB, используя Export.
  2. Переместите его на S3.
  3. Создайте схему таблицы и с помощью COPY переместите ее в красное смещение.

При выполнении всего этого я столкнулся с несколькими проблемами, такими как проблемы с вложенными объектами и схемами. Для подробного ознакомления посмотрите [this blog post][1] которым я недавно столкнулся.