Client Server数据共享问题

时间:2011-09-25 11:35:46

标签: android database client sharing

我有一个带移动应用程序的web服务。用户与应用程序共享服务器上的数据 - 在数据库中有一个约束,即共享对象的名称对每个用户是唯一的。此外,应用程序在本地存储所有已创建的数据(由用户 - 也是共享的)。

我有以下情况:

  1. 用户使用数据名称X创建数据。
  2. 用户分享此数据。
  3. 服务器中包含此用户的数据库名称X
  4. 用户有一部新手机并安装该应用程序。
  5. 没有互联网连接
  6. 用户再次使用数据名称X创建数据。
  7. 它仅存储在本地 - 因为没有互联网连接。
  8. 恢复了互联网连接。
  9. 现在BG服务运行并开始共享所有共享数据 - 在BG中。
  10. 由于约束而发现问题。
  11. 应该怎样做才能解决问题?我可以弹出一个新的窗口,说它已经共享并要求用户重命名/覆盖它,给这个数据D / L选项提供给它的本地数据库等。但是因为它是在BG中完成的 - 它是否对用户友好显示这个弹出窗口?

    还有其他想法吗?

    可能有一种常见的做法。

    我真的可以使用一些帮助来解决这个问题。

2 个答案:

答案 0 :(得分:0)

为此,您通常不使用某种名称或类似的东西,而是使用UUID - 即32到64个字符长的随机字符串,它们唯一地标识一个对象。创建对象时,只需在设备上创建UUID并将其同步到服务器。下面是android中的UUID类的文档。

虽然在理论上可以使用相同的UUID,但是你通常不会过于担心它,如下所述:http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates

对于iOS,您可以使用CFUUID类生成UUID

UUID的另一个名称是GUID,Globaly唯一标识符。因此,您删除任何类型的唯一性约束。

答案 1 :(得分:0)

以下是我最近使用的应用程序处理此问题的方法:

  1. 用户在移动设备上创建新记录。新记录被分配了负主键_id号。
  2. 应用检查互联网连接,如果存在连接,应用会向服务器发送HTTP帖子,在服务器端创建记录。然后,服务器发回一个响应,创建新的PK _id,并在应用程序中更新。
  3. 如果没有互联网连接,应用程序会在我的db_changes表中创建一条记录,其中包含表名和新记录的PK _id。
  4. 服务以5分钟为增量运行,从服务器获取更新并将新数据发布到服务器。对于尚未发布到服务器的任何现有插入或更新,每次都会轮询db_changes表。
  5. 成功后,db_changes表中的记录将被删除。
  6. 在我的情况下,这很有效。