代码之家  ›  专栏  ›  技术社区  ›  CookieOfFortune

最兼容的数据库更改监听方式?

  •  1
  • CookieOfFortune  · 技术社区  · 15 年前

    我有一个进程,它每隔几秒钟读取原始数据并将其写入数据库。

    判断数据库是否已写入的最佳方法是什么?我知道Oracle和MS-SQL可以使用触发器或其他东西与其他服务进行通信,但我希望有一种技术可以用于更多类型的SQL数据库(SQL Lite、MySQL、Postgres)。

    3 回复  |  直到 14 年前
        1
  •  1
  •   yetanotherdave    15 年前

    你的问题缺乏一个好答案所需的细节,但我会试一试。触发器很适合以表为目标,但是如果您对系统范围的写入感兴趣,那么您将需要一个更易于维护的更好的方法。对于系统范围的写入,我将研究在事务日志中检测更改的方法。不幸的是,每个供应商实现此部分的方式都不同,因此不太可能有一种方法适用于所有供应商。也就是说,在数据库服务器中工作的方法不太可能。但在操作系统级别上,服务器外部可能有更优雅的方式。例如,如果事务日志是磁盘上的一个文件,那么检测文件更改的某种简单脚本将指示数据库已写入。

    请记住,您只要求检测数据库写入。如果您需要知道它是哪种类型的写操作,那么您需要进入事务日志来查看其中的内容。这肯定是特定于供应商的。

        2
  •  0
  •   Toby Allen mercator    15 年前

    这取决于你想做什么。如果需要启动数据库外部的东西,那么对数据库进行简单的轮询就可以做到这一点,否则特定于数据库的触发器可能是最好的。

        3
  •  0
  •   tegbains    15 年前

    如果您想独立于数据库,那么轮询可以工作。它不是很有效率,也不是很优雅。如果您被诅咒使用不支持触发器的数据库,它也会起作用。我们过去使用的解决方法是使用一个定时(比如通过cron)的脚本来执行 select MAX(primary_key_id) from saidTable . 我假设您的主键是一个序列整数,并且被索引。

    然后将其与上次运行脚本时获得的值进行比较。如果匹配,告诉脚本退出或休眠。如果没有,做你的事。

    这种方法还存在其他问题(例如,如果脚本占用时间太长,则会出现积压,或者出现并发问题等)。当然,性能也会成为一个问题!