【问题标题】:Inter-database communications in PostgreSQLPostgreSQL 中的数据库间通信
【发布时间】:2011-01-16 19:33:01
【问题描述】:

我使用的是 PostgreSQL 8.4。我真的很喜欢新的 unnest() 和 array_agg() 功能;是时候意识到他们的阵列的动态处理潜力了!

无论如何,我正在开发大量使用长数组的 Web 服务器后端。它们将是两个连续的过程,每个过程都发生在不同的物理机器上。每个这样的进程都是一个轻量级的 python 应用程序,它“管理”对每台机器上的数据库的 SQL 查询以及来自前端的请求。

第一个进程将生成一个数组,该数组将被缓冲到一个 SQL 表中。每个这样生成的数组都可以通过主键访问。完成后,第一个 python 应用程序将密钥发送到第二个 python 应用程序。然后在另一台机器上运行的第二个 python 应用程序使用它来获取在第一台机器上找到的引用数组。然后它将它发送到它自己的数据库以生成最终结果。

我发送密钥的原因是因为我希望这将使两个进程更快。但我真正想要的是让第二个数据库向第一个数据库发送查询,以期最大限度地减少序列化延迟等。

任何帮助/建议将不胜感激。

谢谢

【问题讨论】:

    标签: python arrays postgresql database-connection


    【解决方案1】:

    听起来你想要来自 contrib 的 dblink。这允许一些跨数据库 postgres 通信。 pg 文档很棒,应该提供所需的示例。

    【讨论】:

      【解决方案2】:

      不确定我是否完全理解,但您看过通知/收听? http://www.postgresql.org/docs/8.1/static/sql-listen.html

      【讨论】:

      • 我不确定。这是否可以帮助我在机器 A 上运行一个 postmaster 进程从机器 B 上运行的 postmaster 进程发送或接收数据,而无需将数据传递给像 python 这样的中间人应用程序?
      • 嗨,尼古拉斯,这并不完全正确。像 pgpool 或其他复制 PG 数据的东西可能更符合您的喜好。 Notify/listen 会让你的(比如python)代码异步监听数据库的变化,然后你可以通过获取数据等来处理这些通知。你还可以查看触发器,等等插入/更新/删除到表X,触发器将触发,将数据导出到 /data (或任何地方)。然后你会有一个从 /data 抓取文件的过程。这些只是做你想做的事情的几种方法。
      【解决方案3】:

      我正在考虑监听/通知或带有缓存的东西,例如 memcache。您可以将密钥发送到 memcache 并让第二个 python 应用程序从那里检索它。你甚至可以通过听/通知来做到这一点......例如;发送密钥并通知您的第二个应用该密钥在内存缓存中等待检索。

      【讨论】:

      • 这不是我担心的关键。机器 B 使用该密钥从机器 A 中选择其关联的数组。我希望机器 B 中的 postmaster 查询机器 B 中的 postmaster 以最小化进程间通信。基本上,我害怕通过python,Array会浪费时间和资源。我想说:SELECT FROM machineA.db.table WHERE key = $1 etc. 等等。感谢您的关心,很抱歉这么不清楚;)
      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      相关资源
      最近更新 更多