分布式存储系统中的粒度改变检测的制作方法

文档序号:27680710发布日期:2021-11-30 23:32阅读:98来源:国知局
分布式存储系统中的粒度改变检测的制作方法
分布式存储系统中的粒度改变检测


背景技术:

1.分布式存储系统典型地包括路由器、交换机、桥接器和其他网络设备,这些设备经由有线或无线网络链路对大量计算机服务器、网络存储设备和其他类型的计算设备进行互连。计算机服务器可以托管一个或多个虚拟机、容器或其他类型的经虚拟化的组件,以向用户提供各种计算和/或存储服务。例如,计算机服务器可以被配置为提供允许用户存储、编辑、取回或执行其他数据管理任务的数据存储和取回服务。


技术实现要素:

2.提供本发明内容以便以简化的形式对下面在具体实施方式中进一步描述的概念的选择进行介绍。本发明内容不旨在标识要求保护的主题的关键特征或重要特征,也不旨在用于限制要求保护的主题的范围。
3.当今的分布式存储系统典型地根据分层架构进行布置,以为大量用户提供可靠且可扩展的存储服务。分布式存储系统的每个层可以依赖于对应的计算系统来提供设计的服务。例如,分布式存储系统可以包括高度可扩展且能够存储大量数据的存储层。存储层可以典型地包括后端服务器的集合,该后端服务器的集合被配置为促进用于用户的存储、取回和/或其他数据管理任务。后端服务器的集合还可以提供用于执行各种数据分析或分析任务的计算资源。这种分析任务的示例包括文档视图的聚合、对修改信号的检测、对趋势文档的计算等。这种存储层的一个示例是由华盛顿州雷德蒙德市的微软公司提供的microsoft outlook
4.虽然存储层适于执行对大量数据的存储和分析,但存储层中使用的数据结构可能不适于提供对各个数据项的随机访问。例如,存储层可能不会在与数据项在列表中的位置或列表的大小无关的恒定时间访问列表中的数据项。此外,这种分布式存储系统的可扩展性通常是通过将所存储的数据或对这种数据的索引拆分或“分片”为分区来实现的。例如,在某些分布式存储系统中,存储层中数据项的主索引可以被拆分为多个子索引。与引用数据项相反,主索引可以引用子索引,该子索引进而可以引用数据项。在这样的分布式存储系统中,当用户请求所存储的数据项时,在存储层中执行多个操作(例如,扇出联合(fan

out federation))以对这种引用进行解析。执行多个操作可能导致服务用户请求的高延时和计算负载。
5.一种用于提供对所存储的数据的快速随机访问的技术是将所存储的数据的子集(有时被称为“高影响数据”)缓存在集中式存储库(centralized repository)中,该集中式存储库被配置为提供针对高影响数据的缓存服务。例如,在存储层中运行的分析服务器的集合和/或计算过程(在本文中被称为“摄取处理器(ingestion processor)”)可以被配置为将所存储的数据的子集作为高影响数据推送到集中式存储库中。被推送到集中式存储库的高影响数据可以包括各种场景计算服务可能感兴趣的各种类别的所存储的数据。在一个示例中,在集中式存储库中处缓存的针对存储层中存储的文档的高影响数据可以包括文档名称、文档扩展名(例如,“txt”)、最后更新的日期/时间、文档的查看的次数、文档的修改的
次数、可以在该处取回文档的通用资源定位符(url)和/或与文档相关的其他合适的信息。通过对高影响数据进行缓存,用户可以容易地从集中式存储库中取回文档和/或文档的其他相关信息。
6.场景计算服务可以被配置为从集中式存储库中取回经缓存的高影响数据,并对存储层中存储的底层数据的改变做出反应以提供对应的用户体验。例如,在上面的文档示例中,搜索索引服务可能对用于更新搜索索引的标题、主体、附录或其他合适类型的文档内容的改变感兴趣。另一方面,文档元数据服务可能对用于更新文档的查看/编辑的次数的文档的查看者列表和文档的最后修改的时间戳感兴趣。
7.在某些分布式存储系统中,一旦在所存储的文档中检测到任何改变,就向所有场景计算服务发送综合通知(blanket notification)以进行进一步处理。检测到的改变的示例可以包括对文档的属性的写入操作。然而,这种综合通知可以导致分布式存储系统中的计算资源的浪费。首先,综合通知的传输可能涉及资源密集的通知调用(例如,超文本传输协议或“http”请求或远程过程调用)。第二,不同的场景计算服务可能对文档的不同属性的改变感兴趣。例如,在文档示例中,搜索索引服务可能对用于更新搜索索引的文档的查看者列表或文档的修改的次数的改变不感兴趣。另一方面,文档元数据服务可能对文档的主体或标题的改变不感兴趣。因此,综合通知中指示的改变可能适用于某些场景计算服务,但与其他场景计算服务无关。即使与综合通知中指示的改变无关,所有场景计算服务也可以消耗附加的计算、网络、输入/输出和/或其他合适类型的资源来确定综合通知中指示的改变是否与各个场景计算服务相关。例如,可以消耗各种类型的资源来执行对在集中式存储库处的高影响数据的附加读取操作。这种读取操作可以导致托管集中式存储库的服务器上的高计算负载、计算机网络中的高网络带宽消耗和/或对分布式存储系统的性能和/或操作的其他负面影响。
8.公开的技术的若干实施例可以通过在分布式存储系统中实现对文档属性的粒度改变检测来解决前述缺陷的至少一些方面。在某些实现方式中,分布式存储系统可以包括存储层,该存储层具有经由计算机网络可操作地彼此耦合的一个或多个后端服务器、一个或多个集中式存储库服务器以及一个或多个场景计算服务器。集中式存储库服务器可以被配置为:为存储在存储层中的数据的子集提供集中式存储库和缓存服务。场景计算服务器可以被配置为:响应于存储在后端存储服务器中的文档的某些属性的改变而提供各种类型的计算服务,例如,上面描述的搜索索引服务和文档元数据服务。
9.后端服务器可以被配置为:提供各种数据存储服务以促进存储、取回、修改、删除和/或其他合适类型的数据管理操作。后端服务器还可以被配置为:提供摄取处理器,该摄取处理器被配置为:对在存储层处接收并且要被存储在存储层中的新的和/或更新后的数据进行分析。在某些实现方式中,摄取处理器可以被配置为:从场景计算服务接收注册或其他合适类型的指示。注册单独地指示文档的一个或多个属性、对应的场景计算服务希望接收通知的改变。这种注册可以作为列表、表或其他合适的数据结构被维持在数据储存库中。
10.在某些实施例中,集中式存储库可以包括改变检测器,该改变检测器被配置为:对在摄取处理器处接收到的数据项的一个或多个属性执行粒度改变检测。尽管下面将改变检测器描述为集中式存储库的一部分,但在其他实施例中,改变检测器也可以被配置作为摄取处理器的一部分、分布式存储系统或其他合适的配置中的独立计算服务。
11.使用文档作为示例,当在摄取处理器处接收到文档的新版本时,摄取处理器可以从文档中提取某些高影响数据,并将提取的高影响数据写入集中式存储库。进而,在集中式存储库(或其组件)处的改变检测器可以被配置为:将接收到的新版本中的文档的属性的各种值与存储在集中式存储库中的先前版本中的属性的各种值进行比较。例如,改变检测器可以比较文档的主体和/或标题以确定是否在主体和/或标题中检测到改变。在另一示例中,改变检测器还可以将新版本中的文档的查看的次数和/或修改的次数与旧版本中的文档的查看的次数和/或修改的次数进行比较。
12.响应于检测到属性中的至少一个属性的改变,改变检测器可以被配置为:向摄取处理器提供关于检测到的改变的指示。作为响应,摄取处理器可以被配置为:生成通知并将通知发送到已经注册为接收针对属性的检测到的改变的通知的那些场景计算服务。例如,当检测到文档的主体和/或标题的改变时,摄取处理器可以被配置为:向搜索索引服务而不是向文档元数据服务发送通知。另一方面,当检测到查看的次数或修改的次数的改变时,摄取处理器可以被配置为:向文档元数据服务而不是向搜索索引服务发送通知。因此,可以减少由摄取处理器发送的通知数量以及用于验证通知的相关性的后续读取操作,并且因此导致较低的计算负载、较低的网络带宽消耗和/或分布式存储系统中其他资源的较低的消耗。
13.在某些实施例中,检测属性中的哪一个或多个属性已经改变可以包括:将散列函数与文档的属性进行关联,并且在摄取处理器处执行相关联的散列函数以促进确定对应的属性是否已经改变。例如,摄取处理器可以被配置为:将与各个属性相关联的散列函数应用于文档的接收到的新版本中的属性的值以导出散列值(在本文中被称为“新散列值”或h
new
)。然后,摄取处理器可以将生成的新散列值作为高影响数据的一部分推送到集中式存储库。
14.在接收到新散列值时,集中式存储库处的改变检测器可以被配置为:将该新散列值与存储在集中式存储库中的文档的同一属性的先前值(在本文中被称为“先前散列值”或h
old
)进行比较。如果新散列值与先前散列值不同,则改变检测器可以向摄取处理器指示检测到文档的属性的改变。如果新散列值与先前散列值匹配或实质上匹配(例如,匹配度大于90%),则改变检测器可以指示对应的属性没有改变。
15.在摄取处理器中执行散列函数可以利用存储层的高可扩展性来降低存储层中的计算资源成为瓶颈的风险。此外,通过选择适合每个属性的散列函数(如下文更详细描述的),可以进一步减少对存储层处的计算资源的消耗,并且导出的散列值可以具有小的数据大小。产生的值的小的数据大小可以在确定属性是否已经改变时导致集中式存储库中的低存储开销、低网络带宽消耗以及高效的散列比较。
16.公开的技术的方面还针对选择合适的散列函数以与所存储的数据项(例如,上面描述的文档)的各个属性相关联。在某些实现方式中,多个不同的散列函数可以与文档的对应的属性静态关联。例如,返回输入值作为输出的标识函数可以用于文档的查看的次数和修改的次数。在另一示例中,xxhash函数可以与文档的主体相关联。
17.在另外的实现方式中,散列函数与属性的关联可以例如基于属性的值的数据类型和/或大小而是动态的。例如,标识函数可以用于值为整数或短字符串(例如,少于十个或其他合适数量的字符)的属性。因此,文档的查看的次数和修改的次数可以与标识函数相关联。对于不是整数或短字符串的值,其他散列函数被配置为:将属性的值的数据映射到具有
固定大小的散列值,该固定大小与该值的数据大小不同。例如,fowler

