当有一些更新时,单例模式会产生一些问题

Singleton pattern is produced some problems when there are some updates

We have an Oracle database which hold data about some cities and places, etc.

We have a web system which we can manipulate these datas.

We also have a desktop client application which is working with these data.

为了提高我们的桌面应用程序 性能 并减少对我们的 DAO 层的无用请求,我们实现了一些单例 类在我们的桌面应用程序中,在用户打开 his/her 桌面应用程序后 仅一次 获取提到的城市、地点等数据。

最近我们收到客户的请求,为什么我们看不到我们使用 Web 应用程序所做的更改,当客户端桌面应用程序处于活动状态并且 运行 时。他们抱怨为什么必须关闭桌面应用程序并再次打开它才能看到更改。

我们知道问题出在那些 Singleton 类 但我们不想更改它们,因为它会当它们不存在时,它们会在我们的系统中产生巨大的开销。为了解决问题我们想过多种方案:

  1. 在数据库中创建一个 table,其整数列名称类似于我们的数据列(城市、地点等),并在有更新时使用它跟踪更改(轻量级解决方案) )
  2. 使用数据库功能
  3. 通知系统,每当发生更新时通知客户端应用程序。
  4. 数据库中的缓存机制,缓存最近更改的 tables 并在用户有类似请求时为他们提供服务

这是我们的堆栈:

您认为解决此问题的最佳做法是什么?

Oracle 有一个称为 "Database Change Notification" 的功能,可用于在 read-mostly 表更改时收到通知。看起来此功能很适合满足您的要求。文档的 link 是 here.

简而言之,它的工作方式是 JDBC 桌面应用程序中的瘦驱动程序将打开一个端口,Oracle 数据库将连接到该端口并使用此连接在数据更改时推送通知。然后您通过 event/listener API 获得回调并可以刷新您的缓存。

此通知机制专为 read-mostly 的数据而设计,换句话说,数据不会经常更改,否则无论如何都不值得缓存数据。