专利名称:来自更新数据表现方式的改变通知的制作方法
来自更新数据表现方式的改变通知
背景技术:
一些应用可接收并使用已对数据源上的数据进行的改变的通知,并且一些数据源能够为这样的用途提供同步的改变通知。例如,应用可显示来自给定数据源的项目的列表, 并在基础的数据改变时更新该显示。应用可使用同步的改变来显示动画以清楚地向用户传达什么已改变,而非简单地刷新整个显示。
发明内容
对于许多数据源,尤其是诸如那些通过全球计算机网络远程地访问的远程数据源,不容易得到同步的改变信息,并且当改变发生时再次提取全部可见的数据。当更新数据表现方式(r印resentation)时,此处描述的工具和技术可生成改变通知的集合。在一个实施例中,工具和技术可包括提供在数据源中的数据的原始集合的原始表现方式。可接收在数据源中的数据的更新集合的更新表现方式。可通过比较更新表现方式与原始表现方式来生成包括改变通知的改变通知集合。改变通知集合可表示当从原始表现方式开始时产生更新表现方式的改变的可能集合。可向数据源的客户端发送改变通知集
I=I O在工具和技术的另一实施例中,可向数据源的客户端提供在数据源中的数据的原始集合的原始表现方式。可检测在数据源中的数据的原始集合的更新。响应于检测到更新, 可提取在数据源中的数据的更新集合的更新表现方式。可通过比较更新表现方式与原始表现方式来生成包括改变通知的改变通知集合。改变通知集合可表示当从原始表现方式开始时产生更新表现方式的改变的可能集合。改变的可能集合可包括少于改变的替代集合的改变,所述改变的替代集合将表示删除数据的原始集合中的全部项目并插入数据的更新集合中的全部项目。可向客户端发送改变通知集合。提供本发明内容来以简化的形式介绍一组概念。该概念在以下具体实施方式
中进一步描述。本发明内容既不意图标识所要求保护主题的关键特征或重要特征,也不意图被用于限制所要求保护主题的范围。类似地,本发明不限于针对在背景技术具体实施方式
或附图中讨论的具体的技术、工具、环境、劣势或优势的实现方式。
图1是可实现一个或多个所描述实施例的适合的计算环境的框图。图2是数据改变通知环境的示意图。图3是原始的本地数据表现方式的一部分、接收的更新数据表现方式的一部分以及更新的本地数据表现方式的一部分的示意图。图4是用于来自更新数据表现方式的改变通知的技术的流程图。图5是用于来自更新数据表现方式的改变通知的又一技术的流程图。图6是用于来自更新数据表现方式的改变通知的再一技术的流程图。
具体实施例方式此处描述的实施例针对用于改善数据改变向数据源的客户端的通信的技术和工具。这样的改善可来自于各种技术和工具独立或结合的使用。这样的技术和工具可包括提供向客户端呈现界面的组件,该界面表现为好像数据源提供了同步的改变通知,而不论数据源实际上是否这么做。当检测到数据改变或请求刷新时,该组件可与数据源通信以确定数据的当前状态。如果自从组件接收数据的先前(例如,原始)表现方式后,数据的状态已改变,则组件可通过比较数据的原始状态的原始表现方式与数据的当前和更新状态的更新表现方式来生成改变通知。改变通知可表示为从原始表现方式产生更新表现方式而可能作出的改变。如果在该刷新在进行过程中时,客户端继续请求信息,则组件可返回代替实际的数据表现方式项目的占位符,并一旦知晓数据的当前状态就可尝试把占位符与实际数据项目的表现方式相匹配。改变通知可转发给客户端, 并且客户端可使用这些通知。例如,客户端可使用通知,以提供例示了该通知所表示的数据改变的动画。在所附权利要求中定义的主题不必限于此处描述的益处。本发明的具体实现方式可提供全部、一些此处描述的益处,或不提供此处描述的益处。虽然为了说明起见,此处以具体的顺序描述了用于各种技术的操作,但是应理解,除非需要特定的排序,该描述的方式包含操作顺序的重新安排。例如,在一些情况下,顺序地描述的操作可重新安排或同时执行。可用此处描述的一个或多个系统和/或一个或多个其他系统,使用此处参照流程图描述的技术。例如,可用硬件或软件或两者的结合来实现此处描述的各种过程。此外,为了简化起见,流程图可能未示出其中可结合其他技术使用的具体技术的各种方式。I.示例计算环境
图1例示了可实现一个或多个所描述实施例的适合的计算环境的概括性的例子。例如,可将一个或多个这样的计算环境用作数据源、客户端计算环境和/或用于项目管理器组件的计算环境。一般地,可使用各种不同的通用或专用计算系统配置。可适用于与此处描述的工具和技术一起使用的公知计算系统配置的例子包括但不限于服务器组和服务器群集、个人计算机、服务器计算机、手持式或膝上型装置、多处理器系统、基于微处理器的系统、可编程消费电子产品、网络PC、小型计算机、大型计算机、包括任何上述系统或装置的分布式计算环境等。因为可在不同的通用或专用计算环境中实现本发明,所以计算环境(100)不意图暗示对于本发明的用途或功能的范围的任何限制。参照图1,计算环境(100)包括至少一个处理单元(110)和存储器(120)。在图1 中,在虚线内包括了该最基本的配置(130)。处理单元(110)执行计算机可执行指令且可为真实的或虚拟的处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增强处理能力。存储器(120)可为易失性存储器(例如,寄存器、高速缓存、RAM),非易失性存储器 (例如,R0M、EEPR0M、闪存),或两者的一些组合。存储器(120)存储实现来自更新数据表现方式的改变通知的软件(180)。然而,可至少部分地在硬件中实现来自更新数据表现方式的改变通知。虽然为了清楚起见而以线示出图1的各种框,但是在现实中,描绘各种组件并不如此清晰,而且打个比喻,图1中的线以及以下讨论的其他附图将更准确地为灰色和模糊的。例如,可将诸如显示装置的呈现组件考虑为I/O组件。而且,处理器具有存储器。发明人在此承认这是本领域的本质并重申图1的图仅仅例示了能结合本发明的一个或多个实施例使用的示例计算装置。不在如“工作站”、“服务器”、“膝上型计算机”、“手持装置”等这样的类别之间进行区别,因为全部均在图1的范围内有所预期并称为“计算机”、“计算环境” 或“计算装置”。计算环境(100)可具有附加的特征。在图1中,计算环境(100)包括存储器(140)、 一个或多个输入装置(150)、一个或多个输出装置(160),和一个或多个通信连接(170)。诸如总线、控制器或网络的互连机构(未示出)互连计算环境(100)的组件。典型地,操作系统软件(未示出)为在计算环境(100)中执行的其他软件提供操作环境,并协调计算环境(100) 的组件的活动。存储器(140)可为可移除的或不可移除的,并可包括诸如磁盘、磁带或磁带盒、 CD-ROM、CD-RW、DVD,或可被用于存储信息和可在计算环境(100)内被访问的任何其他介质的计算机可读存储介质。存储器(140)存储用于软件(180)的指令。输入装置(150)可为诸如键盘、鼠标、笔或跟踪球的触摸输入装置、声音输入装置、 扫描装置、网络适配器、⑶/DVD阅读器或向计算环境(100)提供输入的另一装置。(一个或多个)输出装置(160)可为显示器、打印机、扬声器、CD/DVD写入装置、网络适配器或从计算环境(100)提供输出的另一装置。(一个或多个)通信连接(170)使能通过通信介质与另一计算实体的通信。因此, 计算环境(100)可在使用与一个或多个远程计算装置(诸如个人计算机、服务器、路由器、网络PC、对等装置或其他普通网络节点)的逻辑连接的网络化环境中操作。通信介质传达诸如数据或计算机可执行指令的信息或调制的数据信号形式的请求。调制的数据信号是按照对信号中的信息进行编码的方式设置或改变其一个或多个特性的信号。通过例子的方式而非限制,通信介质包括用电的、光学的、RF、红外的、声学的或其他载体实现的有线或无线技术。工具和技术可在计算机可读存储介质的一般语境中描述。计算机可读存储介质为可在计算环境内访问的任何可用存储介质,但是术语计算机可读存储介质不指信号自身。 通过例子的方式而非限制,对于计算环境(100),计算机可读存储介质包括存储器(120)、 存储装置(140)和以上的组合。工具和技术可在计算机可执行指令(诸如包括在程序模块中的在目标真实或虚拟处理器上的计算环境中执行的那些指令)的一般语境中描述。一般地,执行具体的任务或实现具体的抽象数据类型的程序模块包括例程、程序、库、对象、类、组件、数据结构等。可在如各种实施例中期望的程序模块之间结合或分开程序模块的功能。可在本地或分布式计算环境内执行用于程序模块的计算机可执行指令。在分布式计算环境中,可在本地和远程计算机存储介质两者中定位程序模块。为了说明起见,具体实施方式
使用例如“确定”、“选择”、“调整”和“操作”的术语以描述计算环境中的计算机操作。除非明确标注由人类(诸如“用户”)执行动作,这些和其他类似的术语是用于由计算机执行的操作的高级抽象,而不应与人类执行的动作相混淆。对应于这些术语的实际计算机操作依赖于实现方式而不同。II.用于来自更新数据表现方式的改变通知的系统和环境A.项目管理器以及总体系统和环境的实现方式
图2是可结合其来实现一个或多个所描述实施例的数据改变通知环境(200)的示意图。数据改变通知环境(200)可包括项目管理器(210),其可为软件组件。项目管理器(210) 可与客户端(220)和可为各种不同类型的数据源(图2中的其他数据源所示)之一的数据源 (230)通信。项目管理器(210)也可与一个或多个其他客户端和/或一个或多个其他数据源通信。项目管理器(210 )可通过适配器(MO )与数据源(230 )通信,适配器(240 )可配置用于特定类型的数据源。如果项目管理器(210 )将要向客户端(220 )发送数据表现方式项目的渲染版本,则项目管理器(210)也可与项目渲染器(242)和占位符渲染器(245)通信。 图2中示出的各种组件可为在诸如以上讨论的计算环境(100)的单个计算环境中,或它们可按照各种不同的配置之一散布在多个计算环境上。项目管理器(210)可从客户端(220)接收对表示来自数据源(230)的一个或多个项目的(一个或多个)表现方式项目的一个或多个请求(250)。作为响应,项目管理器(210) 可通过适配器(240)从数据源(230)或从本地数据表现方式(265)(如果已经从数据源 (230)提取了请求的数据表现方式项目)提取数据表现方式项目(260)。例如,项目管理器 (210)可向数据源(230)发送一个或多个请求,数据源(230)可通过适配器(240)向项目管理器(210)返回数据表现方式项目(260)。当从数据源(230)向客户端(220)发送数据表现方式项目(260)时,数据表现方式项目U60)可改变形式。仅为一个例子,适配器(240)可将数据表现方式项目(260)转换为ECMAkript对象的阵列(array)并将那些对象转发至项目管理器(210)。项目管理器(210)可向项目渲染器(242)发送ECMAkript对象,且项目渲染器可将数据表现方式项目U60)作为HTML文档对象模型元素返回至项目管理器,并且项目管理器(210)可向客户端(220)转发那些HTML文档对象模型元素。数据表现方式项目 (260 )可采取任何各种其他形式。例如,项目管理器(210 )可向客户端(220 )发送数据表现方式项目(260 )的未渲染版本,并且客户端(220 )可将数据表现方式项目(260 )用于不同于显示的用途。项目管理器(210)可维护本地数据表现方式(265),其表示由数据源(230)维护的更大数据集合的子集合。例如,本地数据表现方式(265)可仅包括针对当前通过客户端 (220)在列表(其可能以各种形式显示,诸如以垂直延伸的列表、以网格、作为缩略图等)中显示的项目的数据表现方式项目(260)以及可能的一些相关的数据表现方式项目(260)。 例如,本地数据表现方式(265)也可包括针对当前显示的项目的近邻的数据表现方式项目 (260),近来被显示的项目等。然而,项目管理器(210)可虚拟化本地数据表现方式(265), 以使其对于客户端(220 )看起来好像项目管理器(210 )已从数据源(230 )下载了整个数据集合。例如,项目管理器(210)可提取并向客户端提供关于在数据源(230)的数据集合中的项目总数的信息,从而客户端(220)可采取适当的动作,诸如适当地估算(sizing)和定位针对数据源(230)的总体数据集合的滚动条。如果客户端(220)向项目管理器(210)发送对项目管理器(210)尚未从数据源 (230)取得的项目表现方式的请求,则项目管理器(210)可向客户端(220)返回占位符 (280),直至项目管理器(210)从数据源(230)成功地提取表现方式项目(260)。项目管理器(210 )还可包括本地数据表现方式(265 )中的占位符(280 ),其中占位符(280 )可被用于记录保存的目的,诸如当从数据源(230)返回数据表现方式项目(260)时与对应的数据表现方式项目(260)进行匹配。另外,客户端(220)可使用占位符用于诸如记录保存的各种目的以及用于代替实际的数据表现方式项目(260)进行显示,直至返回数据表现方式项目 (260)o占位符(280)可采取各种形式中的任一种。例如,本地数据表现方式(265)中的占位符和实际数据表现方式项目(260)可为占位符渲染器(245)响应于来自项目管理器 (210)的请求而形成的所渲染的HTML文档对象模型元素的形式。替代地,占位符(280)可采取某种其他形式,诸如不透明句柄(opaque handle)的形式或某种其他数据类型。另外, 在本地数据表现方式(沈5 )中的占位符(280 )可为与响应于来自客户端(220 )的请求(250 ) 而返回至客户端(220)的占位符(280)不同的形式。B.来自更新数据表现方式的改变通知
项目管理器(210)可向客户端(220)呈现界面,其表现为好像数据源(230)提供了同步的改变通知,而不论数据源(230)实际上是否这么做。这可在项目管理器(210)待执行的三个主要步骤内完成检测到当前本地数据表现方式(265)与数据源(230)中的数据集合相比是过时的;以数据表现方式项目(260)的形式提取更新表现方式,以替换本地数据表现方式(265)的全部或部分;以及比较更新本地数据表现方式(265)的原始和更新版本以生成改变通知。下面将讨论这些中的每一个。1.检测过时的本地数据表现方式
如果诸如客户端(220)请求刷新操作(S卩,以数据表现方式项目(260)的形式提取更新表现方式以替换本地数据表现方式(265)的全部或部分,并比较更新本地数据表现方式 U65)的原始和更新版本以生成改变通知),则可绕过本地数据表现方式(265)过时的检测。 例如,客户端(220)可被配置为周期性地请求刷新操作,或可通过用户输入请求刷新操作。 另外,项目管理器(210)可自主地启动刷新操作,诸如当项目管理器(210)或适配器(240) 已检测到本地数据表现方式(265)过时时。例如,当客户端请求附加的数据表现方式项目(260)时,可检测过时的本地数据表现方式(265)。除请求由客户端(220)所请求的新的数据表现方式项目(260)外,项目管理器(210)可请求已经提取的本地数据表现方式(265)的重叠部分。当成批的数据表现方式项目(260)从数据源(230)到达时,项目管理器可处理它们。每当一批到达时,项目管理器 (210)可将重叠(如果有的话)与先前返回的数据表现方式项目U60)进行比较,以检测一致性。例如,如果数据表现方式项目K在以前的项目J之后,但现在它在项目H之后,则即使客户端的最近请求仅针对项目K,但也已改变了某事。如果向列表中的数据表现方式项目(260)提供索引,则数据表现方式项目的索引的改变也可指示针对列表中的一个或多个其他数据表现方式项目(260)的改变。项目管理器(210)可尝试确定什么已改变并提取被确定为已改变的新数据的子集合。替代地,可通过项目管理器(210)再次提取本地数据表现方式(265)中的全部数据表现方式项目(260)(其可为客户端(220)当前正对其维护句柄的全部数据表现方式项目 (260))。下面讨论这种提取。2.提取更新数据表现方式
当作为刷新操作的一部分提取更新数据表现方式时,项目管理器(210)可进入不同的操作模式。在该模式中,项目管理器(210)可忽略因为在进入该模式前发送的请求而到达的数据表现方式项目(260)。另外,当在该模式下时,项目管理器(210)可与数据源(230)通信以提取成批的数据,直至项目管理器(210)具有一致的“快照”,即在对应于原始本地数据表现方式(265)(即,已经对项目管理器(210)可用的本地数据表现方式)的数据源(230)中的数据的一部分的完全的更新本地数据表现方式(265)。项目管理器(210)可能使用各种启发式研究(heuristics)以获得这样的快照。在可被用于数据表现方式的列表的一个实现方式中,可执行以尽可能少的请求重新获得实例化的(instantiated)子列表的尝试,且项目管理器(210)可检查每批结果以查看仍需要请求什么。在该方法中,如果针对该特定项目的请求失败,则可考虑删除原始本地数据表现方式(265)中的数据表现方式项目(260), 但是直至这样的失败发生或成功地重新提取数据表现方式项目U60)之前,项目可被考虑为仍将在刷新操作中提取的项目。如果项目管理器(210)在成批的所接收的数据表现方式项目U60)之间发现矛盾,则提取过程可重新开始,且可再一次请求本地数据表现方式(沈5 )中的全部数据表现方式项目(260)。例如,如果数据在发送不同批时的时间之间在数据源(230)中改变,则这可能发生。当项目管理器(210)在其刷新模式下时,其可停止从数据源(230)请求新项目。然而,项目管理器(210)可继续通过返回占位符(280)处理来自客户端(220)的请求(250)以响应于请求(250)。替代地,如果在执行刷新操作的过程中考虑满足一些客户端请求的满足,则项目管理器(210)可满足那些请求。3.比较表现方式和生成改变通知
可以任何各种方式来完成生成改变通知(270)。例如,改变通知(270)的集合可能表示原始本地数据表现方式(265)中的全部数据表现方式项目(260)的删除和更新本地数据表现方式(265 )中的全部数据表现方式项目(260 )的插入。然而,这样的改变通知(270 )的集合不能向客户端(220)提供足够的信息从而以有帮助的方式向用户传送该改变。替代地,项目管理器(210)可生成改变通知(270)的集合,即使项目管理器(210) 不知晓数据源(230)中的数据集合的改变的真实顺序,所述改变通知(270)的集合也表示似真的(Plausib 1 e )改变的集合。这可由项目管理器(210 )使用可减少改变通知(270 )所表示的改变的数目的技术来完成,以便改变的数目比删除原始本地数据表现方式(265)中的全部数据表现方式项目(260 )和插入更新本地数据表现方式(265 )中的全部数据表现方式项目(260)时所包括的改变更少。客户端(220)可使用这样的改变通知(270)的集合以按照各种方式向用户传送该改变。例如,客户端(220)可提供动画用于高亮显示该改变。另外,客户端(220 )可按其他方式传送该改变。例如,如果碰巧被显示在示出数据表现方式项目(260)的列表的屏幕顶端的项目被移动至数据源(230)中的数据集合的其他部分,则客户端可使得可见的窗口滚动至其原始位置,并示出全部后续的数据表现方式项目(260),而不是滚动窗口以仅将那个项目保持在屏幕顶端。以下是项目管理器(210)可用来生成改变通知(270)的技术的一个实现方式的描述。总的来说,该技术可逐渐地更改原始本地数据表现方式(265)直至其匹配更新本地数据表现方式(265)。将参照图3描述该技术,其例示了原始本地数据表现方式(310)的一部分、所接收的在刷新操作中提取的更新数据表现方式(320)的一部分,以及在运行列表生成技术后更新的本地数据表现方式(330)的结果部分的特定例子。
如例示,在图3中,在表现方式中按其顺序列出了项目,这也可按照项目的索引的顺序。在图3中,有问号的三角形例示了占位符,有大写字母的三角形例示了已由客户端请求和实例化的数据表现方式项目(例如,渲染为向客户端发送的UI描述),而有字母的框例示了已从数据源返回但未由客户端请求且尚未实例化的数据表现方式项目。问号或大写字母下的数字表明了数据源中的总体数据集合中的项目的索引号。另外,大写字母可表示数据表现方式项目的密钥(key)。每个这样的密钥可为不因数据项目而改变的且与数据源中的数据集合中的其他数据项目的密钥不同的值。例如,密钥可为由数据源构造的用于记录保存的密钥,或它们可为诸如驾驶执照号码、社会保障号码等的标识符。就这样的密钥表示敏感信息而言,它们可利用诸如加密技术的适当安全措施予以保护。密钥可被项目管理器用于记录保存,诸如区别和/或匹配对应的数据表现方式项目。原始数据表现方式(310)被例示为包括具有索引85和86 (表示客户端已请求但项目管理器尚未返回的项目)的两个占位符,之后是具有各自的索引87、88、89和90的实例化的数据表现方式项目D、E、F和G,然后是具有各自的索引91和92的未请求的数据项目H和J。所接收的更新数据表现方式(320)包括具有各自的索引86、87、88、89、90和91 的项目C、D、Q、G、E和R。可将所接收的更新数据表现方式(320)与原始本地数据表现方式 (310)进行比较,以生成待向客户端发送的改变通知。现在将描述用于生成那些改变通知的技术。在该技术中,可发现在原始本地数据表现方式(310)中出现但未在接收的更新数据表现方式(320)中出现的项目。可发送针对这样的项目的移除类型的改变通知并可移除项目。例如,可向客户端发送针对项目F的移除类型的改变通知,并可从本地数据表现方式移除项目F。在该操作期间,因为这样的索引可能是不一致的,所以可限制客户端的访问,以便不许可客户端观察项目上的索引。替代地,如果当进行可能影响索引的其他改变时改变索引并通知客户端索引改变,则可许可客户端查看这样的索引。作为再一替代方案,即使索弓I是不一致的,也可允许客户端查看索引。该技术还可包括发现针对通过索引请求的项目生成的占位符,并将那些占位符与那些项目进行匹配。例如,如果通过索引请求原始本地数据表现方式中的具有索引85和86 的占位符,则这可能包括将原始本地数据表现方式(310)中的具有索引86的占位符与所接收的更新数据表现方式(320)中的具有索引86的项目C进行匹配。这可在移动数据表现方式中的占位符之前完成,以防止针对通过索引请求的项目的占位符移动,这是因为这样的索引请求的占位符的移动可能导致占位符匹配于具有与所请求的索引不同的索引的项目。尽管未在图3中例示,但所接收的更新数据表现方式(320)可散布在多个非连续范围上。例如,这可能因为允许客户端保留针对非连续范围的句柄而发生,因此原始本地数据表现方式(310)可包括客户端所请求的表现方式项目的多个非连续范围。另外,项目管理器可仅请求原始本地数据表现方式(310 )中的每个项目周围的有限范围。该技术可包括确定针对所接收的更新数据表现方式中的每个范围的匹配。例如,匹配可包括原始本地数据表现方式(310)中的范围,其与所接收的更新数据表现方式(320)中的匹配范围共享最独立的项目。在一些情况下,如果合并的范围映射至所接收的更新数据表现方式(320)中的范围,则可合并原始本地数据表现方式(310)中的范围。在所接收的更新数据表现方式(320)中,可标记每个范围的边界,原始本地数据表现方式中(310)的全部项目不出现在该边界外。例如,这可包括在所接收的更新数据表现方式(320)中的项目C和D之中和之间标记项目E和R之间的边界。这些边界可区分出看起来尚未被简单地观察到的项目(例如,项目C和R)与已被插入在数据源中的数据集合中的项目(例如,项目Q)。在所接收的更新数据表现方式(320)的每个范围及在原始本地数据表现方式中的其匹配范围中出现的项目中,不需要相对于彼此移动的项目的集合可被标识和标记为静态的。这可按照增加这样的静态项目的数目并因此可减少移动类型的改变通知的数目的方式完成。例如,对于列表,这可包括向原始本地数据表现方式(310)中和所接收的更新数据表现方式中的项目分配序数(ordinals),然后发现那些项目的“最长排序结果”。作为例子, 这可使用已知的“耐心排序(patience sorting)”技术的一部分来完成。在图3例示的例子中,这可导致将D和G标识为静态,其中D和G形成最长排序结果。(替代地,该技术可能已通过相同大小排序的结果而将D和G标识为静态)。如果在以上讨论的标记的边界内存在占位符,则可基于出现在两个数据集合中的近邻,尝试将这些占位符与所接收的更新数据表现方式(320)中的未出现在原始本地数据表现方式(310)中的项目进行匹配。例如,如果具有索引86的占位符因为匹配索引值而尚未与项目C匹配,则该占位符可能因项目C和占位符具有相同的近邻(项目D)而与项目C 匹配。该技术可包括发送针对在所接收的更新数据表现方式(320 )和原始本地数据表现方式(310)两者中的非静态项目的移动类型的改变通知。可在本地数据表现方式中执行移动。例如,这可包括发送针对项目E的移动类型通知并在本地数据表现方式中将项目E移动至项目G之后。当生成和发送这些通知时,可限制客户端的访问。例如,可允许客户端观察项目的近邻而非项目的索引。该技术还可包括发现在所接收的更新数据表现方式(320 )而非原始本地数据表现方式(310)中出现的新项目。可添加这些新项目至本地数据表现方式,且可向客户端发送对应的插入类型的改变通知。例如,在图3中,可在项目D之后插入项目Q,并可向客户端发送插入类型的改变通知。与移动一样,客户端的访问在执行插入时可能受限。例如,可允许客户端观察任何项目的近邻而非项目的索引。 另外,该技术可包括比较在原始本地数据表现方式(310)和更新本地数据表现方式(330)两者中出现的项目的内容。对于其内容已改变的项目,可在本地数据表现方式中更新项目,并可向客户端发送改变类型的改变通知。再者,客户端的访问在该操作期间可能受限,以便可通过客户端观察除索引外的任何事。该技术还可标识在原始本地数据表现方式(310)和更新本地数据表现方式(330) 中出现的、其索引已改变的项目。例如,在图3的例子中,可改变项目E和G的索引并可向客户端发送索引改变类型的改变通知。在该操作期间,可限制客户端的访问,以便其可观察改变项目的旧的和新的索引而非其他索引。该技术还可包括匹配占位符,该占位符尚未与项目匹配且在原始本地数据表现方式(310)中的范围的外围上与所接收的更新数据表现方式(320)的标记的边界之外的项目匹配。可基于其匹配的项目或其与其他实例化的项目或其他占位符的邻区,更新来自原始本地数据表现方式(310)的占位符的索引。在这完成之后,可移除对客户端的访问的限制,并可允许客户端以客户端的常用方式访问本地数据表现方式。可利用本地数据表现方式中匹配的项目来实例化与所接收的更新数据表现方式 (320 )中的项目匹配的占位符,并可发送“项目可用,,的通知。另外,如果数据源中的数据集合中的项目的总体计数已改变(从数据源向项目管理器发送的关于总体计数的每一信息), 则可向客户端发送计数改变类型的改变通知以表明该改变。在图3的例子中,以上讨论的刷新技术的操作可导致在图3顶端的原始本地数据表现方式(310)被更新至在图3底部例示的更新本地数据表现方式(330),并在适当的改变通知中发送至客户端。可使用其他技术以对于那时所发送的改变通知将是合乎逻辑的其他方式进行该操作。例如,可改变以上讨论的技术中的操作顺序,只要其仍导致可由客户端正确处理的改变通知的顺序生成即可。在完成刷新操作之后,可继续其中在本地数据表现方式中仍有占位符的请求项目的提取。可能已在原始本地数据表现方式(310)中呈现这样的占位符,和/或由于在以上讨论的刷新技术期间对数据的客户端请求而可能已插入这样的占位符。例如,在图3的例子中,这可导致提取更新本地数据表现方式(330)中的对应于占位符的项目。因此,即使忽略了来自在刷新操作之前向数据源启动的请求的结果以在刷新技术结束时简单地将本地数据表现方式保持一致,但是仍可正确地提取项目。III.用于更新数据表现方式的改变通知的技术
现在将讨论用于更新数据表现方式的改变通知的一些技术。可在计算环境中执行这些技术的每一个。例如,可在包括至少一个处理器和包括其上存储指令的存储器的计算系统中执行每个技术,该指令当被至少一个处理器执行时使得至少一个处理器执行该技术(存储器存储指令(例如,对象代码),并当(一个或多个)处理器执行那些指令时,(一个或多个) 处理器执行技术)。例如,指令可包括项目管理器组件,其可被执行以执行该技术。类似地, 一种或多种计算机可读存储介质可在其上实现计算机可执行指令,其当被至少一个处理器执行时使得至少一个处理器执行该技术。参照图4,将描述用于来自更新数据表现方式的改变通知的技术。该技术可包括提供(410)在数据源中的数据的原始集合的原始表现方式。在数据源中的数据集合可为在数据源的数据集合中的数据的全部或仅一部分。该技术还可包括从数据源接收(420 )在数据源中的数据的更新集合的更新表现方式。可生成(430)包括改变通知的改变通知集合。改变通知集合可表示当从原始表现方式开始时产生更新表现方式的改变的可能集合。改变的可能集合可包括少于改变的替代集合的改变,该改变的替代集合将表示在数据的旧集合中的全部项目的删除和在数据的新集合中的全部项目的插入。生成(430 )改变通知集合可包括执行该技术以减少移动类型的改变通知在改变通知集合中的数量。该技术可包括耐心排序技术。可向数据源的客户端发送(440)改变通知集合。图4的技术可包括在生成改变通知集合时限制客户端对数据的更新集合的访问。 “在生成改变通知集合时”和类似的诸如“在获得更新表现方式时”的短语指从当总体的被引用操作(获得、生成等)开始时直至完成总体的被引用操作的时间周期,但是无需限制(或利用类似语言的“执行处理”)该整个时间周期的访问。例如,可限制客户端的访问到这样的程度以致可向客户端串行地发送改变通知集合,而客户端不能够观察到在数据源中的数据的不一致状态。然而,该技术可包括在生成改变通知集合时允许客户端对数据的更新集合的一些访问。另外,可处理来自数据源的客户端的、对来自数据源的数据的基于原始表现方式的一个或多个请求。可在获得更新表现方式时执行该处理。作为例子,该处理可包括添加一个或多个占位符,且其还可包括执行用于将一个或多个占位符与数据的更新集合中的一个或多个项目匹配的技术。数据的原始集合和数据的更新集合可为数据源维护的数据的总体集合的子集合的版本。客户端可维护对子集合的至少一部分的一个或多个句柄,且子集合可包括小于由数据源维护的数据的总体集合的全部。参照图5,将描述用于来自更新数据表现方式的改变通知的另一技术。该技术可包括向数据源的客户端提供(510)在数据源中的数据的原始集合的原始表现方式。该技术还可包括检测(520)在数据源中的数据的原始集合的更新。该技术可包括响应于检测到更新,从数据源提取(530)在数据源中的数据的更新集合的更新表现方式。可通过比较更新表现方式和原始表现方式来生成(540 )包括改变通知的改变通知集合。改变通知集合可表示当从原始表现方式开始时产生更新表现方式的改变的可能集合。改变的可能集合包括少于改变的替代集合的改变,该改变的替代集合将表示数据的原始集合中的全部项目的删除和数据的更新集合中的全部项目的插入。可向客户端发送(550)改变通知集合。图5的技术还可包括在生成(540)改变通知集合时限制客户端对数据的更新集合的访问。可完成对访问的该限制达到这样的程度以致向客户端串行地发送改变通知集合中的改变通知,而不允许客户端观察在数据源中的数据的不一致状态。然而,该技术可包括在生成(540)改变通知集合时允许客户端对数据的更新集合的一些访问。例如,该技术可包括处理来自数据源的客户端的一个或多个请求。(一个或多个)请求可为针对来自数据源的数据的(一个或多个)请求。另外,可在从数据源提取(530 )更新表现方式时执行(一个或多个)请求的处理。处理可包括添加一个或多个占位符,且处理还可包括用于将一个或多个占位符与数据的更新集合中的一个或多个项目匹配的技术。此外,生成(540)改变通知集合可包括执行技术以减少在改变通知的可能集合中的改变数量。例如,该技术可包括标识数据的原始集合中的不被标识为由改变的可能集合移动的静态项目。静态项目可包括对应于在数据的原始集合中的项目范围的数据的更新集合中的项目范围中的有序项目的最大集合。参照图6,将描述用于来自更新数据表现方式的改变通知的再一技术。该技术可包括向数据源的客户端提供(610)在数据源中的数据的原始集合的原始表现方式。该技术还可包括从数据源接收(630)在数据源中的数据的更新集合的更新表现方式。数据的原始集合和数据的更新集合可为由数据源维护的数据的总体集合的子集合的版本。客户端可维护对子集合的一个或多个句柄,且子集合可包括小于由数据源维护的数据的总体集合的全部。图6的技术还可包括通过比较更新表现方式和原始表现方式来生成(640)包括改变通知的改变通知集合。改变通知集合可表示当从原始表现方式开始时产生更新表现方式的改变的可能集合。改变的可能集合可包括少于改变的替代集合的改变,该改变的替代集合将表示在数据的原始集合中的全部项目的删除和在数据的更新集合中的全部项目的插入。改变通知集合的生成(640)可包括标识数据的原始集合中的不被标识为由改变的可能集合移动的一个或多个静态项目。(一个或多个)静态项目可包括对应于数据的原始集合中的项目范围的、数据的更新集合中的项目范围中的一个或多个项目的最大有序集合。可向客户端发送(650)改变通知集合。在生成(640)通知集合时可允许(660)客户端对数据的更新集合的一些访问。然而,在生成通知集合时可限制(670)客户端对数据的更新集合的访问。对客户端访问的限制(670)可包括限制访问到这样的程度以致可向客户端串行地发送在改变通知集合中的改变通知,而不允许客户端观察在数据源中的数据的不一致状态。图6中的技术还可包括处理(680)来自客户端的对来自数据源的数据的一个或多个请求。(一个或多个)请求可基于原始表现方式。可在获得数据的更新集合时执行处理 (680)。另外,处理(680)可包括添加一个或多个占位符,并执行用于将一个或多个占位符与数据的更新集合中的一个或多个项目匹配的技术。尽管已按照特定于结构特征和/或方法动作的语言描述了本主题,但是要理解, 所附权利要求中限定的主题不必限于上述的特定特征或动作。相反,公开了上述的特定特征和动作,作为实现权利要求的示例形式。
权利要求
1.一种计算机实现的方法,包括提供在数据源(230)中的数据的原始集合的原始表现方式(310);从所述数据源(230)接收在所述数据源(230)中的数据的更新集合的更新表现方式 (320);通过比较所述更新表现方式(320)与所述原始表现方式(310)来生成包括改变通知 (270)的改变通知集合,所述改变通知集合表示当从所述原始表现方式(310)开始时产生所述更新表现方式(320)的改变的可能集合;以及向所述数据源(230)的客户端(220)发送所述改变通知集合。
2.如权利要求1所述的方法,其中生成所述改变通知集合包括执行减少所述改变通知集合中的移动类型的改变通知的数量的技术。
3.如权利要求1所述的方法,还包括在生成所述改变通知集合时限制所述客户端对所述数据的更新集合的访问。
4.如权利要求3所述的方法,其中限制访问包括限制访问到这样的程度以致能向所述客户端串行地发送所述改变通知集合,而所述客户端不能够观察到在所述数据源中的数据的不一致状态。
5.如权利要求4所述的方法,还包括在生成所述改变通知集合时允许所述客户端对所述数据的更新集合的一些访问。
6.如权利要求1所述的方法,还包括处理基于所述原始表现方式的、来自所述数据源的所述客户端的对来自所述数据源的数据的一个或多个请求,在获得所述更新表现方式时执行所述处理。
7.如权利要求6所述的方法,其中处理一个或多个请求包括添加一个或多个占位符并执行用于将所述一个或多个占位符与所述数据的更新集合中的一个或多个项目匹配的技术。
8.如权利要求1所述的方法,其中所述数据的原始集合和所述数据的更新集合是由所述数据源维护的数据的总体集合的子集合的版本,其中所述数据源的所述客户端维护对所述数据的总体集合的所述子集合的至少一部分的一个或多个句柄,所述子集合包括小于由所述数据源维护的所述数据的总体集合的全部。
9.一种或多种计算机可读存储介质,在其上实现计算机可执行指令,其当被至少一个处理器执行时使得所述至少一个处理器执行包括以下的动作向数据源(230)的客户端(220)提供在所述数据源(230)中的数据的原始集合的原始表现方式(310);检测在所述数据源(230)中的所述数据的原始集合的更新;响应于检测到所述更新,从所述数据源(230)提取在所述数据源(230)中的数据的更新集合的更新表现方式(320);通过比较所述更新表现方式(320)与所述原始表现方式(310)来生成包括改变通知 (270)的改变通知集合,所述改变通知集合表示当从所述原始表现方式(310)开始时产生所述更新表现方式(320)的改变的可能集合,所述改变的可能集合包括少于改变的替代集合的改变,所述改变的替代集合将表示删除所述数据的原始集合中的全部项目并插入所述数据的更新集合中的全部项目;以及向所述客户端(220)发送所述改变通知集合。
10. 一种计算机系统,包括 至少一个处理器(110);以及包括其上存储的指令的存储器(120),所述指令包括项目管理器组件(210),其当被所述至少一个处理器(110)执行时使得所述至少一个处理器(110)执行包括以下的动作向数据源(230)的客户端(220)提供在所述数据源(230)中的数据的原始集合的原始表现方式(310);从所述数据源(230)接收在所述数据源(230)中的数据的更新集合的更新表现方式 (320);通过比较所述更新表现方式(320)与所述原始表现方式(310)来生成包括改变通知 (270)的改变通知集合,所述改变通知集合表示当从所述原始表现方式(310)开始时产生所述更新表现方式(320)的改变的可能集合,所述改变的可能集合包括少于改变的替代集合的改变,所述改变的替代集合将表示删除所述数据的原始集合中的全部项目并插入所述数据的更新集合中的全部项目,并且所述改变通知集合的生成包括标识所述数据的原始集合中的不被标识为由所述改变的可能集合移动的一个或多个静态项目,所述一个或多个静态项目包括对应于所述数据的原始集合中的项目范围的、所述数据的更新集合中的项目范围中的一个或多个项目的最大有序集合;向所述客户端(220)发送所述改变通知集合;在生成所述改变通知集合时,允许所述客户端(220)对所述数据的更新集合的一些访问;在生成所述改变通知集合时,限制所述客户端(220)对所述数据的更新集合的访问,限制访问包括限制访问到这样的程度以致向所述客户端串行地发送所述改变通知集合中的改变通知(270 ),而不允许所述客户端观察到在所述数据源中的数据的不一致状态;以及处理来自所述客户端(220)的对来自所述数据源(230)的数据的一个或多个请求,所述一个或多个请求基于所述原始表现方式(310),在获得所述数据的更新集合的更新表现方式(320)时执行所述处理,并且所述处理包括添加一个或多个占位符(280)并执行用于将所述一个或多个占位符(280)与所述数据的更新集合中的一个或多个项目匹配的技术。
全文摘要
本发明涉及来自更新数据表现方式的改变通知。可提供数据源中的数据的原始集合的原始表现方式,并可接收数据源中的数据的更新集合的更新表现方式。可通过比较更新表现方式与原始表现方式来生成包括改变通知的改变通知集合。改变通知集合可表示当从原始表现方式开始时产生更新表现方式的改变的可能集合。可向数据源的客户端发送改变通知集合。在获得数据的更新集合的更新表现方式时可处理来自客户端的对来自数据源的数据的一个或多个请求。该处理可包括添加一个或多个占位符并且将(一个或多个)占位符与数据的更新集合中的一个或多个项目匹配。
文档编号H04L29/08GK102567048SQ201110405568
公开日2012年7月11日 申请日期2011年12月8日 优先权日2010年12月8日
发明者A.S.沙, M.A.内尔特, N.布伦, P.A.古斯莫里诺, P.J.奎亚特科夫斯基, S.A.范内斯 申请人:微软公司