noll

vo(fnv)散列函数可以与具有数据大小为四到二十个字节的值的属性相关联。xxhash64函数可以与具有大数据大小(例如,大于二十个字节)的值的属性相关联。安全散列试探法256(sha256)函数可以应用于当相同数据的冲突可能不能容忍时(例如,当要检测的改变的数量高于阈值时)的属性的值。例如,当需要检测属性的几乎每一个改变时,将sha256应用于属性的值可以产生256位散列值(或其他阈值位散列值),其产生冲突的风险要低得多。
18.在某些实现方式中,摄取处理器可以被配置为:利用将散列函数与属性的值大小范围进行关联的配置文件。例如,具有小于或等于四个字节的值的属性可以与标识函数相关联,而具有五到二十个字节之间的值的属性可以与fnv散列函数相关联。具有大于二十字节的值的属性可以与xxhash64相关联。另外地,在任何情况下都不能容忍冲突的属性可以与sha256相关联。
19.在其他实现方式中,摄取处理器可以被配置为:使用成本函数来呈现对散列函数的动态选择作为优化操作。不同的散列函数具有不同的存储占用空间(例如,输出散列值大小)、计算资源成本(例如,计算散列值的计算成本)、冲突率和/或其他合适的特性。因此,优化操作可以被定义为:对于属性,选择这样的散列函数:其使处理器周期和存储开销最小化,同时将冲突的数量保持在阈值以下,并使必须被读取以进行完整比较的属性数据的总量最小化。示例成本函数j(
hi
)可以表示如下:
20.j(
hi
)=w
collision
*cr
hi
+w
cpu
*cpu
hi
+w
storage
*storage
hi
+w
data
*data
hi

