SyncML学习笔记
同步锚是一个字符串,该字符串的含义是代表一个同步事件。换言之:
Last同步锚:代表上次的同步事件;
Next同步锚:代表当前的同步事件。
1.目的作用
为了数据同步的完整性
2.解决的问题是:
数据同步数据的时候,同步到一部分的时候,突然中断(如因为掉电,掉线等),下次同步该如何同步?
3.解决办法:
A. 在同步初始化的时候,发送Last和Next锚,给对方;
B.如果对方Next锚有保存,将该Next锚与对方发过来的Last锚进行比较:
如果相等,说明上一次同步没有发生中断,造成数据不完整,也就是说上一次同步是有效的;
如果不相等,要求对方即另一台设备重新发同步请求指令;
锚,是用来同步用的,保证所同步的数据完整,无遗漏,无差错。
分为两种,分别是Last和Next。
The Last sync anchor describes the last event (e.g., time) when the database was synchronized from the point of sending device and the Next sync anchor describes the current event of sync from the point of sending device.【摘自SyncML协议的定义】
Last同步锚:代表的发送设备的上一次的同步事件
Next同步锚:代表的发送设备的当前的同步事件
1.注意:
发送设备的同步事件
2.也就是说:
PC上 存储的Last同步锚和Next同步锚
Last同步锚:代表的手机Phone设备与其同步的上一次的同步事件
Next同步锚:代表的手机Phone设备与其同步的当前的同步事件
手机上存储的Last同步锚和Next同步锚
Last同步锚:代表的PC电脑与其同步的上一次的同步事件
Next同步锚:代表的PC电脑与其同步的当前的同步事件
在同步初始化的时候,Last同步锚和Next同步锚都需要发送给对方。
1.在同步初始化的时候;
2.通过DTD元信息,即Meta信息;
锚是用字符串来表示,而字符串的格式通常是序列号或者ISO 8601格式的扩展表示的基本格式的日期/时间戳。
锚是保持在数据库中,当数据同步完成之后,才能更新。
Last锚就是Client客户端本地数据库存储的锚信息;
Next锚是当前准备同步的时候,新产生的一个锚信息;
Server将Client客户端发送过来Last锚,与存储在本地锚,做比较用;
如果同步完成,Server将Client客户端发送过来Next锚予以保存,就是替换掉原来本地存储的锚;
客户端发送Last锚和Next锚等信息给Server服务端;
Server服务端收到信息之后,不管是否需要同步,都要回应。
在本图中,Server服务端回应的是“OK”。因为客户端发送Last锚与Server存储的锚是一样的;
同步会话#1结束之后,Server服务端用客户端发送Next锚替换存储的锚信息;
Client客户端用Next锚替换掉,Client客户端上的锚信息;
序号 |
字段 |
数据类型 |
字段功能描述 |
1 |
id |
integer |
每条记录的唯一标示 |
2 |
imei |
char(32) |
手机的IMEI号码 |
3 |
anchor |
datetime |
与Server成功同步后Anchor值 |
序号 |
字段 |
数据类型 |
字段功能描述 |
1 |
id |
integer |
每条记录的唯一标示 |
2 |
pcid |
char(32) |
PC电脑的唯一标示 |
3 |
anchor |
datetime |
与Client成功同步后Anchor值 |
查询ChangeLog信息变化表,来得到哪些信息需要同步。
用来记录数据库中的数据项一旦发生变化,记录其发生改变,也就是一张跟踪数据库中的数据项发生变化的Log信息表。
注意:一定要记录信息发生变化的类型,是修改,是新增还是删除。
1.修改;
2.新增;
3.删除;
序号 |
字段 |
数据类型 |
字段功能描述 |
1 |
id |
integer |
每条记录的唯一标示 |
2 |
xx_id |
integer |
如联系人(或者短信)记录的ID |
2 |
change_time |
datetime |
记录信息发生变化时间 |
3 |
type |
integer |
记录信息变化的类型 |
记录信息变化的类型说明:
1代表修改;
2代表新增;
3代表删除;
序号 |
同步类型 |
含义描述 |
1 |
两方同步类型 (Two-way sync) |
普通的同步类型,客户端和服务器相互交换修改数据,客户端首先发送修改. |
2 |
慢同步 (Slow sync) |
一种双方同步的形式,服务器需要比较客户端的每一项数据的每一个字段,这种同步方式客户端需要把全部数据发送给服务器.然后服务器进行比较. |
2 |
客户端方同步 (One-way syncfrom client only) |
客户端发送它的修改数据给服务器,服务器不发送修改给客户端 |
3 |
客户端更新同步 (Refresh sync from client only) |
客户端发送所有的数据给服务器,替换服务器中的数据 |
4 |
服务器端单方同步(One-way sync from server only) |
客户端获得所有的服务器的修改数据,客户端不发送自己的修改数据给服务器 |
5 |
服务器端更新同步(Refresh sync from server only) |
服务器发送所有的数据给客户端,替换客户端的数据 |
6 |
服务器提醒同步 Server Alerted Sync |
服务器提醒客户端执行同步 |
7 |
两方同步类型 (Two-way sync) |
普通的同步类型,客户端和服务器相互交换修改数据,客户端首先发送修改. |
yyyy-mm-ddThh:mm:ss[.mmm]
T表示后面是日期时间值的时间部分。
若要使用ISO 8601 格式,必须按此格式指定每一个元素。这也包括格式中所示的标点符号。
A.方括号表示毫秒成分的这个小数部分是可选的;
B.时间成分以 24 小时格式指定。
A.它是一个国际标准;
B.使用此格式指定的日期时间值很明确;
C.此格式不受SET DATEFORMAT 设置或SET LANGUAGE 设置的影响。
2004-05-23T14:25:10
2004-05-23T14:25:10.487
如果一个设备上存储有下一次的同步锚号,在下一次同步的时候,就需要先与另一台设备的上次的锚号进行比较。如果一致,就可断定上次同步的时候,没有发生中断,没有发生失败。
如果不一致,说明需要重新同步。
另一个设备的Next同步锚需要等到下一次同步的时候进行存储。在SyncML服务器必须存储的Next同步锚由客户端发送过来的。