2010-09-10 33 views
2

我有一个应用程序解决方案,它由用Python编写的Web应用程序(使用Django框架)和运行在服务器上的Java应用程序组成。如何监视数据库中的新条目?

Web应用程序接收数据并将其存储到数据库队列中。 Java应用程序然后处理接收到的数据并将结果存储在数据库中。

我的问题是如何通知Java应用程序数据库中有新的数据?现在,似乎我将不得不定期轮询数据库以获取新数据。有没有办法解决?

PS。我曾考虑使用Jython运行Web应用程序并使用Observer模式,但我的主机不支持Servlet。

+1

轮询此场景是通常的方法。 – 2010-09-10 21:58:56

回答

1

除非数据库特别支持它,否则轮询是我所知的唯一选项。但是,如果您关心的是Java服务器上的负载,则可能有另一台服务器除了轮询更改外,并在发生更改时通知您的Java服务器。我不知道这是否比从Java服务器进行简单轮询(不知道您的具体问题空间和硬件限制)更好。

希望有所帮助。


编辑:重新阅读你的发言后,好像你已经在做类似框架的消息(在Java应用程序的队列),因此数据库的变化可能仅仅是另一个消息进入队列。如果需要优先处理,可以给消息提供优先标记,以便在需要处理时处理它们。

+0

感谢您的回复。是的,这是一个消息传递框架,但我现在没有优先权。用户不应该等太久才能得到回应。如果我在负载较轻的情况下经常轮询,我觉得我正在浪费资源。如果我在负载很高的时候不太经常投票,用户可能会开始感觉到延迟。我想我必须找到一个很好的平衡点。 – codinguser 2010-09-10 22:46:09

+2

如果您担心性能会尝试优化数据库,则轮询通常可能会更好。我认为当没有消息时,队列应该是空表(不要在那里保留旧记录)。 – Damien 2010-09-11 04:55:42

+0

@Damien谢谢你的提示。 – codinguser 2010-09-12 15:28:55

相关问题