21.其中,cr
hi
是冲突率,cpu
hi
是处理器周期,storage
hi
是散列值的存储大小,data
hi
∈{propertysize,storage
hi
}并且w是与各种对应参数相关联的权重。当分布式存储系统在操作时,与前述参数相关联的不同权重可以改变。例如,可用的系统资源(例如,计算或存储)可以改变,使得计算资源变得丰富。因此,可以调整用于计算资源的权重以使得针对同一属性选择与可用系统资源改变之前不同的散列函数。
22.公开的技术的附加方面针对通过将相关的属性成组在一起,并针对属性的组而不是该组中的每个属性生成散列值来执行改变检测。在不受理论的束缚的情况下,认识到数据项(例如,文档)的某些属性频繁地一起改变。例如,文档的查看的次数经常随着文档的修改的次数而改变。因此,将属性组合成组并针对该组生成散列值可以允许快速确定该组中的属性中的任一个是否已经改变。如果没有检测到组的改变,则可以跳过对该组中的属性中的每一个的完整比较,并且可以将元数据添加到相应地指示的新版本。如果检测到组的改变,则可以对该组中的属性中的每一个进行比较以查看属性中的哪一个或多个属性已经改变。
23.根据公开的技术的附加方面,对属性进行成组还可以利用优化操作。如果不同属性之间的改变的相关性用于对属性进行成组,则可以设置“成组相关性阈值”,使得要被读取以用于属性和散列比较的数据的量在大小阈值以下和/或使其最小化。改变的相关性可以包括指示当第二属性改变时第一属性可能改变的概率(例如,作为百分比)的数据,反之亦然。可以经由属性的历史数据的统计分析或经由其他合适的方式来开发改变的相关性。在一些实施例中,如果已经对属性的值进行了散列,则可以使用组合操作(例如,左移并执行按位异或)来导出组散列值。然而,如果属性已经被传递通过标识函数,则可以对属性的值的组合(被称为组值)执行附加的散列操作以导出组散列值。在其他实施例中,可以使用
属性的多个成组,其中,属性可以是多个组的一部分。
24.一种用于生成属性成组的技术可以包括:维护属性的协方差矩阵。协方差矩阵是这样一种矩阵:其在i、j位置中的元素是随机向量的第i个元素与第j个元素之间的协方差(即,联合可变性的测量)。对协方差矩阵的计算可以被简化为使得如果属性已经改变,则该属性的值为1。如果属性未改变,则该属性的值为0。如果属性与已经在聚类中的属性组p
cj
中的一些(或全部)属性足够相关(即,协方差矩阵中的与属性对<pi,p
cj
>相对应的值高于阈值tc),则可以使用聚类试探法,以通过将属性pi指派给现有聚类(属性组)来构建成组。如果属性不够相关(即,在协方差矩阵中的针对属性pi的值没有高于阈值tc),则可以创建仅包含该属性的新聚类(即,新的属性组)。另一种成组试探法可以包括关于聚类相似度函数来确定“最接近的”聚类,并且将属性指派给该最接近的聚类(即,属性组)。不管使用哪种试探法来创建属性成组,要被读取和比较以便检测哪些属性已经改变的数据的量可以维持在阈值以下和/或使其最小化。
25.在某些实现方式中,可以在分布式存储系统操作之前计算属性成组,但也可以以离线批处理方式定期计算属性成组。在确定了属性成组之后,其中的每个位与一个属性相对应的位字段可以用于记录哪个属性已经改变。例如,如果对应的属性没有发生改变,则可以将位设置为零。当对应的属性已经改变时,可以将相同的位设置为一。在另外的实现方式中,可以以在线方式改变属性成组,从而更好地适应数据的时间改变。在另外的实现方式中,单个属性可以被包括在多个不同的组中。这种包括可以允许迅速的改变检测。例如,当在一个组中检测到改变但在另一组中未检测到时,可以确定同时在两个组中的属性没有改变。
附图说明
26.图1是示出根据公开的技术的实施例的、实现粒度改变检测的分布式存储系统的示意图。
27.图2a

图2d是示出根据公开的技术的实施例的、图1的分布式存储系统的执行粒度改变检测的某些硬件/软件组件的示意图。
28.图3a

图3c是示出根据公开的技术的实施例的、在签名生成期间的图2a

图2d的签名组件的某些硬件/软件组件的示意图。
29.图4是示出根据公开的技术的实施例的、图2a

图2d的签名组件的某些硬件/软件组件实现属性成组的示意图。
30.图5是示出根据公开的技术的实施例的属性的一个示例成组的文氏图(venn diagram)。
31.图6a

图6c是示出根据公开的技术的实施例的用于分布式存储系统中的粒度改变检测的过程的流程图。
32.图7是适合于图1中的分布式存储系统的某些组件的计算设备。
具体实施方式
33.下文描述了用于数据中心或其他合适的分布式存储系统中的粒度改变检测的系统、设备、组件、模块、例程、数据结构和过程的某些实施例。在以下描述中,包括了组件的具
体细节以提供对公开的技术的某些实施例的透彻理解。相关领域的技术人员还将理解,该技术可以具有附加实施例。也可以在没有下面参考图1

