将客户端与服务器数据库同步的最有效方法是什么

时间:2014-08-07 14:02:23

标签: java android mysql ios database

我将开发一个可以在线和离线工作的移动应用程序。

客户端

  1. 客户只能查看数据。它们无法更改服务器数据库或其数据库中的任何内容。
  2. 每个客户端都有自己的数据库,比如服务器数据库的副本。因为应用程序也必须脱机工作。如果互联网可用,则应用会尝试自行更新。
  3. 服务器

    1. 管理员可以通过管理员客户端更改数据库。只有一个数据库可以在所有客户上线时使用。
    2. 我的问题是如何做到这一点。实现它的最有效方法是什么?当管理员更改服务器数据库并且客户端想要更新时,服务器应该如何提供客户端修订版到服务器最后修订版之间的数据。例如:

      服务器

      • 修订版1
      • 第2版
      • 第3版
      • 第4版

      客户A

      • 修订版1
      • 第2版

      客户B

      • 修订版1

      当客户A想要更新时,它应该得到修订版3-4,当客户端B想要更新时,它应该得到修订版2-3-4。

      提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以在数据库中创建修订表(增量ID)。一旦客户端上线,在启动时,您的应用程序将检查服务器的最大ID并将其与客户端的版本ID进行比较。如果服务器的最大ID大于客户端,它将根据服务器上的修订表更新系统(您可以将修订更新的过程名称插入到其他列中,以便在检查过程中选择过程名称,然后运行这些过程更新或其他列可能包括说明)

客户端的修订版不应大于服务器版。如果是这样,您应该降级客户的修订版。

如果表中缺少修订版,这不是问题,则不会对该版本运行修订更新过程。 如果你使用sql存储过程,你的客户端更新将是这样的:(客户端版本是R2,服务器是R6,R5被管理员删除)

exec sp_revision_update R3
exec sp_revision_update R4
exec sp_revision_update R6

在此示例中,R5已从服务器中删除,R6 必须包含先前修订的修订,因为某些客户端在删除之前可能有R5。

答案 1 :(得分:0)

您可以尝试使用“ID”进行检查,这样您就可以从客户端收到最大ID,服务器会检查客户端是否需要更新,例如。在你的服务器中你的最大值ID为4,最大值ID客户端是2(客户端A),您从3更新到最后一个ID,否则执行任何操作。