2014-10-24 6 views
6

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

Я огляделся вариантов, чтобы сделать данные доступными и легче потреблять, и остановились на двух перспективных вариантов:

  1. AWS Redshift
  2. Hadoop + улей

Мы хочу иметь возможность использовать синтаксис SQL для анализа наших данных, и мы хотим получить доступ к данным в режиме реального времени (задержка на несколько минут в порядке, мы просто не хотим ждать, пока весь MongoDB будет синхронизироваться в одночасье) ,

Насколько я могу собрать, для варианта 2 можно использовать этот https://github.com/mongodb/mongo-hadoop для перемещения данных из MongoDB в кластер Hadoop.

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

Кто-нибудь сделал что-то подобное?

ответ

4

Я закончил кодирование своего собственного мигратора с помощью NodeJS. Я немного разозлился на ответы, объясняющие, что такое redshift и MongoDB, поэтому я решил, что потрачу время, чтобы поделиться тем, что мне пришлось сделать в конце.

датируемые данные

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

Плагины возвращающиеся курсоры

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

Как курсоры используются

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

разделители экспорт из S3 в таблицу по красному смещению

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

Так, например, если у меня был плагин с именем таблицы employees, он создал бы временную таблицу с именем temp_employees.

Теперь у нас есть данные в этой временной таблице. И записи в этой временной таблице получают свои идентификаторы из создаваемой коллекции MongoDB. Это позволяет нам затем выполнить удаление с целевой таблицей, в нашем примере, таблицу employee, где идентификатор присутствует в таблице temp. Если какая-либо из таблиц не существует, она создается «на лету» на основе схемы, предоставляемой плагином. И поэтому мы должны вставить все записи из таблицы temp в целевую таблицу. Это обслуживает как новые записи, так и обновленные записи. Мы делаем только мягкие удаления по нашим данным, поэтому он будет обновлен флагом is_deleted с красным смещением.

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

Таким образом, в целом, каждый плагин/миграция предоставляет следующую к двигателю:

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

Redshift - продукт для хранения данных, а Mongo DB - это база данных NoSQL. Ясно, что они не заменяют друг друга и могут сосуществовать и служить различным целям. Теперь как сохранить и обновить записи в обоих местах. Вы можете переместить все данные Mongo DB в Redshift как одноразовую активность. Redshift не подходит для записи в режиме реального времени. Для синхронизации в режиме реального времени с Redshift вы должны изменить программу, которая записывается в Mongo DB. Пусть эта программа также записывается в места S3. Расположение S3 для перемещения по красному смещению может выполняться на регулярном интервале.

0

Mongo DB, являющийся механизмом хранения документов, Apache Solr, Elastic Search можно рассматривать как возможные замены. Но они не поддерживают возможности запросов типа SQL. В основном они используют другой механизм фильтрации. Например, для Solr может потребоваться использование фильтра Dismax.

На облаке, облачный поиск Amazon/Azure Search был бы неотразимым вариантом, чтобы попробовать.