图7描述的实施例的细节中的若干细节的情况下实现该技术。
34.如本文中所使用的,术语“分布式存储系统”通常指代具有路由器、交换机、桥接器和其他网络设备的互连计算机系统,这些设备经由有线或无线网络链路将大量计算机服务器、网络存储设备和其他类型的计算设备彼此互联和/或互联到外部网络(例如,互联网)。单独的服务器或存储节点可以包括一个或多个持久存储设备,例如,硬盘驱动器、固态驱动器或其他合适的计算机可读存储介质。
35.还如在本文中使用的,“文档”通常指代包含描述和/或标识计算机文件的各种类型的数据和元数据的计算机文件。各种类型的数据和元数据在本文中被称为文档的“属性”。示例属性可以包括标题、内容主体、作者、通用资源定位符(url)、查看的次数、编辑的次数和/或与文档相关的其他合适信息。每个属性都可以被定义为包含对应值的参数。例如,作者属性可以具有包含姓名(例如,“nick jones”)的值。查看的次数属性可以包括包含整数(例如,“4”)的值。
36.如本文中所使用的,文档的“版本”通常指代文档的状态或形式。版本可以由版本号、编辑日期/时间、编辑者姓名、保存的日期/时间和/或其他合适的属性来定义。“新版本”通常指代这样的文档的状态:文档的数据和/或元数据的任何方面具有至少一个改变。例如,文档的新版本可以包括对文档的内容的编辑或文档的一个或多个属性(例如,查看的次数)的改变。“先前版本”是另一种文档的状态,可以直接或间接地从该先前版本导出新版本。
37.还如在本文中使用的,“场景计算服务”通常指代通过被设计为提供设计的用户体验的计算机网络(例如,互联网)提供的一个或多个计算资源。示例场景计算服务包括软件即服务(“saas”)、平台即服务(“paas”)和基础设施即服务(“iaas”)。saas是一种软件分发技术,其中软件应用由云服务提供商托管在例如数据中心中,并由用户通过计算机网络访问。paas通常指代通过计算机网络递送操作系统和相关联的服务,而不要求下载或安装。iaas通常指代用于支持存储装置、硬件、服务器、网络设备或其他组件的外包装置,所有这些组件可以通过计算机网络访问。
38.各种场景计算服务可以被配置为提供不同的用户体验。一种示例场景计算服务可以被配置为将文档的各种属性编译为搜索索引。在另一示例中,另一种场景计算服务可以被配置为接收表示用户查看文档的信号,并且响应于接收到的信号,向其他用户提供电子消息以推荐查看相同的文档。在进一步的示例中,场景计算服务可以被配置为提供其他合适的用户体验。
39.在某些分布式存储系统中,一旦在文档中检测到任何改变,就向所有场景计算服务发送综合通知以便进行进一步处理。然而,这种综合通知可以导致分布式存储系统中的计算资源的浪费。首先,综合通知的传输可能涉及资源密集的通知调用(例如,http请求或远程过程调用)。第二,不同的场景计算服务可能对文档的不同属性的改变感兴趣。例如,搜索索引服务可能对用于更新搜索索引的文档的查看者列表或文档的修改的次数的改变不感兴趣。另一方面,文档元数据服务可能对文档的主体或标题的改变不感兴趣。因此,综合通知中指示的改变可能适用于某些场景计算服务,但与其他场景计算服务无关。
40.即使与综合通知中指示的改变无关,所有场景计算服务也可以消耗附加的计算、网络、输入/输出和/或其他合适类型的资源来确定综合通知中指示的改变是否与各个场景计算服务相关。例如,可以消耗各种类型的资源来执行附加的读取操作。这种读取操作可以导致高计算负载、计算机网络中的高网络带宽和/或对分布式存储系统的性能和/或操作的其他负面影响。
41.公开的技术的若干实施例可以通过在分布式存储系统中实现对文档属性的粒度改变检测来解决前述缺陷的至少一些方面。在某些实现方式中,可以在分布式存储系统中实现改变检测器,以确定与相同文档的先前版本相比,文档的新版本的属性中的哪一个或多个属性已经改变。基于确定出的一个或多个属性,可以选择性地将通知发送到先前注册为接收一个或多个属性的改变的通知的场景计算服务。因此,可以避免对场景计算服务的昂贵的http请求和/或远程过程调用,这些场景计算服务对属性的检测到的改变不感兴趣。而且,还可以避免用于确定通知中指示的改变是否实际上与场景计算服务相关的附加的计算资源。因此,与利用综合通知相比,分布式存储系统的计算负载、网络带宽和/或其他计算资源的消耗可以减少,如下文参考图1

