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

标签 java database architecture client-server sync

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

因此,我们希望利用我们现有的 JAVA Swing 用户界面,使我们的本地软件可以联机工作。

我们已经考虑了一些解决方案,但由于这将是一个巨大的变化,我们想知道继续进行的最佳方式是什么。

重要信息:

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

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

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

解决方案 #1

Internet 中的单个数据库以及连接到它的所有客户端。

缺点:

  1. 每个查询都必须访问互联网。
  2. 客户端的源代码需要有数据库密码。那么安全性将完全受到损害。

解决方案 #2

所有客户端都将在互联网上拥有自己的数据库,使用不同的密码。

缺点:

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

解决方案 #3

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

缺点:

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

解决方案 #4

enter image description here

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

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

每个更新查询都将首先发送到一个网络服务,该服务将在在线数据库中执行查询并在成功完成后返回。

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

缺点:

  1. 非常复杂且难以实现。
  2. 同步机制需要高处理能力。

还有更好的方法吗?怎么办?

最佳答案

我会选择解决方案 #3。构建一个数据库支持的服务/API,让桌面客户端验证自己并使用它。我会避免像解决方案 #4 那样使用本地数据库。您不能指望您的用户不会以某种方式不小心弄乱它并导致同步丢失或损坏。此外,当您想要创建不同的客户端(例如移动应用程序)时,使用本地数据库会降低您的速度。

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

关于java - 将本地软件转换为在线软件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26871426/

相关文章:

mysql - 为什么这个 sql 联合不为我运行?

android - 尝试在 iOS 应用程序上安装 "clean architecture"

java - 在 Web GUI 中运行独立的 Java 应用程序

java - 用于在 Java Play 中测试的 HTTP 上下文! 2.0.2

java - 如何知道方法是 N 还是 N^2

java - 在 ListView 上的 2 个 TextView 中显示 2 个数组

mysql - 根据其他列值的唯一性增加列值

c# - ASP.NET 路由 - 带数据库查找的路由约束

ios - 在转换应用程序中构建数据

Java,Play2.0 ,')' 预期但 '=' 找到 Play