我有一个问题,就是在我试图构建的过程中采取什么样的方法。使用PostgreSQL和Python。你知道吗
场景:
所以:
数据流==>;[数据库A]--->;处理--->;[数据库B]
数据库A相当大(40GB)而且还在增长。我的问题是关于确定哪些新数据尚未处理并放入B中。确定哪些行仍需处理的最佳方法是什么。你知道吗
我猜,每次在尚未处理的内容上匹配主键并不是一种可行的方法
假设在一段时间内,新的第120到130行进入数据库。最后一行是119。查看处理的最后一行id(主键)119并说现在应该处理除此之外的任何内容是正确的方法吗?你知道吗
还想知道是否有人在这种“实时”数据处理方面有更多的资源。从技术上说,我不太清楚我在找什么。你知道吗
嗯,有几种方法可以解决这个问题。作为提醒,您描述的过程基本上是重新实现一种数据库复制形式,因此您可能需要熟悉Postgres的各种流行复制选项以及它们的工作方式,特别是您可能感兴趣的Slony。您没有指定“database B”是哪种类型的数据库,所以我假设它是一个单独的PostgreSQL实例,尽管除了排除一些像Slony这样的固定解决方案之外,这种假设不会对下面的决策有太大的改变。你知道吗
在数据库中需要复制的重要表上设置FOR EACH ROW trigger。触发器将获取这些表中插入的每一新行(和/或更新、删除的行,如果需要捕获这些行的话),并将它们适当地发送到数据库B。您提到了使用Python,因此提醒您,如果这使您的生活更轻松,那么您当然可以在PL/python中编写这些触发器函数,也就是说,您应该能够或多或少地轻松地调整现有代码,使其作为PL/Python触发器函数在数据库中运行。
如果你读过Slony的文章,你可能会注意到建议1与Slony的工作原理非常相似考虑让Slony接管从数据库A到数据库B的必要表的复制是否容易或有帮助,然后如果你需要进一步将数据移动/转换到数据库B内的其他表中,您可以使用数据库B中那些表上的触发器来执行此操作。
设置一个触发器或RULE,它将发送一个NOTIFY,有效负载指示已更改的行。您的代码将LISTEN显示这些通知,并立即知道哪些行已更改。psycopg2适配器有good support用于侦听和通知。注意:在处理侦听器代码崩溃、与数据库断开连接或以其他方式丢失某些通知的情况时,您需要格外小心。
如果您可以控制将数据流传输到数据库A的代码,则可以让该代码接管将其新数据复制到数据库B的工作。
相关问题 更多 >
编程相关推荐