图7更详细地描述的。
42.图1是示出根据公开的技术的实施例的、实现粒度改变检测的计算环境100的示意图。如图1中示出的,计算环境100可以包括对应的用户101的一个或多个客户端设备102,以及通过诸如互联网之类的计算机网络(未示出)互连到客户端设备102的分布式存储系统103。尽管图1中示出了计算环境100的特定组件,但在其他实施例中,计算环境100也可以包括附加的和/或不同的组件或布置。例如,在某些实施例中,计算环境100还可以包括其他合适配置中的附加的网络存储设备、网络设备、主机和/或其他合适的组件(未示出)。
43.客户端设备102可以各自包括促进用户101经由计算机网络访问由分布式存储系统103提供的云存储服务的计算设备。在一个实施例中,客户端设备102可以各自包括台式计算机。在其他实施例中,客户端设备102还可以包括膝上型计算机、平板计算机、智能电话或其他合适的计算设备。尽管出于说明目的在图1中示出了两个用户101和101’,但在其他实施例中,计算环境100可以促进其他合适数量的用户101访问云存储装置或由计算环境100中的分布式存储系统103提供的其他类型的计算服务。
44.如图1中示出的,分布式存储系统103可以包括一个或多个前端服务器104、一个或多个后端服务器105、集中式存储库106以及通过计算机网络107可操作地耦合的一个或多个场景服务器108。后端服务器105可以可操作地耦合到被配置为存储用户数据的网络存储装置112。在所示示例中,存储在网络存储装置112处的用户数据被示为文档110。在其他示例中,用户数据还可以包括图像文件、视频文件或者其他合适类型的计算机文件。尽管在图1中示出了分布式存储系统103的特定组件,但在其他实现方式中,分布式存储系统103还可以包括附加的和/或不同的组件。
45.计算机网络107可以包括任何合适类型的网络。例如,在一个实施例中,计算机网络107可以包括以太网或快速以太网网络,其具有路由器、交换机、负载平衡器、防火墙和/或实现聚合以太网上的rdma(roce)协议的其他合适的网络组件。在其他实施例中,计算机网络107还可以包括具有对应的网络组件的infiniband网络。在另外的实施例中,计算机网络107还可以包括上述和/或其他合适类型的计算机网络的组合。
46.前端服务器104可以被配置为经由客户端设备102与用户101交互。例如,前端服务
器104可以被配置为在客户端设备102上提供用户接口(未示出),以允许对应的用户101上传、修改、取回存储在网络存储装置112中的文档110或对其执行其他合适的操作。在另一示例中,前端服务器104还可以被配置为提供允许用户101设置要对网络存储装置112中的文档110实施的保留、隐私、访问或其他合适类型的策略的用户门户(未示出)。在某些实施例中,前端服务器104可以包括web服务器、安全服务器和/或其他合适类型的服务器。在其他实施例中,前端服务器104可以从分布式存储系统103中省略,而是由外部计算系统(例如,云计算系统(未示出))提供。
47.后端服务器105可以被配置为提供各种数据存储服务以促进对网络存储装置112中的文档110的存储、取回、修改、删除和/或其他合适类型的数据管理操作。例如,后端服务器105可以被配置为将文档110和/或对文档110的索引存储在分片中。后端服务器105还可以被配置为响应于来自例如用户101的合适的查询,而提供用于对来自各种分片的数据执行扇出联合的设施。在进一步的示例中,后端服务器105还可以被配置为提供用于执行重复减少、数据压缩、访问控制和/或其他合适的操作的设施。
48.后端服务器还可以被配置为提供摄取处理器107(图2a

图2d中示出),该摄取处理器107被配置为:对在网络存储装置112处接收并且要被存储在网络存储装置112中的文档110的新的和/或更新后的数据进行分析。在某些实现方式中,摄取处理器107可以被配置为:从场景服务器108和/或对应的场景计算设备接收注册或其他合适类型的指示。注册可以单独地指示文档110的一个或多个属性、对应的场景服务器或场景计算设备希望接收通知的改变。这种注册可以作为网络存储装置112中的通知列表128(图2d中示出)、表或其他合适的数据结构被维持在其他合适的数据储存库中。
49.虽然后端服务器105可以适于执行对大量数据的存储和分析,但后端服务器105和/或网络存储装置112中使用的数据结构可能不适于提供对各个数据项(例如,文档110)的随机访问。例如,后端服务器105可能不会在与文档110在列表中的位置或列表的大小无关的恒定时间访问列表中的文档110。此外,当用户请求所存储的文档时,后端服务器105可以执行多个操作(例如,扇出联合)以对间接引用进行解析。执行多个操作可能导致服务用户请求的高延时和计算负载。
50.集中式存储库106可以被配置为:通过向缓存在数据储存库114中的文档110的子集(有时被称为“高影响数据”,在图1中示为“数据111”)提供缓存服务来提供对网络存储装置112中的所存储的文档110的快速随机访问。在某些实施例中,在后端服务器105中运行的摄取处理器107可以被配置为将文档110的所存储的数据的子集作为数据111推送到集中式存储库106中以存储在数据储存库114中。
51.被推送到集中式存储库106的数据111可以包括各种场景服务器108和/或场景计算服务可能感兴趣的各种类别的所存储的数据。在一个示例中,在集中式存储库106处缓存的针对网络存储装置112中存储的文档110的数据可以包括文档名称、文档扩展名(例如,“txt”)、最后更新的日期/时间、文档的查看的次数、文档的修改的次数、可以在该处取回文档的通用资源定位符(url)和/或与文档相关的其他合适的信息。通过对数据111进行缓存,用户101可以容易地从集中式存储库106中取回文档的信息和/或其他相关信息。
52.场景服务器108可以被配置为从集中式存储库106中取回经缓存的数据111,并对网络存储装置112中存储的文档110的底层数据的改变做出反应以提供对应的用户体验。例
如,搜索索引服务可能对用于更新搜索索引(未示出)的标题、主体、附录或其他合适类型的文档110的内容的改变感兴趣。另一方面,文档元数据服务可能对用于更新文档110的查看/编辑的次数的文档110的查看的次数或查看者列表和文档110的最后修改的时间戳感兴趣。响应于查看的次数的改变,文档元数据服务可以被配置为向例如用户101’发送消息118以通知用户101’:另一用户101已经查看和/或编辑了文档110。尽管场景服务器108在图1中被示为物理计算设备,但在一些实现方式中,场景服务108的功能可以由执行合适指令的合适的服务器(例如,前端服务器104)提供作为对应的场景计算服务。
53.在某些分布式存储系统中,一旦在所存储的文档110中检测到任何改变,就向所有场景器108发送改变通知116以进行进一步处理。检测到的改变的示例可以包括对文档110的属性的写入操作。然而,这种综合通知可以导致分布式存储系统103中计算资源的浪费。首先,改变通知116的传输可能涉及资源密集的通知调用(例如,超文本传输协议或“http”请求或远程过程调用)。
54.第二,不同的场景服务器或场景计算服务可能对文档110不同属性的改变感兴趣。例如,搜索索引服务可能对用于更新搜索索引的文档110查看者列表的改变或文档110的修改的次数不感兴趣。另一方面,文档元数据服务可能对文档110主体或标题的改变不感兴趣。因此,改变通知116中指示的改变可能适用于某些场景计算服务,但与其他场景计算服务无关。即使与改变通知116中指示的改变无关,所有场景计算服务也可以消耗附加的计算、网络、输入/输出和/或其他合适类型的资源来确定改变通知116中指示的改变是否与各个场景计算服务相关。例如,例如,可以消耗各种类型的资源来执行对在集中式存储库106处的数据111的附加读取操作。这种读取操作可以导致托管集中式存储库106的服务器上的高计算负载、计算机网络107中的高网络带宽和/或对分布式存储系统103的性能和/或操作的其他负面影响。
55.公开的技术的若干实施例可以通过在分布式存储系统103中实现对文档属性的粒度改变检测来解决前述缺陷的至少一些方面。在某些实现方式中,可以在集中式存储库106中实现改变检测器122,以确定与相同文档110的先前版本相比,文档110的新版本的属性中的哪一个或多个属性已经改变。基于确定出的一个或多个属性,可以选择性地将改变通知116发送到先前注册为接收一个或多个属性的改变的通知的场景服务器108。因此,可以避免对场景计算服务的昂贵的http请求和/或远程过程调用,这些场景计算服务对属性的检测到的改变不感兴趣。而且,还可以避免用于确定改变通知116中指示的改变是否实际上与场景服务器108相关的附加的计算资源。因此,与利用综合通知相比,分布式存储系统103的计算负载、网络带宽和/或其他计算资源的消耗可以减少,如下文参考图2a

图2d更详细地描述的。
56.图2a

图2d是示出根据公开的技术的实施例的、图1的分布式存储系统103的执行粒度改变检测的某些硬件/软件组件的示意图。在图2a

图2d和本文的其他图中,为了清楚起见省略了图1的计算环境100和分布式存储系统103的某些组件。例如,在图2a

图2d中,为了便于说明,从分布式存储系统103中省略了前端服务器104和计算机网络107。在图2a

