Процесс PostgreSQL ETL на Heroku

Мне было поручено написать процесс ETL (извлечение, преобразование, загрузка) между базой данных PostgreSQL 9.1, размещенной на Heroku (мы можем назвать ее Master), и другой копией данных, предназначенной для приложения, которая будет находиться в другом В Heroku (Cedar Stack) размещена база данных PostgreSQL. Наш основной стек разработки — Python 2.7.2, Django 1.3.3 и PostgreSQL 9.1. Как многие из вас, возможно, знают, файловая система в Heroku ограничена тем, что вы можете делать, и я не уверен, что полностью понимаю правила для эфемерной файловой системы.

Итак, я пытаюсь выяснить, какие у меня есть варианты. Очевидным является то, что я могу просто написать команду управления Django и иметь два отдельных соединения с базой данных (и целевой и исходный набор моделей) и перекачивать данные таким образом и обрабатывать ETL в процессе. В то время как эффект, мои первоначальные тесты показывают, что это очень медленный подход. Очевидно, что более быстрым подходом было бы использование функции PostreSQL COPY. Но обычно, если бы я делал это, я мог бы записать это в файл, а затем использовать psql, чтобы извлечь его. Кто-нибудь делал что-то подобное между двумя выделенными базами данных PostgreSQL на Heroku? Любые советы или подсказки будут оценены.


person David S    schedule 21.08.2012    source источник


Ответы (1)


Одним из решений может быть выполнение всего процесса ETL на территории Postgres. То есть используйте расширение dblink для извлечения данных из исходной базы данных. в целевую базу данных. Этого может быть или не быть достаточно, но это стоит исследовать.

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

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

РЕДАКТИРОВАТЬ: теперь мы поддерживаем Postgres FDW, лучшую альтернативу dblink: http://www.postgresql.org/docs/current/static/postgres-fdw.html

person hgmnz    schedule 21.08.2012
comment
Спасибо за ответ! dblink может быть просто билетом для меня. И я провел небольшое исследование, и кажется, что Heroku только начал его поддерживать. postgres.heroku.com/blog/past/2012/8/2 / - person David S; 22.08.2012
comment
Ой. Я не смотрел твой профиль. Я вижу, ты работаешь на Heroku. Позвольте мне просто сказать вам и ВСЕМ, кто может прочитать это в будущем, что я ОБОЖАЮ использовать PostgreSQL на Heroku. Это круто! Теперь, если бы у вас была возможность менее чем за 50 долларов в месяц, чтобы я мог перенести некоторые из своих личных приложений на вас! ‹подсказка, подсказка› лол - person David S; 22.08.2012
comment
Вы можете использовать план для разработчиков или базовый план (бесплатно и 9 долларов США соответственно) для своих хобби-проектов (devcenter.heroku.com/articles/heroku-postgres-starter-tier). И спасибо за добрые слова! - person hgmnz; 22.08.2012