【问题标题】:Same application deployed in two different servers but fetching same data from DB. How to synchronize DB data相同的应用程序部署在两个不同的服务器上,但从数据库中获取相同的数据。如何同步数据库数据
【发布时间】:2019-01-07 16:47:12
【问题描述】:

Out 应用程序的主要工作是从数据库中获取数据并丰富。由于性能问题,我们将代码部署在两个不同的服务器(两个不同的 JVM)中。现在的问题有时是两个服务器都获取相同的数据和进程,这会导致重复。现在的问题是如何停止从数据库中获取相同的数据。我们尝试锁定数据库行和所有数据库中的状态列,服务器之间的延迟以获取数据。但是,有时当两个服务器同时开始获取数据时,它们都不工作。请帮忙解决这个问题

【问题讨论】:

  • 什么是数据库?我很难相信 Oracle 上的“SELECT for UPDATE”可能会失败。

标签: java spring mule


【解决方案1】:

您不必锁定行。如果你有固定数量的 jvm 运行,你可以使用模来获取每个 jvm 实例中的唯一行。让我们举个例子,假设您的表中有列 id 存储数字序列。你有两个 jvm 正在运行。让我们将 0 分配给第一个 jvm,将 1 分配给第二个 jvm。每次获取行时,都取 id 列的模数为 2(jvm 实例的数量)。如果结果与分配给 jvm 的编号匹配,则处理它,否则跳过它。

【讨论】:

    【解决方案2】:

    在这种情况下有两种处理冲突的标准方法:乐观悲观锁定。

    乐观当您的应用程序使用长事务或跨越多个数据库事务的对话时,您可以存储 版本控制数据,因此如果同一实体被两个更新 对话,最后提交更改的人被告知冲突, 并且不会覆盖其他对话的工作。这种方法 保证了一定的隔离性,但可以很好地扩展并且工作得特别好 在 Read-Often Write-Sometimes 的情况下。

    悲观场景中你只需要指定一个隔离级别 用于 JDBC 连接并让数据库处理锁定问题。

    悲观锁定的缺点是资源被锁定 从它在事务中第一次被访问到 事务完成,其他事务无法访问 在那段时间内。如果大多数事务只是查看资源和 永远不要改变它,独占锁可能会导致 锁争用,乐观锁可能是更好的方法。

    请看一下: Pessimistic and optimistic locking, Hibernate -> Locking.

    【讨论】:

    • 可以链接到外部网站,但您应该在回答中直接包含相关信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    相关资源
    最近更新 更多