【问题标题】:Android Single Server Multiple Client Data SynchronizationAndroid单服务器多客户端数据同步
【发布时间】:2013-09-25 15:38:46
【问题描述】:

这些天我正在开发一个 Android 应用程序,但我遇到了数据同步问题。

我正在使用 JSON 传输数据。

现在我将解释我的问题。

假设您有一台服务器和多台 Android 设备,它们在彼此之间发送数据。我们不仅在安卓设备上,而且在服务器上都有相同的数据库表。

系统运行如下:

一开始, Android 设备必须从服务器接收数据。

白天, Android 设备可以更改自己数据库中的数据,但不会更改服务器数据库中的数据。

一天结束时,Android 设备将发送

  • 已插入,
  • 已更新,
  • 已将数据删除到服务器。

我的问题从这里开始..

我的代码正在记录 Android 设备中的所有更改,以便在当天发送到服务器。

用户 A 在当天添加此数据(id=1024 name=testA value=testAvalue)

用户 B 在当天添加此数据(id=1024 name=testB value=testBvalue)

然后用户 B 想在白天更改数据名称 (id=1024 name=testC value=testBvalue)

当天,用户A首先向服务器发送数据。现在服务器有这个数据

(id=1024 name=testA value=testAvalue)

其次,用户 B 向服务器发送数据。 Create(id=1024 name=testB value=testBvalue)

这里这个数据 id 不会是 1024,因为服务器数据库有 id 是 1024 的数据。新的数据 id 是 1025。

现在服务器有 2 个数据 (id=1024 name=testA value=testAvalue) *(id=1025 name=testB value=testBvalue)*

然后,服务器会收到这样的编辑命令

Edit(id=1024 name=testC value=testCvalue)

会编辑1024.data会出错

(id=1024 name=testC value=testCvalue)

(id=1025 name=testB value=testBvalue)

【问题讨论】:

    标签: android synchronization client-server data-transfer


    【解决方案1】:

    这是一个典型的“谁救最后赢”的问题。您在现场有数据副本,您需要在一天结束时汇总和同步更新。这里的问题与其说是技术问题,不如说是设计问题:

    “当更新冲突时,如何接受来自多个来源的批量数据更新?”

    所以,这确实是一个冲突解决问题。 “正确”的解决方案取决于您的应用需求。

    一种解决方案是将记录的“所有权”分配给设备,以便只有该设备可以进行更新。一个例子可能是一个销售团队,其中代表被分配了客户。只有分配给客户的代表才能更改与该客户关联的记录。

    另一种解决方案是将解决冲突的特定规则写入系统。您的具体业务案例将准确确定如何解决每个冲突。只要您的应用程序无法实时更改服务器,这可能是您接受来自多个来源对同一记录的更新的最佳选择。

    【讨论】:

    • 感谢您的建议 :) 我会考虑更多时间以获得更好的解决方案
    • 感谢您的回答?
    【解决方案2】:

    您的问题之一是 ID 冲突。您需要根据您的具体要求为您的主键选择适当的列类型。

    让我建议几个选项(它们都有一些优点和缺点)。

    • Auto-Increment (Identity) 列:客户端仅在服务器创建新记录并将新生成的 id 发送给客户端后,才创建临时 id 并替换为永久 id。
    • 或者服务器会为每个客户端指定ID的范围。例如。客户端 A 将插入 1-100000 的记录,客户端 B:100001-200000 等。一旦新记录超过范围限制,服务器应发出新范围。
    • GUID:每个客户端将在插入时使用新的 UUID() 命令生成唯一 id,然后您的服务器将能够毫无问题地插入或更新客户端更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      相关资源
      最近更新 更多