图2d和本文的其他图中,各个软件组件、对象、类、模块和例程可以是以c、c++、c#、java和/或其他合适的编程语言编写为源代码的计算机程序、过程或进程。组件可以包括但不限于一个或多个模块、对象、类、例程、属性、进程、线程、可执行文件、库或其他组件。组件可以采用
源或二进制形式。组件可以包括在编译之前的源代码(例如,类、属性、过程、例程)、经编译的二进制单元(例如,库、可执行文件)或在运行时实例化并使用的工件(artifact)(例如,对象、进程、线程)的方面。
57.系统内的组件可以在系统内采用不同的形式。作为一个示例,包括第一组件、第二组件和第三组件的系统可以包括但不限于涵盖这样的系统:其具有的第一组件为源代码中的属性,第二组件为二进制编译的库,并且第三组件为在运行时创建的线程。可以将计算机程序、过程或进程编译为目标代码、中间代码或机器代码,并呈现以供个人计算机、网络服务器、膝上型计算机、智能电话和/或其他合适的计算设备的一个或多个处理器执行。
58.同样地,组件可以包括硬件电路。本领域普通技术人员将认识到,硬件可以被视为石化的软件,并且软件可以被视为液化的硬件。仅作为一个示例,组件中的软件指令可以被刻录到可编程逻辑阵列电路,或者可以被设计为具有适当集成电路的硬件电路。同样地,硬件可以由软件仿真。源代码、中间代码和/或目标代码以及相关联的数据的各种实现方式可以存储在计算机存储器中,该计算机存储器包括只读存储器、随机存取存储器、磁盘存储介质、光学存储介质、闪速存储器设备和/或除了传播的信号之外的其他合适的计算机可读存储介质。
59.如图2a中示出的,后端服务器105可以包括用于对经由前端服务器104(图1)从用户101的客户端设备102接收到的文档110的新版本进行处理的摄取处理器107。文档110可以包括多个属性120。在所示实施例中,摄取处理器107可以包括可操作地彼此耦合的接口组件130、签名组件132和通知组件134。在其他实施例中,摄取组件107还可以包括网络、安全、数据库或其他合适类型的组件。
60.接口组件130可以被配置为接收文档110的新版本,并且将接收到的文档110提供给签名组件132以进行进一步处理。接口组件130还可以被配置为存储、取回网络存储器装置112中的文档110或对其执行其他合适的文件操作。例如,在所示实施例中,接口组件130可以被配置为将接收到的文档110的新版本的副本作为与先前版本分开的文件而存储在网络存储装置112中,或者用该副本替代文档110的先前版本。
61.签名组件132可以被配置为生成与属性120中的一个或多个属性相对应的签名121。在某些实施例中,属性120的签名121可以包括属性120的散列值。例如,文档110的内容主体的签名121可以包括具有预设长度的随机字母数字字符串。在其他实施例中,属性120的签名可以包括属性120的值。例如,文档110的查看的次数属性的值可以包括整数“4”。在另外的示例中,签名121可以包括从文档110的各种属性120导出的和/或与文档110的各种属性120相对应的其他合适的值。
62.如图2a中示出的,在生成签名121后,签名组件132可以指示接口组件130将从文档110的新版本中提取的数据111连同签名121一起发送到集中式存储库106以进行粒度改变检测。尽管本文中将粒度改变检测的实施例描述为在集中式存储库106中实现的,但在其他实施例中,这种粒度改变检测也可以在后端服务器105或分布式存储系统103的其他合适的服务器(未示出)中的一个或多个上实现。
63.如图2a中示出的,集中式存储库106可以包括可操作地彼此耦合的改变检测器122和改变指示器124。改变检测器122可以被配置为确定检测属性中的哪些一个或多个属性已经改变。在某些实施例中,改变检测器122可以被配置为将文档110的新版本的各个签名121
与存储在数据储存库114中的先前版本的那些签名121进行比较。响应于确定新版本的签名121相同或实质上相同(例如,相似度超过90%),改变检测器122可以被配置为指示文档110的对应的属性120没有改变。否则,改变检测器122可以被配置为指示对应的属性120已经改变。如图2b中示出的,在迭代通过所有签名121(图2a)之后,改变指示器124可以被配置为将标识已经改变的属性120的列表的属性id 123的列表发送到后端服务器105处的摄取处理器107。
64.响应于接收到属性id 123,摄取处理器107的通知组件134可以被配置为从网络存储装置112取回通知列表128。通知列表128可以包括指示场景服务108(和/或对应的场景计算服务)中的哪一个或多个对文档110的特定属性120的改变感兴趣的数据。通知列表128可以通过从场景服务器108接收注册数据(未示出)、通过指派默认值或经由其他合适的技术来生成。基于取回的通知列表128,通知组件134可以被配置为基于属性id 123来确定一个或多个场景服务器108接收改变通知125。在所示示例中,可以在通知列表128中指示第一场景服务器108a作为对由属性id 123中的一个标识的属性120的改变感兴趣。因此,改变通知116仅被发送到第一场景服务器108a,而不被发送到第二场景服务器108b和第三场景服务器108c。
65.如图2c中示出的,在接收到改变通知116之后,第一场景服务器108a可以被配置为向用户101’提供消息118以例如向用户101’通知文档110的属性120的检测到的改变,或者提供其他合适的用户体验。如图2d中示出的,当用户101提供了具有属性120’中的一个或多个属性的不同改变的文档110’的另一版本时,通知组件134可以被配置为当检测到不同属性120’的改变时(如由属性id 123’指示的),向第三场景服务器108c而不是第一场景服务器108a或第二场景服务器108b提供改变通知116’。因此,可以避免对场景服务器108中的一个或多个的资源密集的通知调用以及由这样的一个或多个场景服务器108进行的附加读取操作。
66.图3a

图3c是示出根据公开的技术的实施例的、在签名生成期间的图2a

图2d的签名组件132的某些硬件/软件组件的示意图。如图3a中示出的,签名组件132可以包括可操作地彼此耦合的函数选择器142和签名生成器146。函数选择器142可以被配置为基于属性120的值来选择用于生成签名121的函数。如下文更详细描述的,函数选择器142可以被配置为以多种方式选择函数。签名生成器146可以被配置为将选定的函数(例如,散列函数)应用于属性120的值以生成签名121。
67.公开的技术的方面针对选择与文档110的各个属性120相关联的合适的函数,以便将在后端服务器104(图1)处的计算资源消耗维持在阈值以下或甚至被最小化。在某些实现方式中,如图3a中示出的,多个不同的散列函数可以被静态地指派并且与文档110的对应的属性120相关联,如存储在网络存储装置112中的函数列表137所指示的。返回输入值作为输出的标识函数可以用于文档的查看的次数和修改的次数,因为计算针对这些值的散列值的成本可能超过用于比较这些值的计算资源的节省量。在另一示例中,xxhash函数可以与文档110的主体相关联,因为主体可以包括大量数据。
68.在另外的实现方式中,散列函数与属性120的关联可以例如基于属性120的值的数据类型和/或大小或者其他合适的函数标准138而是动态的,如图3b中示出的。例如,函数选择器142可以被配置为确定属性120的值的数据类型和/或大小,并且根据函数标准138指派
标识函数用于值为整数或短字符串(例如,少于十个或其他合适数量的字符)的属性120。因此,文档的查看的次数和修改的次数可以与标识函数相关联。在其他示例中,函数选择器142可以被配置为根据函数标准138将fowler

