SyncML学习笔记
一. 什么是同步锚?
同步锚是一个字符串,该字符串的含义是代表一个同步事件。换言之:
Last同步锚:代表上次的同步事件;
Next同步锚:代表当前的同步事件。
二. 同步锚有什么作用?用来做什么用的?
1.目的作用
为了数据同步的完整性
2.解决的问题是:
数据同步数据的时候,同步到一部分的时候,突然中断(如因为掉电,掉线等),下次同步该如何同步?
3.解决办法:
A. 在同步初始化的时候,发送Last和Next锚,给对方;
B.如果对方Next锚有保存,将该Next锚与对方发过来的Last锚进行比较:
如果相等,说明上一次同步没有发生中断,造成数据不完整,也就是说上一次同步是有效的;
如果不相等,要求对方即另一台设备重新发同步请求指令;
锚,是用来同步用的,保证所同步的数据完整,无遗漏,无差错。
三. 同步锚分为哪几种同步锚?
分为两种,分别是Last和Next。
四. 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这两种锚?
在同步初始化的时候,Last同步锚和Next同步锚都需要发送给对方。
六. 如何发送Last同步锚和Next同步锚给对方?
1.在同步初始化的时候;
2.通过DTD元信息,即Meta信息;
七. 如何表示锚?或者说锚的数据类型是什么?
锚是用字符串来表示,而字符串的格式通常是序列号或者ISO 8601格式的扩展表示的基本格式的日期/时间戳。
八. 锚是什么时候进行更新的?
锚是保持在数据库中,当数据同步完成之后,才能更新。
九. Client客户端的发送的两个锚Last和Next来自哪里?
1.Last锚的来自何方
Last锚就是Client客户端本地数据库存储的锚信息;
2.Next锚的来自何方
Next锚是当前准备同步的时候,新产生的一个锚信息;
十. Server服务端收到Client客户端发送两个锚Last和Next之后是如何使用的?
1.Last锚的使用
Server将Client客户端发送过来Last锚,与存储在本地锚,做比较用;
2.Next锚的使用
如果同步完成,Server将Client客户端发送过来Next锚予以保存,就是替换掉原来本地存储的锚;
十一. 在手机和PC两端的数据库,锚都只有一个字段,不是两个字段,Last和Next锚都是一个逻辑意义。
十二. PB,SMS,Email,日历等同步应用数据库,都是有一个锚的;
十三. 同步操作序列的示例说明:
第一步:客户端发送同步信息
客户端发送Last锚和Next锚等信息给Server服务端;
第二步:服务端回应同步信息
Server服务端收到信息之后,不管是否需要同步,都要回应。
在本图中,Server服务端回应的是“OK”。因为客户端发送Last锚与Server存储的锚是一样的;
第三步:更新服务器锚信息
同步会话#1结束之后,Server服务端用客户端发送Next锚替换存储的锚信息;
第四步:更新客户端信息
Client客户端用Next锚替换掉,Client客户端上的锚信息;
十四. Client端锚的数据表如何设计
序号 |
字段 |
数据类型 |
字段功能描述 |
1 |
id |
integer |
每条记录的唯一标示 |
2 |
imei |
char(32) |
手机的IMEI号码 |
3 |
anchor |
datetime |
与Server成功同步后Anchor值 |
十五. Server端锚的数据表如何设计
序号 |
字段 |
数据类型 |
字段功能描述 |
1 |
id |
integer |
每条记录的唯一标示 |
2 |
pcid |
char(32) |
PC电脑的唯一标示 |
3 |
anchor |
datetime |
与Client成功同步后Anchor值 |
十六. 数据同步开始之后,怎么知道哪些信息需要同步呢?
查询ChangeLog信息变化表,来得到哪些信息需要同步。
十七. ChangeLog信息变化表用来做什么用?
用来记录数据库中的数据项一旦发生变化,记录其发生改变,也就是一张跟踪数据库中的数据项发生变化的Log信息表。
注意:一定要记录信息发生变化的类型,是修改,是新增还是删除。
十八. 信息发生变化,有哪几种类型?
1.修改;
2.新增;
3.删除;
十九. ChangeLog记录信息变化表是如何设计的?
序号 |
字段 |
数据类型 |
字段功能描述 |
1 |
id |
integer |
每条记录的唯一标示 |
2 |
xx_id |
integer |
如联系人(或者短信)记录的ID |
2 |
change_time |
datetime |
记录信息发生变化时间 |
3 |
type |
integer |
记录信息变化的类型 |
记录信息变化的类型说明:
1代表修改;
2代表新增;
3代表删除;
二十. 双向同步的过程是怎么样?
1.客户端发送同步请求;
2.服务器端回应客户端的同步请求;
3.客户端提交数据;
4.服务器端提交数据;
5.客户端显示数据更改情况;
6.服务器端确认更改;
二十一. 同步类型
序号 |
同步类型 |
含义描述 |
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) |
普通的同步类型,客户端和服务器相互交换修改数据,客户端首先发送修改. |
二十二. ISO 8601格式的介绍:
1.格式:
yyyy-mm-ddThh:mm:ss[.mmm]
T表示后面是日期时间值的时间部分。
若要使用ISO 8601 格式,必须按此格式指定每一个元素。这也包括格式中所示的标点符号。
2.格式说明:
A.方括号表示毫秒成分的这个小数部分是可选的;
B.时间成分以 24 小时格式指定。
3.使用ISO 8601 格式的优势:
A.它是一个国际标准;
B.使用此格式指定的日期时间值很明确;
C.此格式不受SET DATEFORMAT 设置或SET LANGUAGE 设置的影响。
4.按ISO 8601格式指定的日期时间值的两个示例:
2004-05-23T14:25:10
2004-05-23T14:25:10.487
如果一个设备上存储有下一次的同步锚号,在下一次同步的时候,就需要先与另一台设备的上次的锚号进行比较。如果一致,就可断定上次同步的时候,没有发生中断,没有发生失败。
如果不一致,说明需要重新同步。
另一个设备的Next同步锚需要等到下一次同步的时候进行存储。在SyncML服务器必须存储的Next同步锚由客户端发送过来的。