小编ggk*_*ath的帖子

轮询数据库的有效方法?

我有一个托管 Oracle 11.2 数据库的 Linux CentOS 服务器,该服务器与应用服务器通信,应用服务器与客户端(Flex 应用程序)通信。我将尝试将我想要实现的伪代码描述为一个过程,如下所示:

应用程序服务器有一个 Java 程序,它充当客户端的数据库前端。基本上,客户端希望进行一些数字运算,向 Java 层提交一些数据,Java 层将这些数据以及用于指示 C 程序数据正在等待的标志一起保存到数据库中。

应用服务器上也有这个 C 程序。C 程序每 1 秒左右轮询一次数据库以获取该标志,当 C 程序检测到该标志被设置时,C 程序使用 OCILIB(例如 OCI)从数据库中下载数据,进行数学运算,并保存一个结果返回到数据库中。然后,C 程序设置一个不同的标志来指示 Java 层完成此处理。

Java 层中的另一个程序正在监视 C 程序将设置的这个标志。当它检测到标志被设置时,Java 层会向客户端发送一条消息,告诉客户端数据在数据库中可用。

然后,客户端通过向上述第一个 Java 程序发送适当的请求,从数据库下载数据。

[一种更简单的方法可能是让 java 层直接调用 C 程序(以避免所有这些轮询数据库等),但是所需的 JNI 编程以及 java 排队和多线程超出了我作为程序员的能力.]

问题:

有 2 个进程轮询数据库在行业中是否相当普遍(无需担心),还是一种不好的做法?

例如(在 SQL 或 PL/SQL 中),当单元格的内容更改为某个值(例如 0 = 等待, 1 = 调用函数)?

上面的简单化方法是合理的还是有缺陷的?有没有更好的方法,虽然仍然很简单,可以达到同样的结果?有什么要注意的吗?

oracle

7
推荐指数
2
解决办法
9896
查看次数

标签 统计

oracle ×1