详细描述
图1示出网络的一个示例性实施例。图1示出网络100的框图。网络100可以表示适用于实现各种实施例的通用网络体系结构。网络100可以包括多个元素。元素可以包括被安排来执行特定操作的任何物理或逻辑结构。视给定的一组设计参数或性能约束的需要,每一元素可被实现为硬件、软件、或其任意组合。硬件元素的示例可以包括处理器、微处理器、电路、电路元素(例如,晶体管、电阻器、电容器、电感器等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、存储器单元、逻辑门、寄存器、半导体设备、芯片、微芯片、芯片组等。软件的示例可以包括任何软件组件、程序、应用软件、计算机程序、应用程序、系 统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、接口、软件接口、应用程序接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、文字、值、符号、或其任意组合。虽然图1中示出的网络100在特定拓扑中具有有限数量的元素,但可以理解,网络100视给定实现所需在另选拓扑中可以包括更多或更少元素。各实施例在该上下文中不受限制。
例如,如图1所示,网络100可以包括各种元素,如计算阵列140、服务器150、网络160、负载均衡器170、和客户机设备180-1-s。例如,在一实施例中,服务器150可以被实现为web服务器。web服务器可以包括能够接受来自客户机设备(例如,客户机180-1-s和/或计算设备122-1-n)的超文本传输协议(HTTP)请求以提供网页的计算设备。网页通常是使用诸如超文本标记语言(HTML)、可扩展标记语言(XML)、可扩展超文本标记语言(XHTML)、MICROSOFT WORD
标记语言(WordML)等某种形式的标记语言生成的文档。网络160可以包括使用诸如传输控制协议和网际协议(TCP/IP)等一种或多种因特网协议的分组网络。负载平衡器170可以包括以计算资源被以高效的方式使用的方式向一组联网的计算机服务器(例如,计算阵列140)分派工作负载的设备。负载平衡器170可以使用例如计算机、服务器、虚拟服务器、网络设备等来实现。
在各实施例中,网络100可包括各种计算设备。例如,在各实施例中,计算阵列140可以包括多个计算设备122-1-n。类似地,客户机设备180-1-s也可被实现为各种类型的计算设备。计算设备的示例可包括,但不一定限于,计算机、计算机系统、计算机子系统、工作站、终端、服务器、web服务器、虚拟服务器、个人计算机(PC)、台式计算机、膝上型计算机、超膝上型计算机、便携式计算机、手持式计算机、个人数字助理(PDA)、移动计算设备、蜂窝电话、组合蜂窝电话/PDA、数字视频设备(例如,数码相机、视频摄像机、或摄像放像一体机)、数字音频设备(例如,MP3播放器)、单向寻呼机、双向寻呼机、上述示例中任一个的虚拟实例化、以及任何其它电子、机电或电气设备。各实施例在该上下文中不受限制。
例如,在一实施例中,计算阵列140可被实现为服务器场,其中计算设备 122-1-n的每一个都表示服务器、虚拟服务器、虚拟机、单板计算机(SBC)、服务器刀片、web服务器等。服务器场一般是通常由公司维护以实现超出一个机器的能力的服务器需求的计算机服务器的集合。通常,服务器场将主服务器和后备服务器两者同时分配给单个任务,以便在主服务器发生故障的情况下,后备服务器将接管主服务器的功能。例如,服务器场通常被用来提供web主存服务。web主存服务是向个人和组织提供在线系统以供存储信息、图像、视频、音频、文本、动画、电影、图片或可经由万维网(WWW或“web”)访问的任何其它形式的web内容的一类因特网主存服务。web主机是在其拥有的服务器上提供空间以供其客户机使用以及提供因特网连接的公司,通常位于数据中心中。web主机还可以为其不拥有的、位于其数据中心中的服务器提供数据中心空间和到因特网的连接。
图1还示出计算设备122-1的更详细的框图。计算设备122-1可以表示任何计算设备122-1-n。此外,计算设备122-1也可以表示任何客户机设备180-1-s。在其最基本的配置106中,计算设备122-1通常包括至少一个处理单元102和存储器104。存储器104可以使用机器可读的或计算机可读的、能够存储数据的任何介质来实现,包括易失性和非易失性存储器。例如,存储器104可以包括只读存储器(ROM)、随机存取存储器(RAM)、动态RAM(DRAM)、双数据率DRAM(DDRAM)、同步DRAM(SDRAM)、静态RAM(SRAM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、诸如铁电聚合物存储器等聚合物存储器、奥氏存储器、相变或铁电存储器、硅-氧化物-氮化物-氧化物-硅(SONOS)存储器、磁卡或光卡、或适于存储信息的任何其它类型的介质。如图1所示,存储器104可以存储各种软件程序,如一个或多个应用程序118、服务器同步模块120和附带数据。
计算设备122-1还可以具有在配置106之外的另外的特征和/或功能。例如,计算设备122-1可以包括可移动存储108和不可移动存储110,这些存储还可以包括如前所述的各种类型的机器可读的或计算机可读的介质。计算设备122-1还可以具有一个或多个输入设备114,如键盘、鼠标、笔、语音输入设备、触摸输入设备等。诸如显示器、扬声器、打印机等一个或多个输出设备116 也可以被包括在计算设备122-1中。
计算设备122-1还可以包括允许计算设备122-1与其它设备进行通信的一个或多个通信连接112。通信连接112可以包括各种类型的标准通信元件,如一个或多个通信接口、网络接口、网络接口卡(NIC)、无线电、无线发射机/接收机(收发机)、有线和/或无线通信介质、物理连接器等。通信介质通常以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并包括任意信息传送介质。术语“已调制数据信号”指的是其一个或多个特征以在信号中编码信息的方式被设定或更改的信号。作为示例而非局限,通信介质包括有线通信介质和无线通信介质。有线通信介质的示例可以包括导线、电缆、金属线、印刷电路板(PCB)、背板、交换光纤、半导体材料、双绞线、同轴电缆、光纤、经传播的信号等。无线通信介质的示例可以包括声学、射频(RF)频谱、红外和其它无线介质。此处使用的术语机器可读介质和计算机可读介质旨在包括存储介质和通信介质两者。
计算设备122-1-n的每一个都可以包括多个数据库。如参考计算设备122-1详细示出的,计算设备122-1可以被耦合到数据库124、126。每一数据库可被安排成存储用于计算设备122-1、应用程序118、服务器同步模块120等的各种类型的数据。例如,在一个实施例中,数据库124可以存储客户机内容列表130、服务器内容列表132、共享内容列表134等等。客户机内容列表130可以包括表示诸如一个或多个客户机180-1-s等客户机所支持的结构化内容类型的结构化内容值。服务器内容列表132可以包括表示诸如一个或多个服务器122-1-n等服务器所支持的结构化内容类型的结构化内容值。共享内容列表134可以包括表示一个或多个客户机180-1-s和一个或多个服务器122-1-n共享的结构化内容类型的结构化内容值。可以用计算设备122-1来实现其它类型的数据和数据库,且这些实施例在该上下文中不受限制。
在一般的操作中,网络100可以帮助由计算阵列140的一个或多个计算设备122-1-n存储或执行的一个或多个应用程序与由一个或多个客户机设备1801-s存储或执行的一个或多个应用程序之间的同步操作。假定计算设备122-1-n的每一个都实现一个或多个应用程序118,如基于服务器的web应用程序。基于服务器的web应用程序的示例可包括
公司生产的
SERVICES(WSS)2.0版、3.0版以及各种变体(此处统称为“WSS应用程序”或“SharePoint应用程序”)。WSS3.0版是例如向诸如客户机180-1-s等各客户机提供基本团队服务、门户网站和内联网功能的集成的应用程序套件。用于WSS3.0版的用户数据或内容数据可由数据库124、126存储。此外,一个或多个计算设备122-1-n可以实现构建在WSS3.0版之上的第三方应用程序,例如,诸如SharePoint门户服务器(SPS)2003或Office SharePoint服务(OSS)2006。虽然作为示例参考WSS应用程序和附带的第三方程序描述了一些实施例,但可以理解,可以使用此处描述的同步技术来同步由单个或多个计算设备执行的任何应用程序。各实施例在该上下文中不受限制。
WSS3.0版提供了供多个用户以高效的方式共享数据的平台。例如,用户可以被组织成团队,每一团队具有共享日历、联系人列表、任务列表、电子邮件、讨论板、文档等等。为了增加这些共享数据的可用性,网络100的各元素可以被组织为间歇同步数据库系统(ISDB)。ISDB例如允许各种物理或逻辑客户机实体从数据库124、126将信息部分下载或复制到诸如客户机设备180-1等客户机设备。假定客户机设备180-1包括诸如微软公司生产的MICROSOFTOUTLOOK
等应用程序。Microsoft Outlook可以从如使用WSS3.0版维护的服务器122-1导入共享数据。因此,用户可具有诸如手持式计算设备等执行Microsoft Outlook的本地版本的便携式设备,并从服务器122-1下载共享数据的各部分。客户机设备180-1可以在没有到服务器122-1的恒定连接(例如,在线)的情况下修改本地复制的数据,诸如通过添加约会、删除联系人、修改任务、生成笔记、更新项目时间线等来修改。同时,其它用户也可修改来自数据库124、126的本地复制的数据。为了维持数据完整性,客户机设备180-1可能需要周期性地或间歇地与服务器122-1同步以反映对在两个设备之间共享的任何结构化内容或数据集的改变。
为了执行同步操作,每一客户机设备180-1-s可以包括客户机同步模块182,并且每一服务器122-1-n可以包括服务器同步模块120。同步模块120、182可以具有变化的集成水平以允许服务器122和客户机设备180分别同步两个设备支持的结构化内容或数据集。例如,在一个实施例中,客户机设备180 可以包括由服务器122执行的WSS应用程序在同一层集成的Microsoft Outlook客户机应用程序。这一集成可以包括在Microsoft Outlook和WSS应用程序之间同步数据。例如,WSS应用程序可包括存储在WSS应用程序中的共享日历、联系人、任务、电子邮件以及讨论板。各实施例可定义用户模型、驱动程序、规范、数据模式以及同步基础结构以供Microsoft Outlook的用户与WSS应用程序数据交互。尽管仅作为示例,某些实施例可被描述为在Microsoft Outlook和WSS应用程序之间同步结构化内容,但可以理解,结构化内容的同步可以视给定一组设计参数和性能约束对任何应用程序和计算平台实现。各实施例在该上下文中不受限制。
当试图同步诸如服务器122-1和客户机设备180-1等两个或多个应用程序和/或设备时有若干设计考虑事项。例如,为将网站用作中央数据存储库,数据应被快速同步到其它应用程序而同时在网站服务器上生成最小负载。此外,用户通常仅对总体数据中的小范围感兴趣,且因此用户需要可被容易发现的位置来开始对于感兴趣的相关数据的同步操作。另外,不同同步客户机只能与来自服务器的特定类型的数据同步。类似地,某些同步客户机可以支持网站服务器不支持的数据类型或值,而网站服务器可以支持同步客户机不支持的数据类型或值。在另一示例中,网站和同步客户机可以用不同的语言来运行。在又一示例中,多个同步客户机可能在不连接到服务器的同时更新相同的数据,因此需要采取措施来确保数据在同步事件期间不丢失。在再一示例中,用户需要与在专用网络和诸如因特网等公共网络两者内的网站同步。在还有一个示例中,同步来自服务器的内容的客户机不能准确地预测内容会以什么频率改变,导致服务器上的额外负载或同步的客户机上的陈旧内容。最后,服务器管理员希望能够控制通过同步客户机而在服务器上生成的负载。
为了解决这些和其它问题,服务器122和/或客户机设备180可以利用结构化内容来实现改进的同步技术。结构化内容可以涉及具有诸如宽度、长度、位大小、字节大小、句法、字段、值、代码、标志等一个或多个定义的结构参数的任何类型的媒体内容(例如,文本、音频、视频、图像、图片、动画、符号、字符、数字、图标等等)。结构化内容可包括支持诸如MICROSOFTOUTLOOK、MICROSOFT
MICROSOFT
MICROSOFT
MICROSOFT
MICROSOFTWORD、MICRO SOFT
WSS应用程序、SPS应用程序等任意数目的应用程序的应用程序数据和/或用户数据。例如,在一个实施例中,结构化内容可包括用于Microsoft Outlook的应用程序数据和/或用户数据,诸如来自日历列表、任务列表、联系人列表、笔记或备忘录列表、邮件列表等的一个或多个项。服务器同步模块120和客户机同步模块182可被集成以标识在服务器122和客户机180之间共享的结构化内容类型。对应于在服务器122和客户机180之间共享的结构化内容类型的结构化内容信息然后可被同步。
使用结构化内容来执行同步操作可以提供优于常规的同步技术的若干优点。例如,在各实施例中,设备之间的发起同步操作可以用多种方式来改进。例如,可以为同步客户机生成网络地址和/或超链接以发起基于服务器和/或客户机支持的特定内容类型的同步操作。可生成不同超链接以发起对不同内容范围的同步操作。在另一示例中,同步操作可以基于所同步的内容的数量(例如,仅同步标题对比同步整个内容集)来不同地发起。在又一示例中,可使用协议处理程序来从web浏览器发起同步操作。
一旦发起了同步操作,各实施例可改进内容实际如何被同步。例如,可使用服务器侧改变日志来仅同步改变的内容。可来回传递令牌以仅获得自从前一同步事件以来做出的新改变。在另一示例中,同步操作可以仅支持结构化模式中个别地请求或定义的字段。在又一示例中,同步操作可以支持诸如在文件夹分层结构中创建的不同分层范围。在再一示例中,可以生成同步视图以显示由各字段值确定的经过滤的内容集。在还有一示例中,某些实施例可以支持使用分页技术对非常大的数据集的同步。在另一示例中,某些实施例可以使用版本历史来执行冲突检测和自动解决。在又一示例中,某些实施例可以支持使用“E标签”来进行冲突解决的附件同步。在另一示例中,某些实施例可使用特性包(property bag)支持同步网站和客户机之间的模式失配。在又一示例中,某些实施例可使用字段值映射支持服务器/客户机语言失配。在再一示例中,某些实施例可使用读/发送/刷新模式支持读取和更新。最后,某些实施例可向客户机提供其可同步来访问来自内部专用网络或外部公共网络的网站的替换统一资源定位符(URL)。
为进一步改进同步操作,各实施例可改进关于何时将客户机设备与网站同步的定时问题。例如,某些实施例可以通过向同步客户机提供建议的同步间隔(例如,每隔P分钟的客户机同步)来管理客户机负载和/或服务器负载。建议的同步间隔可以表示最小同步间隔、最大同步间隔或两者之间的某一值。建议的同步间隔可以基于存储在服务器上的历史内容改变数据(例如,网格同步),或基于来自客户机的先前的同步请求的结果(例如,指数型衰减)。
为了与服务器122同步结构化内容,客户机设备180可使用SharePoint.StssyncHandler ActiveX控件。该控件被安装在具有Microsoft Outlook的客户机设备180上,并指示客户机设备180上是否安装了Microsoft Outlook且能够同步特定类型的列表。例如,在WSS3.0板中,可被同步的列表的类型包括日历列表、联系人列表、文档列表、任务列表、讨论列表以及其它列表。
以上各实施例的操作可以参考以下附图和所附示例来进一步描述。一些附图可以包括逻辑流程。虽然此处呈现的这些附图可以包括特定的逻辑流程,但可以理解,逻辑流程仅仅提供如何实现此处描述的一般功能的示例。此外,除非另外指明,否则给出的逻辑流程不必要以所呈现的顺序执行。另外,给出的逻辑流程可由硬件元素、由处理器执行的软件元素、或其任意组合来实现。各实施例在该上下文中不受限制。
图2示出逻辑流程的一个实施例。图2示出逻辑流程200。逻辑流程200可以表示此处描述的诸如网络100、计算设备112-1-n和/或客户机设备180-1-s等一个或多个实施例所执行的操作。例如,在某些实施例中,可在框202处在同步操作之前标识在服务器和客户机之间共享的某些结构化内容类型。一旦被标识,然后可在框204处同步对应于该结构化内容类型的结构化内容。以此方式,同步可以集中于如由结构化内容类型所标识的共享的结构化内容,而非客户机和/或服务器存储的全部数据集。因此,可减少同步时间和资源,由此对于用户增强总体设备操作和网络服务。
图3示出第一消息流的一个实施例。图3示出其中客户机执行标识操作的消息流300。如图3所示,客户机设备180可向服务器122发送消息302,其中消息302包括对服务器内容列表的请求。服务器122可以接收消息302,并从数据库124中检索服务器内容列表132。服务器122可以向客户机设备180 发送消息304,其中消息304包括具有表示服务器122所支持的结构化内容类型的结构化内容值的服务器内容列表132。客户机设备180可接收服务器内容列表132,并检索客户机内容列表130。客户机内容列表130可包括表示客户机所支持的结构化内容类型的结构化内容值。客户机设备180可以将服务器内容列表132与客户机内容列表130进行比较以找出匹配的内容类型。客户机设备180可以生成共享内容列表134,并向服务器122发送消息306。消息306可以包括同步请求和/或共享内容列表134。服务器122可以接收消息306,并且服务器122和客户机设备180可以开始同步操作以如箭头308所示地同步服务器122和客户机180所支持的结构化内容类型。
图4示出第二消息流的一个示例性实施例。图4示出其中服务器执行标识操作的消息流400。如图4所示,服务器122可以经由消息402来接收客户机内容列表130。服务器122可检索服务器内容列表132,并比较两个内容列表。服务器122可以根据比较生成具有表示客户机设备180和服务器122所支持的结构化内容类型的结构化内容值的共享内容列表134。服务器122可经由消息404将共享内容列表134发送给客户机设备180。客户机设备180可以接收共享内容列表134,并经由消息406发送根据共享内容列表134来同步结构化内容类型的同步请求。服务器122可接收该同步请求,并且服务器122和客户机设备180可以如箭头408所示地根据该同步请求来执行同步操作。
在各实施例中,设备之间的发起同步操作可以用多种方式来改进。例如,可以为同步客户机生成网络地址和/或超链接以基于服务器和/或客户机支持的特定内容类型来发起同步操作。可生成不同超链接以发起对不同内容范围的同步操作。在一个实施例中,服务器同步模块120可以生成一超链接以发送具有至少一个结构化内容类型的同步请求。结果,用户可用无缝的方式选择性地与服务器122同步特定的结构化内容类型。
在各实施例中,同步操作可以基于所同步的内容数量来不同地发起。例如,在一个实施例中,服务器同步模块120可以确定要同步的结构化内容的数量。服务器同步模块120可以基于所确定的数量来设置同步参数。服务器122-1可以根据同步参数向客户机180-1发送同步信息。例如,假定结构化内容类型是电子邮件消息。如果所确定的数量是要在服务器122-1和客户机180-1之间同 步的较大量电子邮件消息,则服务器122-1可以设置一同步参数以指示最初只需同步电子邮件标题而非整个电子邮件内容。相反,如果所确定的数量是较少量的电子邮件消息,则服务器122-1可以设置一同步参数以指示要与客户机180-1同步整个电子邮件内容。在另一示例中,假定结构化内容类型是文档。如果所确定的数量是要在服务器122-1和客户机180-1之间同步的大量文档,则服务器122-1可以设置一同步参数以指示最初只需同步每一文档的特定部分而非每一文档的全部正文。相反,如果所确定的数量是较少量的文档,则服务器122-1可以设置一同步参数以指示要与客户机180-1同步每一文档的全部内容。该同一技术也可通过检查文档的总大小来应用,其中较大的文档每次仅发送一部分,而较小的文档在一次交易中全部发送。这些仅是几个示例,并且可使用结构化内容类型的其它特征来设置同步参数。
在各实施例中,可使用协议处理程序来从web浏览器发起同步操作。一旦标识了共享结构化内容类型,则客户机180-1上的web浏览器可以提供一个或多个URL来如上所述地发起同步操作。为此,客户机同步模块182可使用协议处理程序来向服务器122-1发送不同的同步请求。
一旦发起了同步操作,各实施例可改进内容实际如何被同步。例如,可使用服务器侧改变日志来仅同步改变的内容。例如,在一个实施例中,服务器同步模块120可以接收同步特定结构化内容类型的同步请求。服务器同步模块120可以使用改变日志来确定该结构化内容类型所指示的结构化内容是否已被修改。服务器122-1可以基于该确定向客户机发送同步信息。
对于读/写同步,Microsoft Outlook需要定义的技术来从WSS应用程序同步改变。这可使用改变日志和附带的web服务API来实现。例如,WSS3.0版支持按虚拟服务器、站点和列表的改变日志。这将允许Microsoft Outlook能够特别地轮询增加的、编辑的、删除的、重命名的和移动的项。另外,可以实现web服务来允许Microsoft Outlook执行对改变日志项的“成批”获取。
各实施例可使用版本历史来确定结构化内容的多个版本是否已被独立修改。某些实施例可以使用版本历史来执行冲突检测和自动解决。版本历史是用于在对等环境中自动解决一类特定同步冲突的机制。特别地,它可自动解决因对一个项的一致的顺序改变而引起的冲突。
作为示例,假定第一用户将一个项同步到第一客户机设备180-1,诸如在办公室使用的台式计算机。第一用户对该项做出一些改变,但是没有将这些改变复制回服务器122-1。第一用户将第一客户机设备180-1与诸如PDA等第二客户机设备180-2同步,并离开办公室回家。当第一用户到家时,该第一用户将第二客户机设备180-2与诸如家庭PC等第三客户机设备180-3同步。第一用户对该项做出进一步的改变,之后将其从第三客户机设备180-3同步到服务器122-1。第二天,第一用户上班并将第一客户机设备180-1与服务器122-1同步。第一客户机设备180-1试图将其具有的更新的项发送给服务器122-1,但是服务器122-1检测到自从与第一客户机设备180-1的前一次同步以来对该项有改变,因此引发冲突。然而,该冲突并不是真正的冲突,因为驻留在服务器122-1上的该项的更新的版本在第一用户将第三客户机设备180-3与服务器122-1同步时已经包括了在第一客户机180-1上做出的改变某些实施例可使用版本历史来检测此类情形并自动解决该冲突。
在以上情形中,项上的单个版本号可能不足以解决冲突。例如,如果第一用户未从第三客户机设备180-3与服务器122-1同步将会如何。相反,假定第二用户对该项做出了不相关的改变。在这一情况下,的确存在冲突。单个版本号不足以区分这两种情形。版本历史技术存储了帮助解决这一问题的附加信息。
特别地,可使用版本历史技术来确定是否有一个项的多个版本(例如,版本A和版本B),以及一个版本是否包括在另一版本中做出的改变(例如,版本B是否包括在版本A中做出的改变)。在这一情况下,所述项的文本检查被证明是困难且不准确的。例如,考虑其中版本B的确包括来自版本A的改变,然而版本B中的改变之一是移除在版本A中添加的行的情形。
可使用版本历史技术来记录作者列表以及对每一作者的递增的改变号码,该改变号码指示这些作者依次做了什么改变。这一情况下的“作者”是由全局用户标识符(GUID)表示的计算机。版本历史特性因此可包括候选GUID列表和改变号码,如下:
{199A4AEA-A573-40CB-BB3C-7A66C0375104:1,201B4AEA-A573-40CB-BB3C- 7A66C0375104:2,185D4AEA-A573-40CB-BB3C-7A66C0375104:3}
每次一特定计算设备编辑一给定项,适当的同步模块(例如,同步模块120和/或182)取上一个改变号码,将其递增一,然后将其写在其GUID旁边。通过比较每一版本的最高改变集,在版本A和版本B之间自动解决了冲突。“最高改变集”可以包括具有最高号码的GUID和号码的对。如果版本A的最高改变集被包括在版本B中,并且版本B的最高改变集没有被包括在版本A中,则版本B较新,并且解决冲突以使版本B为胜者。然而,如果版本A的最高改变集未被包括在版本B中且版本B的最高改变集未被包括在版本A中,则版本B不包括在版本A中做出的所有编辑。在这一情况下用户将需要手动解决冲突。
继续上面的示例,假定第一用户将一项目向下同步到第一客户机设备180-1。服务器同步模块120可以在数据库124中维护版本历史。客户机同步模块182也可在客户机设备180-1-s上维护版本历史。此时,该版本历史可表现如下:
版本历史:{服务器_GUID:1}
第一用户然后在第一客户机设备180-1上编辑该项目。该版本历史现在可表现如下:
版本历史:{服务器_GUID:1,工作_GUID:2}
第一用户将该项目同步到第二客户机设备180-2,然后从第二客户机设备180-2同步到第三客户机设备180-3。由于没有对该项目的编辑,因此在版本历史中没有相应的改变。第一用户在第三客户机设备180-3上编辑该项目。该版本历史被更新如下:
版本历史:{服务器_GUID:1,工作_GUID:2,家_GUID:3}
第一用户从第三客户机设备180-3同步到服务器122-1。
第一用户第二天回去上班并将第一客户机设备180-1与服务器122-1同步。第一客户机设备180-1上的客户机同步模块182可以具有如下版本历史:
{服务器_GUID:1,工作_GUID:2}
服务器122-1上的服务器同步模块120可以具有如下版本历史:
{服务器_GUID:1,工作_GUID:2,家_GUID:3}
对于版本A和版本B的版本历史的比较揭示A中的最高改变集(工作GUID:2)被包括在版本B中,但是版本B的最高改变集(家_GUID:3)不被包括在版本A中。服务器同步模块120因此知道版本B包括了对版本A做出的所有编辑,但是版本A不包括在版本B中做出的所有改变。版本B是版本A的超集,因此在冲突中获胜。
然而,假定第一用户从未从第三客户机设备180-3与服务器122-1同步,而是第二用户对驻留在服务器122-1上的该项目做出了改变。可使用版本历史来检测此情形中的冲突。在这一情况下,第四客户机设备180-4的客户机同步模块182可以具有以下版本历史:
{服务器_GUID:1,工作_GUID:2}
同时,服务器122-1的服务器同步模块120可以具有以下版本历史:
{服务器_GUID:1,用户2_工作_GUID:2}
对版本A和版本B的版本历史的比较现在揭示版本A中的最高改变集(工作_GUID:2)未被包括在版本B中,且版本B中的最高改变集(用户2_工作_GUID:2)未被包括在版本A中。因此,版本B不是版本A的超集,版本A 不是版本B的超集,且服务器同步模块120检测到需要解决的真正冲突。
各实施例可使用特性包来检测数据模式冲突。某些实施例可使用特性包支持服务器122和客户机180之间的模式失配。特性包可以指应用程序和/或设备使用的各种数据模式的一组字段定义。特性包可用于在按需的基础上定义字段而非一组固定或硬编码的字段。例如,客户机设备180执行的Microsoft Outlook的任务模式可能需要服务器122的WSS应用程序不可用的某些字段,反之亦然。特性包可用于在特设的基础上为可同时由Microsoft Outlook和WSS应用程序两者使用的各种列表或应用程序定义字段。以此方式,服务器122和客户机180之间的模式失配可被纠正而不必更新或修改两个设备执行的实际应用程序。
各实施例可以使用字段值映射来检测语言冲突。某些实施例可以使用字段值映射来支持服务器122-1和客户机180-1之间的语言失配。该特征对于支持其中客户机设备180-1和服务器122-1不使用同一语言的国际情形是合乎需要的。例如,Microsoft Outlook具有基于“状态”字段和“优先级”字段的值来执行任务的逻辑。服务器122-1可以基于服务器的语言将不同的值写入这些字段中。例如,在英语语言中,状态字段可以包括诸如“Not Started”(未开始)、“Deferred”(推迟)、“Completed”(完成)等表达式。Microsoft Outlook需要知道如何可靠地将这些值映射到其理解的值。在一个实施例中,可以向Microsoft Outlook能使用的列表的模式添加映射部分以将写入的值映射到其理解的值。
各实施例可使用一种或多种分页技术来同步结构化内容类型。某些实施例可以使用各种分页技术来支持服务器122-1和客户机180-1之间非常大的数据集的同步。为增强服务器122-1和客户机180-1的性能,可使用页请求来获得在列表中已经改变的一组项。服务器122-1可以仅返回最后Q个项(例如,最后100个项)而非返回已经改变的所有项。该特征在客户机180-1具有到服务器122-1的较慢的通信连接或在服务器122-1在列表中具有数千或数百万个项时特别有用。大量的项可造成性能瓶颈,尤其是在例如在客户机设备180-1和服务器122-1上的Microsoft Outlook之间同步地址簿结构化内容类型的时候。
给定的分页技术可以用任意数量的方式来实现。例如,在一个实施例中, 服务器同步模块120可以被安排成支持GetListChangesSinceToken(获取自从令牌以来的列表改变)web服务上称为“rowLimit”(行限制)的特性,该特性指定要返回的项的最大数目。例如,“rowLimit=100”将返回自从改变令牌的值以来已经更新的前100个项。如果未指定该特性,则将返回自从改变令牌以来改变的所有项。
当服务器122-1的WSS应用程序接收到具有项限制的请求时,删除操作可被排除在项限制之外。可在列表查询中传递一参数以限制返回给rowLimit的项的个数。如果少于该数目的项改变,则将随着项一起返回更新的改变令牌。然而,如果多于该数目的项改变,则不更新改变令牌,并且可返回最初传入的相同的改变令牌。也可返回ListItemCollectionPositionNext(列表项集合下一位置)的值。在接收到ListItemCollectionPositionNext的值时,客户机设备180-1应重新查询服务器122-1,同时发送改变令牌和该值两者。服务器122-1将运行一新查询以返回从ListItemCollection PositionNext的开头开始的下rowLimit个项。该“如果”框然后可按需重新执行。
值得注意的是,客户机180-1需要确保在处理更新之前处理删除。在客户机180-1接收到对已经删除的项的删除的情况下,它应抑制该错误并继续。在客户机180-1尝试对已经在服务器122-1上删除的项的更新的情况下,客户机180-1应抑制该错误并继续操作。
各实施例可向客户机180-1提供其可用于经由内部专用网络或外部公共网络(例如,公共因特网)与服务器122-1同步的替换URL。例如,在一个实施例中,服务器同步模块120可以生成第一网络地址从内部专用网络发送具有至少一个结构化内容类型的同步请求,并生成第二网络地址以从外部公共网络发送具有至少一个结构化内容类型的同步请求。第一和第二地址可包括例如使用超链接实现的URL。
作为示例,服务器同步模块120可被安排成响应于同步请求传送具有返回数据的替换域映射。这允许其中用户导航到专用网络(例如,企业内联网)内的列表并将该列表同步到诸如Microsoft Outlook等本地应用程序的情形。用户然后回家,使用远程过程调用(RPC)通过超文本传输协议(HTTP)连接到邮件,并期望其SharePoint列表也能同步。如果服务器122-1(例如,SharePoint 站点)也被展示在公共网络(例如,诸如因特网等外联网)上,则用户即使在该URL的域不同的情况下也能同步该列表。
替换域映射可用任意数目的方式来实现。例如,在一个实施例中,替换域可按以下顺序返回:
[内联网],[默认],[外联网],[因特网],[自定义]
这些映射可在“listitems”(列表项)标签上的“AlternateUrls”(替换URL)属性中返回。如果映射不存在,则可返回相同的次序,并且为遗漏的域插入逗号如下:
(http://intranet,https://default,https://extranet.com,,http://custom)
这五个替换域映射都可以在中央管理中定义。域可仅包括URL的第一部分,例如““http://www.microsoft.com””或http://msw。客户机应用程序(例如,Microsoft Outlook)负责解析这些域并基于客户机设备180-1-s的状态来确定要使用哪一个。一般而言,客户机180-1应以第一个域开始并按序迭代通过其余的域。
为进一步改进同步操作,各实施例可改进关于何时将客户机设备与网站同步的定时问题。例如,某些实施例可以通过向同步客户机提供建议的同步间隔(例如,每隔R分钟的客户机同步)来管理客户机负载。建议的同步间隔可以表示最小同步间隔、最大同步间隔或两者之间的某一值。例如,在一个实施例中,服务器同步模块120可以生成同步间隔参数。服务器同步模块120可将该同步间隔参数发送给客户机180-1。服务器122-1可以根据同步间隔参数从客户机180-1接收同步请求。
使用建议的同步间隔可提供若干优点。对建议的同步间隔的使用可提高规模,使得大量Microsoft Outllok客户机(例如,100,000个)不会使得SharePoint服务器场(例如,计算阵列140)不可使用。例如,假定Microsoft Outlook具有使得客户机设备180-1每隔60分钟同步每一结构化内容列表的默认同步间隔。假定每一用户最终合计有10个同步的列表,则对服务器122-1的总命中 数可达每天10*24*100,000次,这算出为一天24小时每秒大约278次命中。大约每隔60分钟同步的真正简单同步(RSS)源可使该问题进一步加剧。
可使用各种技术来减小给定服务器122-1-n上的工作负载。例如,在一个实施例中,可在前端上实现对高速缓存列表和/或站点的修改的次数。如果要求自从最后一次高速缓存的列表或站点以来的改变的请求到达服务器122-1修改的次数,则服务器122-1将知道没有改变并且可完全避免查询数据库124、126。高速缓存可能需要以某一定期的间隔,诸如例如大约每隔5分钟过期。被高速缓存的列表或站点的数目可能需要被限制以容纳存储器资源,诸如,例如大约100个列表和/或站点。
减小给定服务器122-1-n上的工作负载的另一技术可以是实现日期/时间自适应同步技术。服务器同步模块120可以通过向客户机设备180-1发送同步间隔参数来减少给定Microsoft Outlook客户机做出的同步请求的数目,该同步检测参数基于利用将诸如工作时段、夜间时段和周末等日期/时间信息计算在内的历史列表改变数据对下一列表改变时间的概率的估计而改变。
在各实施例中,建议的同步间隔可以基于存储在服务器上的历史内容改变数据。例如,在一个实施例中,服务器同步模块120可以基于服务器122-1存储的历史内容改变数据来为客户机180-1生成同步间隔参数。服务器同步模块120可将该同步间隔参数发送给客户机180-1。
基于历史内容改变数据的技术的一个示例可以被称为基于网格的自适应同步(“网格同步”)。SharePoint服务器上的每一列表具有不同的使用特征。多个因素可影响列表使用且因此影响更新频率。这些因素的示例可包括列表类型、站点类型、列表大小、列表定制数量、站点用户数量、用户的地理位置和分布、对站点的总访问数、日时、站点项目的周期中的当前位置(例如,开始、中间、结束或归档)等等。多个此类因素是基于配置的,并且关于使用模式的估计可基于该数据来做出。然而,多个此类因素也是基于时间的。基于时间的因素可对使用模式有显著影响。站点通常本质是循环的,并且网站很少永远以相同的速率使用。此外,人们往往按时间表工作。因此,从晚上10点到早上6点发生的工作的量通常要少于在早上9点和下午5点之间发生的工作的量,即使每一时段都包括8小时。人们也往往不在周末工作。值得注意的是,工作的 本质和工作的地理分布能影响这些因素,并且因此适合使用模式而非试图事先对其进行硬编码是重要的。对减少对服务器的请求数同时仍满足用户期望有显著影响的提议需要涉及基于时间的算法,并且需要对人们工作且因此使用给定站点的方式是敏感的。
从这一观点来看,一个设计考虑事项是向客户机设备180-1提供其接下来应执行同步操作的建议的时间。客户机设备180-1应仅在客户机设备180-1或服务器122-1中任一个上有改变时与服务器122-1同步。因此,可使用概率分析来确定理想同步间隔。管理员可以通过调整其希望客户机设备180-1-s重新同步的概率的阈值来以智能的方式调整网络100的行为。例如,服务器管理员可以调整该概率阈值以使客户机设备180-1在内容有10%的机率被更新时同步。如果这生成太多的服务器负载,则管理员可将该阈值调整为50%概率阈值。管理员可以继续细化该过程,直到网络性能在可接受的参数内。
在某些情况下,对将来列表使用的概率阈值可以基于历史使用数据。列表可包括,例如一个或多个结构化内容类型的数据或项的集合。使用通常遵循模式。人自然是习惯的生物,并且结构化工作环境通常在其创建可预测性时进一步鼓励这一习惯。为表示过去的使用,时间可被划分成网格。假定一周的时间段,则y轴可具有一周的各天,而x轴可具有每天的各小时。在该网格的每一单元格中,可设置指示列表在该时间段内是否被更新的布尔值,其中“1”值表示列表在该时间段内被更新,而“0”值表示列表在该时间段内未被更新。例如,观察周一的行以及上午9:30-9:40的单元格,如果该单元格中的值是“1”,则列表在周一上午9:30到上午9:40之间的某一时刻被修改。下一个“1”可能直到周一的下午3:10-下午3:20才出现。向前移动,监视一周的站点使用提供了完整的网格。如果列表被更频繁地更新则该网格将有更多1值,并且如果列表被较不频繁地更新则具有较多的0值。假定客户机设备180-1在周一上午9:05与服务器122-1同步。在运行了查询来查看是否有任何东西改变之后,服务器122-1现在需要向客户机设备180-1做出关于其何时应执行其下一次同步事件的建议。分析历史数据,发现在周一上午9:30-上午9:40之间发生了更新。基于该历史数据,服务器122-1可以指示客户机设备180-1在上午9:30-上午9:40之间执行其下一次同步。在算法上,这可通过遍历网格直到达到1值来实现。 对于经过的每一单元格,可将单元格时间大小添加到同步之间的建议时间。在该示例中,经过了9:00-9:10单元格、9:10-9:20单元格以及9:20-9:30单元格。服务器122-1因此可以返回建议的同步间隔30分钟。
此时,上午9:30-9:40的建议仅是起始点。更长的时间段将细化建议。继续以上示例,假定列表在第二周的上午9:22被更新。在第三周期间,客户机设备180-1再一次在上午9:05执行与服务器122-1的同步并且服务器122-1需要做出更新的建议。遍历该网格,在上午9:20-9:30单元格中有1值,并且在上午9:30-9:40单元格中有1值。该网格算法在当前单元格处开始,并随着经过每一单元格增加10分钟,直到到达具有1值的单元格。经过了上午9:00-9:10单元格,并经过了上午9:10-9:20单元格。服务器122-1现在向客户机180-1返回值20分钟。然而,基于历史证据,可生成指示列表是否在20分钟之内更新的概率。在从起始时间上午9:05到完成时间上午9:30的两个可能的周一,列表仅在一个周一被更新。基于该历史数据,概率可被计算为1/2,即50%。可向该建议的同步间隔增加10分钟,并且可再次执行概率分析。对于从起始时间上午9:05到完成时间上午9:40的两个周一的数据,列表被更新了两次。因此,对于30分钟的概率为1/2+1/2=2/2,即100%。使用更多数据得到细化的建议。现在变为关于对于服务器管理员而言客户机设备180-1-s多久一次向服务器122-1-n请求信息是轻松对比用户立即拥有最新的数据有多重要的有见识的决策。如果服务器管理员将阈值设为例如50%或更少,则服务器122-1将返回同步间隔20分钟。然而,如果阈值被设在50-100%之间,则服务器将返回同步间隔30分钟。
生成同步间隔的概括算法可如下表示:
P是概率
T是用户定义的阈值
S是每一单元格的时间跨度,在以上示例中为10分钟
C是当前单元格计数,
G[]是网格,假定G[0]表示当前时间处的值
M是网格中的单元格的最大值,在以上示例中是周数
P=0;
For(C=0;P<T;C++)
P=P+G[C]/M;
return C*S
值得注意的是,返回值不必对每一客户机请求重新计算。相反,它可被高速缓存一段时间,并且直到下一时间间隔开始之前都被认为是有效的。在以上示例中,该段时间可达10分钟。
为构建实际网格,每次当修改一个项时,检查列表的最后修改时间。如果列表的最后修改时间发生在与当前时间相同的时间跨度内,则不需要写入改变。例如,发生在上午9:00和上午9:10之间的同一时间段内的两个改变仅需要一次更新。这将写入次数保持为最小,从而有助于锁竞争和规模。如果列表的最后修改时间发生在与当前时间不同的时间跨度中,则当前时间跨度单元格中的值可被递增“1”。在某些情况下,列表的修改时间也需要被更新,尽管WSS3.0版已经处理了这一情况。
该网格算法基于可储存多少数据以及在特定应用程序的使用中什么趋势是常见的,可以在许多维度中缩放。在x方向中,每一单元格的时间跨度可被减小到分钟,或延长到小时或更多。在y维度中,网格可被扩展为包括对于一个月的每天的不同行,或者网格可被折叠到仅表示一天的一行。实际上,它可通过具有两天来以略微更智能的方式折叠,其中一天表示工作日而另一天表示周末。如果网格表示了12小时轮班工作,则网格可具有y行,每一行表示从开始到结束的12小时轮班。
如上所述,站点使用通常遵循可预测周期。这些周期时间段通常在几个月中缓慢变化。为细化网格算法,新近数据可能是比较旧的数据更好的指示符。例如,发生在6个月之前的周一的列表更新通常具有比发生在昨天的小的值。因此,网格算法可通过维护较大的数据集并应用基于时间对该较大集合中的数据不同地加权的函数来细化。或者,可通过使旧数据过期来更有效地使用存储器资源。例如,假定网格每8周被重置。在以上示例中定义的网格中,每一单 元格中的最大值是8。每一单元格因此可仅用3位来表示。
然而,重置网格也移除了可影响网格算法结果的数据。该问题可通过创建从彼此偏移一时间段的两个网格来缓解。例如,第一网格可以在第1周开始记录数据,而第二网格可以在第4周开始记录数据。此时,服务器同步模块120可使用第一网格来进行概率计算。在第8周,第一网格可被重置,并且服务器同步模块120可切换到使用第二网格来执行概率计算。服务器同步模块120可以开始再次在第一网格中记录。以此方式,服务器同步模块120可以不断地从一个网格旋转到下一网格,而永远不必从头开始。在这一情况下,数据流中的不连续性以4周为间隔出现。取决于平滑度的重要性,这可通过添加更多网格来减少。例如,8个网格将导致各自有1周的更微小的不连续性。注意,该系统也可用于通过使用多个网格来生成概率来给予更新近的事件更多能量。
为进一步改进网格算法的性能,可设置最大和最小同步间隔。最小同步间隔应可能默认为单元格跨度的大小,在以上示例中为10分钟。最大间隔的大小取决于系统中的置信度水平。两者都应可由管理员连同阈值一起来配置。这些值可被调整以在使用期间细化系统,尽管在已经处于使用中时改变网格结构(例如,x轴和y轴上的时间表示)可能是麻烦的。应对初始的同步设置默认时间,直到该网格被填充到最小可使用状态。
该方法适用于诸如RSS等其它同步协议。它还适用于诸如搜索爬寻器、索引器和高速缓存内容的代理服务器等领域。尽管该网格算法可以在客户机上实现,但是准确度最有可能降低,因为客户机不知道在服务器上做出的所有改变。该网格算法可在客户机—客户机同步时使用。它也可结合基于通知的同步方法来使用,其中通知处理很少改变的内容,并且该系统处理更频繁改变的内容。
网格算法可取决于给定实现对存储器资源有变化的影响。对数据存储的估计可如下做出:
20分钟跨度
7个不同的天
每张表8周
2张表
=378字节
10分钟跨度
2行(工作日/周末)
每张表6周
2张表
=288字节
除了基于历史数据生成建议的同步间隔之外,建议的同步间隔也可基于来自客户机的先前的同步请求的结果。例如,在一个实施例中,服务器同步模块120可以基于来自客户机180-1的先前同步请求的先前同步结果为客户机生成同步间隔参数。服务器同步模块120可将该同步间隔参数发送给客户机180-1。
作为示例,服务器同步模块120可以执行基于功能的自适应同步来生成同步间隔参数。给定Microsoft Outlook客户机做出的同步请求的数量可以使用某一形式的指数衰减/生长函数来生成。例如,取最后一个同步间隔。如果发生了改变,则将时间间隔减小一指数函数。然而,如果未发生改变,则将时间间隔增加一指数函数。
也可使用其它技术来生成同步间隔参数。例如,可使用最后一次修改的自适应同步技术。该技术通过向客户机180-1发送基于对列表的最后一次修改时间严格改变的同步间隔来减少Microsoft Outlook客户机做出的同步请求的数目。例如,如果列表在上一小时内修改,则在20分钟之后再次同步。如果列表在多于一小时但少于一天之前修改,则在2小时之后再次同步。如果列表在多于一天之前修改,则在一天之后再次同步。在另一示例中,也可使用对多个列表的单个查询技术。该技术通过允许客户机180-1做出一次传入所有感兴趣的GUID列表的一个请求来减少Microsoft Outlook客户机做出的同步请求的数目。可对这些列表批量检查最后一次修改时间,然后服务器同步模块120可以通知客户机设备180-1要显式同步哪些列表。在又一示例中,可使用基于电子邮件通知的同步技术。现有同步技术可使用各种轮询技术,其中客户机在定期或半定期的基础上轮询服务器。在一个实施例中,服务器122-1可以通过发送 “隐藏电子邮件警告”来通知客户机180-1需要同步事件。这可以充分利用现有的警告基础结构。警告不一定要被用户看见,并且它在SharePoint中在用户选择执行同步操作时自动创建。这对于不频繁改变的列表尤其有效。然而,客户机设备180-1可能需要支持对传入邮件请求的接收以实现该特定技术。
此处阐明了许多具体细节以提供对这些实施例的全面理解。然而,本领域技术人员将理解,没有这些具体细节也可实践这些实施例。在其它实例中,没有详细地描述公知的操作、组件和电路以免得使这些实施例显得晦涩难懂。可以理解,此处公开的具体的结构和功能细节可以是代表性的且不必要限制这些实施例的范围。
还值得注意的是,任何对“一实施例”或“实施例”的引用都意味着结合该实施例所描述的特定的特征、结构、或特性被包括在至少一个实施例中。出现在说明书中各个地方的短语“在一实施例中”不必全都指的是同一实施例。
某些实施例可能使用表述“耦合的”和“连接的”及其派生词来描述。应当理解,这些术语不旨在互为同义词。例如,某些实施例可能使用术语“连接的”来描述以指示两个或更多元素互相有直接的物理的或电的接触。在另一示例中,某些实施例可能使用术语“耦合的”来描述以指示两个或更多元素有直接的物理的或电的接触。然而,术语“耦合的”还可以意味着两个或更多元素互相不直接接触,而仍互相合作或交互。各实施例在该上下文中不受限制。
某些实施例可以例如使用可以存储如果被机器执行则使得机器执行根据这些实施例的方法和/或操作的指令或一组指令的机器可读介质或物品来实现。例如,这种机器可以包括任何合适的处理平台、计算平台、计算设备、计算系统、处理系统、计算机、处理器等,且可以使用硬件和/或软件的任意合适的组合来实现。例如,机器可读介质或物品可以包括任何合适类型的存储器单元、存储器设备、存储器物品、存储器介质、存储设备、存储物品、存储介质和或存储单元,例如,存储器、可移动或不可移动介质、可擦除或不可擦除介质、可写或可重写介质、数字或模拟介质、硬盘、软盘、压缩盘只读存储器(CD-ROM)、可记录压缩盘(CD-R)、可重写压缩盘(CD-RW)、光盘、磁性介质、磁光介质、可移动存储器卡或盘、各种类型的数字多功能盘(DVD)、磁带、磁盒等。
尽管用对结构特征和/或方法动作专用的语言描述了本主题,但可以理解,所附权利要求书中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实现权利要求的示例形式公开的。