noll

vo(fnv)散列函数指派给具有数据大小为四到二十个字节的值的属性120。在另外的示例中,函数选择器142还可以被配置为根据函数标准138将xxhash64函数指派给具有大数据大小(例如,大于二十字节)的值的属性120。在另外的示例中,函数选择器142可以被配置为将安全散列试探法256(sha256)函数指派给具有可能产生散列值冲突的值并且当这样的冲突不能容忍时的属性120。
69.在另外的实现方式中,如图3c中示出的,函数选择器142可以被配置为使用成本函数139来呈现对散列函数的动态选择作为优化操作。不同的散列函数可以具有不同的存储占用空间(例如,输出散列值大小)、计算资源成本(例如,计算散列值的计算成本)、冲突率和/或其他合适的特性。因此,优化操作可以被定义为:对于属性120,选择这样的散列函数:其使处理器周期和存储开销最小化,同时将冲突的数量保持在阈值以下,并使必须被读取以进行完整比较的属性数据的总量最小化。示例成本函数j(
hi
)可以表示如下:
70.j(
hi
)=w
collision
*cr
hi
+w
cpu
*cpu
hi
+w
storage
*storage
hi
+w
data
*data
hi

71.其中,cr
hi
是冲突率,cpu
hi
是处理器周期,storage
hi
是散列值的存储大小,data
hi
∈{propertysize,storage
hi
}并且w是与各种对应参数相关联的权重。当分布式存储系统103在操作时,与前述参数相关联的不同权重可以改变。例如,可用的系统资源可以改变,使得计算资源变得丰富。因此,可以调整用于计算资源的权重以使得针对同一属性120选择与可用系统资源改变之前不同的散列函数。
72.图4是示出根据公开的技术的实施例的、图2a

图2d的签名组件的某些硬件/软件组件实现属性成组的示意图。如图4中示出的,签名组件132还可以包括成组模块140,该成组模块140被配置为:将文档110的属性120中的一些属性成组为集合;生成该集合的签名121;以及允许集中式存储库106(图2a)处的改变检测器122(图2a)高效地确定属性120中的哪一个或多个属性已经改变。
73.在某些实现方式中,成组组件140可以被配置为:将相关的属性120成组在一起,并针对属性120的集合而不是集合中的每个属性120生成签名121。在不受理论的束缚的情况下,认识到文档120的某些属性120频繁地一起改变。例如,文档的查看的次数经常随着文档的修改的次数而改变。因此,将属性120组合成组或集合并针对该集合生成散列值可以允许快速确定该集合中的属性120中的任一个是否已经改变。例如,如果没有检测到集合的改变,则改变检测器122可以跳过对集合中的属性120中的每一个的完整比较。如果检测到集合的改变,则可以对该集合中的属性120中的每一个进行比较,以基于函数列表137、函数标准138或成本函数139来查看属性120中的哪一个或多个属性已经改变,如上文针对图3a

图3c所描述的。
74.根据公开的技术的附加方面,对属性120进行成组还可以利用优化操作。如果不同属性120之间的改变的相关性用于对属性120进行成组,则可以设置“成组相关性阈值”,使得要被读取以用于属性120和散列比较的数据的量被维持在大小阈值以下和/或使其最小化。在一些实施例中,如果已经对属性120的值进行了散列,则可以使用组合操作(例如,左移并执行按位异或)来生成组散列值作为该组的签名121。然而,如果属性120已经被传递通过标识函数,则可以对属性的值的组合执行附加的散列操作以生成组散列值。在其他实施
例中,可以使用属性120的多个成组,其中,属性120可以是多个组或集合的一部分。
75.一种用于生成属性成组的技术可以包括:维护属性120的协方差矩阵(未示出)。对协方差矩阵的计算可以被简化为使得如果属性120已经改变,则该属性120的值为1。如果属性120未改变,则该属性120的值为0。如果属性120与已经在聚类中的属性组p
cj
中的一些(或全部)属性120足够相关(即,协方差矩阵中的与属性对<pi,p
cj
>相对应的值高于阈值tc),则可以使用聚类试探法,以通过将属性120pi指派给现有聚类(属性组)来构建成组。如果属性120不够相关(即,在协方差矩阵中的针对属性pi的值没有高于阈值tc),则可以创建仅包含该属性的新聚类(即,新的属性组)。另一种成组试探法可以包括关于聚类相似度函数来确定“最接近的”聚类,并且将属性120指派给该最接近的聚类(即,属性组)。不管使用哪种试探法来创建属性成组,要被读取和比较以便检测哪些属性已经改变的数据的量可以维持在阈值以下和/或使其最小化。
76.在某些实现方式中,可以在分布式存储系统103操作之前计算属性成组,但也可以以离线批方式定期计算属性成组或以其他合适的处理方式计算属性成组。在确定了属性成组之后,其中的每个位与一个属性120相对应的位字段可以用于记录组中的哪个属性120已经改变。例如,如果对应的属性120没有发生改变,则可以将位设置为零。当对应的属性已经改变时,可以将相同的位设置为一。在另外的实现方式中,可以以在线方式改变属性成组,从而更好地适应数据的时间改变。
77.在另外的实现方式中,单个属性120可以被包括在多个不同的属性组中。这种包括可以允许迅速的改变检测。例如,如图5中示出的,第一组150a可以包括表示为圆圈的四个属性120,而第二组150b也可以包括四个属性120’。第一组150a和第二组150b共享公共属性120”。因此,当检测到第一组150a的改变但没有检测到第二组150b的改变时,可以确定在第一组150a和第二组150b两者中的共享属性120”没有改变。
78.图6a

图6c是示出根据公开的技术的实施例的用于分布式存储系统中的粒度改变检测的过程的流程图。尽管下面在图1的计算环境100的上下文中描述了过程的实施例,但在其他实施例中,也可以在具有附加和/或不同组件的其他计算环境中实现这些过程。
79.如图6a中示出的,过程200可以包括在阶段202处接收文档的新版本。在某些实施例中,文档的新版本可以具有存储在分布式存储系统103(图1)中的对应的先前版本。在其他实施例中,文档的先前版本可以不存在于分布式存储系统103中。然后,过程200可以包括在阶段204处对接收到的文档的新版本的各个属性进行比较。可以应用对属性进行比较的各种技术。在上面参考图2a

