基于事件的移动服务器交互 - 同步/冲突解决

时间:2013-01-17 08:50:48

标签: mobile synchronization identity uniqueidentifier

作为标题声明,我计划使用对项目进行的用户操作的事件(这是要求)(添加/删除/更新)。现在这里有一些我想回答的问题,我觉得有人已经偶然发现同样的问题:

1)对象ID生成服务器与客户端?如果移动客户端处于脱机状态 - 他需要为新创建的对象生成一些ID - 以便对此对象的后续操作可以对其进行一些引用。什么是最好的方法?生成一些本地ID,然后分配在服务器上生成的全局ID(一旦将对象推送到服务器)。我们的架构团队认为这是正确的方法,但我个人并不认为它的好处。特别是在用户登录其他移动设备并下载所有事件的情况下 - 他应该收到什么ID - 全球或全球+本地。这种方法如何比在客户端生成类似于UUID(time + hardwareid + userid + incrementingId / randomId)的东西更好?

2)处理多个移动/网络客户端的适当方式是什么(用户可以登录单个或多个客户端)。这里的第一个问题是冲突解决 - 这里我们的对象有版本 - 支持乐观锁定 - 所以第一个设法做出提交的人就是赢家。这似乎很清楚。其他问题是同步。理想情况下,只向客户端下载更新的信息会很不错。因此,我们需要向客户发送他不了解的事件。显然,我们需要有信息 - 哪个事件来自哪个设备。这是为发送到服务器的每个事件提供sourceId的另一点。但是我们如何处理2个或更多的网络会话?我是关于WEB编程的noob,但是我们想要无状态,是否意味着浏览器上的某些脚本应该生成某种sessionID,它将被用作web客户端上生成的所有事件的sourceID并立即发送到服务器?

有人有类似的任务吗?您使用了哪些解决方案/遇到的问题?

1 个答案:

答案 0 :(得分:0)

您没有提到您正在使用的后端类型。如果您使用的是Oracle后端,则应该查看数据库移动服务器(DMS):

http://www.oracle.com/technetwork/products/database-mobile-server/overview/index.html

它为您处理数据同步,包括冲突解决。您的移动应用程序将从本地数据库读取和写入,DMS将处理其余数据。它还在受支持的客户端平台上处理设备/应用程序管理。

对于1)中描述的问题,您似乎在询问是否应在客户端或服务器端创建唯一标识符。如果没有更全面地了解您的架构,我无论如何都看不到明显的优势。无论如何,无论您决定采用哪种方式,DMS都可以将唯一标识符从一侧传播到另一侧。

希望对您的项目有所帮助,祝你好运。

- Eric Jensen,Oracle PM