不断处理PostGre数据库中的数据该采取什么方法?

2024-04-23 15:42:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,就是在我试图构建的过程中采取什么样的方法。使用PostgreSQL和Python。你知道吗

场景:

  • 我有两个数据库A和B
  • B是a的处理版本
  • 数据源源不断地流到需要以特定方式进行处理的数据库中 方法(使用多处理),然后存储在B中
  • 中的每一新行只需要处理一次。你知道吗

所以:

数据流==>;[数据库A]--->;处理--->;[数据库B]

数据库A相当大(40GB)而且还在增长。我的问题是关于确定哪些新数据尚未处理并放入B中。确定哪些行仍需处理的最佳方法是什么。你知道吗

我猜,每次在尚未处理的内容上匹配主键并不是一种可行的方法

假设在一段时间内,新的第120到130行进入数据库。最后一行是119。查看处理的最后一行id(主键)119并说现在应该处理除此之外的任何内容是正确的方法吗?你知道吗

还想知道是否有人在这种“实时”数据处理方面有更多的资源。从技术上说,我不太清楚我在找什么。你知道吗


Tags: 数据方法gt版本id数据库内容过程
1条回答
网友
1楼 · 发布于 2024-04-23 15:42:56

嗯,有几种方法可以解决这个问题。作为提醒,您描述的过程基本上是重新实现一种数据库复制形式,因此您可能需要熟悉Postgres的各种流行复制选项以及它们的工作方式,特别是您可能感兴趣的Slony。您没有指定“database B”是哪种类型的数据库,所以我假设它是一个单独的PostgreSQL实例,尽管除了排除一些像Slony这样的固定解决方案之外,这种假设不会对下面的决策有太大的改变。你知道吗

  1. 在数据库中需要复制的重要表上设置FOR EACH ROW trigger。触发器将获取这些表中插入的每一新行(和/或更新、删除的行,如果需要捕获这些行的话),并将它们适当地发送到数据库B。您提到了使用Python,因此提醒您,如果这使您的生活更轻松,那么您当然可以在PL/python中编写这些触发器函数,也就是说,您应该能够或多或少地轻松地调整现有代码,使其作为PL/Python触发器函数在数据库中运行。

  2. 如果你读过Slony的文章,你可能会注意到建议1与Slony的工作原理非常相似考虑让Slony接管从数据库A到数据库B的必要表的复制是否容易或有帮助,然后如果你需要进一步将数据移动/转换到数据库B内的其他表中,您可以使用数据库B中那些表上的触发器来执行此操作。

  3. 设置一个触发器或RULE,它将发送一个NOTIFY,有效负载指示已更改的行。您的代码将LISTEN显示这些通知,并立即知道哪些行已更改。psycopg2适配器有good support用于侦听和通知。注意:在处理侦听器代码崩溃、与数据库断开连接或以其他方式丢失某些通知的情况时,您需要格外小心。

  4. 如果您可以控制将数据流传输到数据库A的代码,则可以让该代码接管将其新数据复制到数据库B的工作。

相关问题 更多 >