图2d以及在下面参考图6b描述了某些示例技术。过程200还可以包括在阶段206处标识其值在接收到的文档的新版本中已经改变的属性。在标识出其值已经改变的属性之后,过程200可以继续进行以向先前注册为接收关于属性的改变的通知的场景服务器或场景计算服务发送通知。
80.图6b示出了对文档的各个属性进行比较的示例操作。如图6b中示出的,操作可以包括对属性值的签名(例如,散列值)进行比较210,这包括在阶段212处标识各个属性的值。操作可以可选地包括在阶段214处针对每个属性选择用于生成签名的函数。在上面参考图3a

图3c描述了用于选择函数的各种示例技术。然后,操作可以包括在阶段216处将选定的函数应用于对应的属性的值以生成签名。基于生成的签名,操作可以包括在阶段218处检测一个或多个属性的改变。
81.图6c示出了通过将属性成组为集合来检测属性改变的示例操作。如图6c中示出的,操作可以包括在阶段222处将属性成组为集合。在上面参考图4描述了用于对属性进行成组的示例技术。然后,操作可以包括在阶段224处针对集合中的每一个生成组签名。对于集合中的每一个,操作可以包括用于基于组签名来确定是否已经在集合中检测到改变的决策阶段224。响应于确定未在集合中检测到改变,操作可以包括将集合中的所有属性标记为未改变。响应于确定已经在集合中检测到改变,操作可以包括在阶段228处通过执行诸如在上面参考图6b所描述的那些操作之类的操作来检测集合中的一个或多个属性的改变。
82.图7是适合于图1中的计算环境100的某些组件的计算设备300。例如,计算设备300可以适用于图1的客户端设备102、前端服务器104、后端服务器105、集中式存储库106以及场景服务器108。在非常基本的配置302中,计算设备300可以包括一个或多个处理器304和系统存储器306。存储器总线308可以用于在处理器304与系统存储器306之间进行通信。
83.取决于期望的配置,处理器304可以是任何类型的,包括但不限于微处理器(μp)、微控制器(μc)、数字信号处理器(dsp)或其任何组合。处理器304可以包括一个或多个级别的缓存(例如,一级高速缓存310和二级高速缓存312)、处理器核心314以及寄存器316。示例处理器核心314可以包括算术逻辑单元(alu)、浮点单元(fpu)、数字信号处理核心(dsp核心)或其任何组合。示例存储器控制器318还可以与处理器304一起使用,或者在一些实现方式中,存储器控制器318可以是处理器304的内部部分。
84.取决于期望的配置,系统存储器306可以是任何类型的,包括但不限于易失性存储器(例如,ram)、非易失性存储器(例如,rom、闪速存储器等)或其任何组合。系统存储器306可以包括操作系统320、一个或多个应用322以及程序数据324。所描述的基本配置302在图7中由内部虚线内的这些组件示出。
85.计算设备300可以具有附加特征或功能,以及用于促进在基本配置302与任何其他设备和接口之间的通信的附加接口。例如,总线/接口控制器330可以用于促进在基本配置302与一个或多个数据存储设备332之间经由存储接口总线334的通信。数据存储设备332可以是可移除存储设备336、不可移除存储设备338或其组合。可移除存储设备和不可移除存储设备的示例包括磁盘设备(例如,软盘驱动器和硬盘驱动器(hdd))、光盘驱动器(例如,压缩盘(cd)驱动器或数字通用盘(dvd)驱动器)、固态硬盘(ssd)以及磁带驱动器,仅举几例。示例计算机存储介质可以包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据之类的信息的任何方法或技术实现的易失性和非易失性、可移除和不可移除介质。术语“计算机可读存储介质”或“计算机可读存储设备”不包括传播的信号和通信介质。
86.系统存储器306、可移除存储设备336以及不可移除存储设备338是计算机可读存储介质的示例。计算机可读存储介质包括但不限于ram、rom、eeprom、闪速存储器或其他存储器技术、cd

rom、数字通用盘(dvd)或其他光学存储装置、磁带盒、磁带、磁盘存储装置或其他磁存储设备、或者可以用于存储期望的信息且可以由计算设备300访问的任何其他介质。任何这样的计算机可读存储介质可以是计算设备300的一部分。术语“计算机可读存储介质”不包括传播的信号和通信介质。
87.计算设备300还可以包括接口总线340,其用于促进经由总线/接口控制器330从各种接口设备(例如,输出设备342、外围接口344和通信设备346)到基本配置302的通信。示例输出设备342包括图形处理单元348和音频处理单元350,其可以被配置为经由一个或多个
a/v端口352与诸如显示器或扬声器之类的各种外部设备通信。示例外围接口344包括串行接口控制器354或并行接口控制器356,其可以被配置为经由一个或多个i/o端口358与诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备等)或其他外围设备(例如,打印机、扫描仪等)之类的外部设备通信。示例通信设备346包括网络控制器360,其可以被布置为促进经由一个或多个通信端口364通过网络通信链路与一个或多个其他计算设备362的通信。
88.网络通信链路可以是通信介质的一个示例。通信介质可以典型地由计算机可读指令、数据结构、程序模块或调制的数据信号(例如,载波波形)或其他传输机制中的其他数据体现,并且可以包括任何信息递送介质。“调制的数据信号”可以是这样的信号:具有其特性集合中的一个或多个特性,或者以对信号中的信息进行编码的方式改变。通过示例而非限制的方式,通信介质可以包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、射频(rf)、微波、红外线(ir)和其他无线介质之类的无线介质。本文所使用的术语计算机可读介质可以包括存储介质和通信介质两者。
89.计算设备300可以被实现为小外形规格的便携式(或移动)电子设备(例如,手机、个人数据助理(pda)、个人媒体播放器设备、无线网络观看设备、个人耳机设备、专用设备,或者包括上述功能中任一项的混合设备)的一部分。计算设备300还可以被实现为包括膝上型计算机和非膝上型计算机配置两者的个人计算机。
90.根据前述内容,将认识到的是,已经出于说明的目的已经在本文中描述了本公开的特定实施例,但是在不脱离本公开的情况下可以进行各种修改。另外地,一个实施例的元素中的许多元素可以附加于或代替其他实施例的元素而与其他实施例组合。因此,除了所附权利要求书之外,本技术不受限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1