java - 如何使用数据库同步程序内的数据?

标签 java postgresql

我有一个非常小的程序,将由两台或多台计算机同时使用。这是一个小程序,可以将字符串添加到列表中并将其从列表中删除。我将所有这些字符串保存在远程 postgres 数据库中。当我从列表中删除字符串时,它会从数据库中删除,但是如果程序在其他计算机上运行,​​您仍然可以看到该字符串。目前我心里只有一个选择,即每x次刷新程序中的数据?有更好的选择吗?数据库很小,只有一列,不应超过 100 行。

最佳答案

您绝对不应该允许客户端程序直接与远程数据库交互。将数据库暴露给客户端是一个巨大的安全问题。您应该始终在其之间有一个服务器程序,它与客户端通信,验证他们的输入,与数据库通信,然后告诉客户端他们想知道什么。

这还使您能够向网络协议(protocol)添加推送更新(当一个客户端进行更改时,更新数据库并通知其他客户端有关更改的信息)。

但是,当您确实想冒险并且认为服务器程序太复杂时,您可以在每一行发生更改时为其添加时间戳。这样,您可以通过仅查询自上次刷新以来更改的行来定期刷新客户端。

另一种选择是允许客户端以点对点方式相互通信。当客户端进行更改时,它不仅通知数据库,还通过单独的网络连接通知其他客户端。为此,客户端需要知道彼此的 IP 地址或至少彼此的主机名。当这些未知时,您可以让客户端在连接时将其 IP 写入数据库的另一个表,以便其他客户端可以查询它。只需确保这些条目被删除,这样您就不会惹恼某些客户端曾经拥有的每个 IP 地址。

关于java - 如何使用数据库同步程序内的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20768366/

相关文章:

postgresql - 在 postgres 中,可以查询当前的听众吗?

java - Guice:可以注入(inject)模块吗?

使用 CURRENT_DATE - 1 但不使用硬编码日期时,PostgreSQL postgres_fdw 在大型外部表上查询速度非常慢

hibernate 3.6 : how to make use of deferred FK constraints when inserting entities with circular reference?

java - 获取 ExceptionMapper 中抛出异常的方法的 @Produces 注解

node.js - 如何保持小写的 Sequelize 关联名称?

postgresql - 它可以引用 PL/pgSQL 变量或表列

java - 如何在所有线程完成之前保持 JVM Activity ?

Java Socket 的应用程序随机停止

java - JPanel SetPreferedSize 与实际大小不匹配