用于在移动和Web服务器之间同步对象列表的最佳解决方案

时间:2011-01-12 18:09:54

标签: iphone android java-me sync

我正在寻找使用特定方法,文件格式(例如syncML)和库(funambol,其他?)的经验/意见/学习,以便在多个移动设备和Web服务器之间同步列表?

我们希望用户能够在多个移动设备和网络中编辑列表,并定期进行同步处理,优雅地处理冲突等......而无需重新发明轮子。

syncML经验,用于syncML或其他人和体验的库(带有Apache样式许可证)将非常感激。

我们正在发展:
   - 用于服务器的Java SE(appengine和其他平台) - 所以Java Servlet 2.3
   - J2ME(在Symbian等上)
   - iOS
   - Android

所以如果可能的话,想要在这些平台上拥有广泛覆盖和良好库的解决方案。

数据
列表中的项目将是产品。这可能与用户输入的文本名称或具有许多字段的结构化产品描述一样简单。我们已经为此定义了XML格式,它将会发展它。我们倾向于同步这些XML片段的列表。

冲突
我们仍然必须准确定义冲突的解决方式,或者用户是否可以选择行为 - 有点像ActiveSync和其他PC解决方案。我们不打算在这方面做任何新的事情。

详细
我们希望列表的每个移动“副本”能够将数据存储在本地数据存储区中,其中包含上次与服务器同步的日期以及变更列表sinc。我们还希望列表中的每个项目都具有本地ID,以及用于在同步过程中提供帮助的全局(服务器ID)。

以上的非线格式
我们更喜欢在同步期间使用XML格式进行数据传输,其中包含一个或多个列表,每个列表中的项目作为元素,每个项目的ID都作为元素的属性。

2 个答案:

答案 0 :(得分:0)

列表中的对象是什么?什么样的数据?

您希望如何处理冲突?例如,如果在设备A上删除了一个对象,则同步到服务器(因此该对象也会在服务器上删除),但设备B同时编辑该对象然后进行同步。该对象应该重新添加吗?它应该在设备B上删除吗?

答案 1 :(得分:0)

一个可能过于简单的想法是使用与SVN或CVS相同的方法。

  1. 首先,设备提取数据(结账)。
  2. 同步后,会更新
  3. 如果您有任何冲突,请询问用户更喜欢哪个版本(我会选择其中一个选项,创建一个或者考虑两个不同的项目)
  4. 解决冲突后,提交当前状态
  5. 要考虑的事情:

    1. 每个项目应与文件匹配(对于复杂数据更好),还是所有项目(属于同一用户)都应放在同一个文件中?
    2. 使用item的id可以更容易地避免具有相似内容的项之间的错误冲突
    3. 您可能应该将您交换的任何项目转换为xml文件(或类似文件),以便更轻松地跟踪版本
    4. 这并不意味着您需要来回发送xml。您可以将xml转换为您希望的格式(例如,url编码参数为xml)
    5. 对版本控制下的文件使用严格格式将使事情更容易同步
    6. 解释我的最后一点:

      不要按照到达的顺序对url参数进行编码,而是选择一些逻辑顺序。例如,“a = 111& b = 222”和“b = 222& a = 111”应该用相同的文本存储。即使您以不同的格式接收数据,也要确保相同的数据始终具有相同的表示。

      这些只是我最初的想法......