将本地软件转换为在线软件

时间:2014-11-11 18:04:02

标签: java database architecture client-server sync

我们专门为非常小的企业开发了管理软件。但是,出乎意料的是,一些大企业喜欢它并开始使用它。问题是我们的软件只在本地工作(一个商店),大企业希望我们让软件在线工作(两个或多个商店在不同的地方,但使用相同的数据库)。

因此,我们希望利用我们已有的JAVA Swing用户界面,让我们的本地软件在线工作。

我们已经考虑过一些解决方案,但是,由于这将是一个很大的变化,我们想知道什么是最好的方法。

重要信息:

  • 用户界面是JAVA Swing,数据库是Postgresql。

  • 我们有成千上万的客户使用我们的软件,他们也想在网上使用它。

以下是我们已经考虑过的解决方案。如果有更好的方法,请告诉我们。

解决方案#1

互联网中的单个数据库以及与之相连的所有客户端。

缺点:

  1. 每个查询都必须访问互联网。
  2. 客户端的源代码需要拥有数据库密码。然后安全性将完全受到损害。
  3. 解决方案#2

    所有客户都有自己的互联网数据库,密码不同。

    缺点:

    1. 每个查询都必须访问互联网。
    2. 需要数千个数据库。
    3. 难以维护。
    4. 解决方案#3

      互联网中的单个数据库,但客户端通过验证客户登录数据并返回查询结果的Web服务进行连接。

      缺点:

      1. 每个查询都必须访问互联网。
      2. Web服务的构建有点复杂,它必须以某种方式返回我们不知道的结果(可能是简单的csv文本或xml)。
      3. 解决方案#4

        enter image description here

        互联网上将存在一个供我们所有客户使用的数据库。

        此外,所有客户端都在本地拥有自己的数据库,因此他们可以进行快速选择查询。

        每个更新查询都将首先发送到将在联机数据库中执行查询的Web服务,如果成功完成则返回。

        除此之外,我们还有一种机制可以不时地将本地数据库与在线数据库同步。

        缺点:

        1. 非常复杂且难以实施。
        2. 同步机制需要高处理。
        3. 有更好的方法吗?怎么样?

1 个答案:

答案 0 :(得分:2)

我会选择解决方案#3。构建数据库支持的服务/ API,让桌面客户端对自身进行身份验证并使用它。我会避免使用解决方案#4中的本地数据库。您不能依赖您的用户不要以某种方式意外地弄乱它并导致同步丢失或损坏。此外,当您想要创建不同的客户端(例如移动应用程序)时,拥有本地数据库会降低您的速度。

如果您决定使用解决方案#3,那么当前的事实标准是基于JSON的REST API。此外,您应该注意,可以使用许多缓存技术,这将减少实际运行的查询数。