【发布时间】:2012-08-17 02:35:20
【问题描述】:
我有一个过程,其中在应用程序服务器中运行的程序必须访问 Oracle 数据库服务器中的表,只要该表中至少存在一行。每行数据都与请求程序执行的一些数字运算的客户端相关。该程序只能以串行方式执行此数字运算(即一次针对一个客户端,而不是并行处理多个客户端)。
因此,需要通知程序何时数据库中有数据可供其处理。我也可以
- 让程序轮询数据库,或者
- 让数据库触发程序。
问题 1:是否有任何传统观点认为一种方法可能比另一种更好?
问题 2:我想知道程序是否有任何问题一次“运行”几个月(服务器中的任何进程是否会停止或中断程序运行?- 如果是这样,我不知道我会如何学习除非来自愤怒的客户,否则会有问题)。任何人都有在服务器上运行程序很长时间没有问题的经验?或者,如果服务器确实崩溃了,有没有办法在服务器重新启动后在其上自动启动一个(即 C 语言可执行文件)程序,从而不需要人专门启动它?
任何建议表示赞赏。
更新 1:客户端正在等待结果,但几秒钟的额外延迟(来自轮询)不会破坏交易。
【问题讨论】:
-
就我而言,“取决于程序的编写情况”应该是“程序是否正确编写”。内存泄漏是一个错误。您不应该根据潜在的错误做出设计决定。
-
2) 没有意义。没有“C 程序”之类的东西。只有程序。 C 是一种可以编写程序的语言,但是一旦编译,程序就是程序。如果您的操作系统可以运行程序,那么它也可以运行“C 程序”,如果它告诉您它将在 30 分钟后杀死它们,那么无论它们是否用 C 编写,它都会杀死它们。也就是说,如果你编写了糟糕的代码,你可以通过消耗太多资源使程序在运行一段时间后死掉。
-
@Kerrek 刚刚编辑以删除对 C 的引用,因为问题并不是特定于语言的
-
好吧,也许我过于关注我使用 C 编码这一事实。感谢 Code Bling 的编辑。问题归结为,“是运行一个不断轮询数据库的程序,还是让数据库触发程序的执行更好?”
-
ggkmath,我想这取决于数据库更新的频率,但你不一定要连续运行。您必须权衡轮询与事件驱动的优势。通常事件驱动的响应速度更快,更轻量级(内存和 CPU),但也有其他成本。一方面,维护两个相互依赖的不同语言的链接代码库(一个是您的主程序,另一个通常在数据库上运行)可能是一场噩梦。说了这么多,我相信你会在下面得到一些很棒的实际答案! :)