3

我的任务是在 Heroku 上托管的 PostgreSQL 9.1 数据库(我们可以称其为 Master)与另一个应用程序用途的数据副本之间编写 ETL(提取、转换、加载)过程Heroku (Cedar Stack) 托管 PostgreSQL 数据库。我们的主要开发堆栈是 Python 2.7.2、Django 1.3.3 和 PostgreSQL 9.1。你们中的许多人可能都知道,Heroku 中的文件系统的功能有限,我不确定我是否完全理解临时文件系统的规则。

所以,我想弄清楚我的选择是什么。显而易见的是,我可以只编写一个 Django 管理命令并拥有两个独立的数据库连接(以及一个目标和源模型集),然后通过这种方式泵送数据并在此过程中处理 ETL。虽然效果很好,但我最初的测试表明这是一种非常缓慢的方法。显然,更快的方法是使用 PostreSQL COPY 功能。但是,通常如果我这样做,我可以将它写到一个文件中,然后使用 psql 将其拉入。有人在 Heroku 上的两个专用 PostgreSQL 数据库之间做过类似的事情吗?任何建议或提示将不胜感激。

4

1 回答 1

7

一种解决方案可能是在 Postgres 土地上进行整个 ETL 过程。即使用dblink扩展从源数据库拉取数据到目标数据库。这可能足够也可能不够,但值得研究。

您可以在 heroku dyno 上自由使用文件系统,但我认为这不是一个防弹解决方案。它的工作方式是您可以很好地写入文件系统,但是一旦该进程退出,其中的数据就会消失。该文件系统的大小根本无法保证,但它非常大,除非您需要数百 GB 的存储空间。

最后,您可以通过转动一些会话级别的 postgres 旋钮来加快某些过程。与其在此处列出它们,不如在优秀的 postgres 文档上阅读它。

编辑:我们现在支持 Postgres FDW,一个更好的替代 dblink:http ://www.postgresql.org/docs/current/static/postgres-fdw.html

于 2012-08-21T16:19:30.853 回答