通过不断查询 lastProcessingId 来"monitor"数据库表PRIMARY_ID >不好吗?



我正在ElasticSearch中为MySQL表编制索引(全文搜索)。我们不是在创建每一个新行时发送它,而是每隔N秒(约30秒)对该表中的新记录进行一次SQL查询。我们通过存储最后处理的记录ID(auto_increment)并发出如下查询来实现这一点:

SELECT * FROM myTable where id > lastProcessedId

我的问题是:这是处理这个问题的好方法吗?有什么关键的缺点吗?还有更好的选择吗?

我们还计划使用同样的方法来处理用户的点赞(脸书风格)。每隔N秒,我们就会进行一次SQL查询,以获取最新的"点赞",然后对其进行处理并更新每个用户的时间线。

我们正试图通过这种方式来避免破坏旧的代码库。但是,例如,我对每秒发出这种类型的查询感到不太舒服。

这个解决方案有什么想法或问题吗?

听起来很贵,我会考虑其他方法。

  1. 修改旧代码以在插入时索引内容!我知道这可能很可怕,但有那么糟糕吗?:)
  2. 创建一个插入触发器,以某种方式启动重新索引过程,我认为您可以有很多选择来构建它

结账,http://www.roseindia.net/sql/trigger/mysql-trigger-after-insert.shtml

这有点贵,但坦率地说,如果每30秒一次,我会一直这样做,直到它开始疼痛。

还有其他地方可以将数据放在稍后拾取和处理的位置,而不是通过数据库进行暂存。你可以使用一些简单的方法,比如在文件中附加一个串行副本,每30-60秒写一个新副本,然后让脚本处理以前未处理的文件。类似地,您可以将它们放入其他类型的队列中,然后根据需要经常运行。

最新更新