首页 / 数据统一

数据统一实质审查 发明

技术内容

数据统一 背景技术 [0001] 客户数据平台(CDP)聚合来自多个数据源的数据,以创建可供其他系统访问的单个客户简档。数据统一是由CDP使用以拉取来自各种数据源的(和/或在不同时间收集的)数据记录,并清理、去重复以及将数据合并到统一客户简档中的过程,这些简档作为统一记录输出。由于运行时间较长,数据统一通常作为批处理服务执行。 [0002] 对于同一数据主体(例如,客户),作为数据记录存储的客户简档通常可能会快速建立具有差异的重复项(duplicates)。当客户在销售交易期间提供信息并且收集的信息被存储为新的数据记录时,可能会发生这种情况。由于多种原因,该新数据记录可能具有与具有基本相同信息的先前存在的数据记录不同的信息,例如数据主体搬家并具有新地址、单个家庭中的多个人共享相同的实际地址或电子邮件地址、一个人搬入或搬出一个家庭,或者数据主体未能提供之前已提供的信息。 [0003] 引用数据记录的常见方法是使用主键。数据记录的主键应该是唯一的,以避免混淆不同记录的主体(例如客户),并且还应该保持不变,使得使用该数据记录的下游系统能够正确识别它。在保存数百万甚至数十亿条记录的系统上自动生成唯一主键且具有低冲突概率的一种常见方法是将单向函数(例如散列函数)应用于记录的内容。然而不幸的是,即使对记录的微小的无关紧要的改变(这在许多情况下可能发生),也会导致主键发生改变。 发明内容 [0004] 下文参照下面列出的附图详细描述所公开的示例。提供以下发明内容来说明本文公开的一些示例。然而,这并不意味着将所有示例限制为任何特定配置或操作顺序。 [0005] 用于数据统一的解决方案包括:接收数据记录,该数据记录包括多个数据字段;从多个数据字段中选择数据字段的子集,该数据字段的子集在数量上少于多个数据字段,其中选择数据字段的子集包括:应用第一规则来选择数据记录内的数据字段中的至少第一数据字段,以包含在数据字段的子集中;使用数据字段的子集的内容,生成数据记录的稳定标识符(stableID);以及将stableID插入到数据记录的主键数据字段中。 [0006] 用于数据统一的解决方案包括:接收第一多个数据记录,第一多个数据记录中的每个数据记录包括多个数据字段;从第一多个数据记录中选择主数据记录,其中选择主数据记录包括:应用用于从数据记录中进行选择的第一策略;从第一多个数据记录的数据记录中的对应数据字段中选择主数据字段,其中选择主数据字段包括:应用用于从数据字段或数据字段组中进行选择的第二策略;以及将主数据记录中的与主数据字段相对应的数据字段的内容替换为主数据字段的内容,以产生统一的数据记录。 附图说明 [0007] 下面结合附图对本发明的实施例进行详细说明: [0008] 图1示出了用于在可扩展的实时事务数据存储库中有利地执行改进的数据统一的布置; [0009] 图2是示出可以由图1的布置执行的示例性操作的流程图; [0010] 图3示出了从多个数据记录生成统一的数据记录,如在图1的布置中可以发生的那样; [0011] 图4是示出可以由图1的布置执行的示例性操作的另一个流程图; [0012] 图5A是自合并过程的图形描绘; [0013] 图5B是可以由图1的布置执行的改进的自合并过程的图形描绘; [0014] 图6A‑6D是可以在图5B的改进的自合并过程中使用的算法的伪代码; [0015] 图7示出了可以由图1的布置执行的自合并的其他图形描绘; [0016] 图8示出了示例性自合并结果,如在图1的布置中可以发生的那样; [0017] 图9是示出可以由图1的布置执行的示例性操作的另一个流程图; [0018] 图10是数据记录改变的影响的图形描绘; [0019] 图11是选择数据字段以生成stableID的图形描绘,如图1的布置中所发生的; [0020] 图12是示出可以由图1的布置执行的示例性操作的另一个流程图; [0021] 图13是示出可以由图1的布置执行的示例性操作的另一个流程图; [0022] 图14是示出可以由图1的布置执行的示例性操作的另一个流程图; [0023] 图15是适合于实现本文所公开的各种示例中的一些示例的示例计算环境的框图。 [0024] 在整个附图中,相应的附图标记指示相应的部分。 具体实施方式 [0025] 将参照附图详细描述各种示例。只要有可能,在整个附图中将使用相同的附图标记来指代相同或相似的部件。贯穿本公开作出的涉及具体示例和实施方式的参考仅出于说明性目的而提供,但是除非有相反指示,否则并不意味着限制所有示例。 [0026] 本公开的各方面提供了具有支持数据统一和模糊匹配能力的可扩展实时事务数据存储库。用于数据统一的解决方案包括:接收数据记录,该数据记录包括多个数据字段; 从多个数据字段中选择数据字段的子集,该数据字段的子集在数量上少于多个数据字段,其中选择数据字段的子集包括:应用第一规则来选择数据记录内的至少第一个数据字段,以包含在数据字段的子集中;使用数据字段的子集的内容,生成数据记录的稳定标识符(stableID);以及将stableID插入到数据记录的主键数据字段中。 [0027] 本公开的各方面通过提供唯一的主键(用于定位数据记录)来改进计算设备的操作,当数据记录的数量如此大以致于管理过程的许多方面必须自动化时,该主键具有对大规模数据记录管理操作有益的特性。有益的特性是通过对数据记录内容执行单向操作(例如散列函数)而实现的低重复可能性(例如,低冲突概率)——即使数据记录内容发生微小改变也能保持一致。通过选择数据字段的子集(少于所有数据字段)并使用数据字段的子集的内容生成数据记录的稳定标识符(主键),本公开的各方面以非常规的方式操作。 [0028] 在一些示例中,基于客户数据平台(CDP)用户通常是复杂的数据消费者并且高度熟悉他们的数据的特征的前提,提供用户界面(UI)以用于接收用户输入以控制或覆盖默认算法选择。在数据统一期间,无论是完整的还是增量的,当内容没有重大变化时,数据记录的标识符应该在刷新后仍然存在。稳定性对于下游应用(例如简档存储摄取、度量和智能)是重要的。因此,用户能够选择不太可能改变的“粘性字段”,例如来自其数据源的标识符,并且用户认为这些字段是值得信赖和稳定的。 [0029] 用于数据统一的附加解决方案包括:接收第一多个数据记录,第一多个数据记录中的每个数据记录包括多个数据字段;从第一多个数据记录中选择主数据记录,其中选择主数据记录包括:应用用于从数据记录中进行选择的第一策略;从第一多个数据记录的数据记录中的对应数据字段中选择主数据字段,其中选择主数据字段包括:应用用于从数据字段或数据字段组中进行选择的第二策略;将主数据记录中与主数据字段对应的数据字段的内容替换为主数据字段的内容,以产生统一的数据记录。 [0030] 因此,本公开的各方面还通过(在数据统一期间从多个数据记录中)选择主数据记录、从多个数据记录的数据记录中的对应数据字段中选择主数据字段、以及用主数据字段的内容替换主数据记录中的数据字段的内容以产生统一的数据记录。这使得统一的数据记录能够具有来自多个重复记录的最准确或最及时的信息(例如,所选主数据记录中的一些数据字段内容被来自不同数据记录的所选内容替换)。 [0031] 用于数据统一的进一步解决方案包括:根据合并计划对数据结构进行索引;将多个数据记录中的第一组数据记录共同定位在分布式网络的第一节点中,第一组数据记录中的每个数据记录具有stableID,其中第一组数据记录的两个或更多个stableID被识别为预期一起被搜索;以及将多个数据记录中的第二组数据记录共同定位在分布式网络的第二节点中,第二组数据记录中的每个数据记录具有stableID,其中第二组数据记录的两个或更多个stableID被识别为预期一起被搜索,并且其中第一组数据记录的两个或更多个stableID被识别为预期不与第二组数据记录的两个或更多个stableID一起被搜索。 [0032] 本公开的这些进一步的方面通过基于数据记录是否被识别为预期一起被搜索而将数据记录组共同定位在分布式网络中来以非常规的方式操作,从而提高大规模数据记录管理操作的计算操作的速度。这使能近乎实时的数据统一(例如,客户简档统一和其他字段的数据统一),并且还允许同时搜索包括源简档和统一的简档两者的可用简档。 [0033] 图1示出了提供具有对改进的数据统一(例如,映射、匹配、归并)和模糊匹配能力的支持的可扩展实时事务数据存储库的布置100。使用布置100,数据结构的索引策略和使用stableID(如下所述)的对分布式数据库的分区策略加速数据统一和实时搜索。另一个值得注意的方面是对最终记录(例如,获胜者记录)的选择——并且当非获胜者记录的数据字段更有效(例如,更完整或具有更高的有效性分数)或更时间有利(例如,基于数据的性质,较旧或较新)时,使用来自非获胜者记录的数据字段。 [0034] 在CDP中,可以从两个或更多个不同实体中匹配客户记录以创建统一的简档,和/或可以对来自单个实体的客户简档进行去重(去重复)以创建统一的简档。在一些示例中,经历跨实体匹配的每个实体也经历自合并。在各个实体完成自合并后,用户可以从自合并中的每个集群选择获胜者参与跨实体匹配,或者选择所有记录(获胜者和非获胜者两者)参与跨实体匹配。 [0035] 统一过程流程102具有合并元数据104、客户源实体106、以及馈送到核心110(例如,映射缩减编排核心)的预写日志(WAL)记录108。核心110的输出被馈送到模糊索引构建器服务112中,并且被分成经索引的分区114。另外,文件116从核心输出到数据湖中以用于向后兼容性和下游消耗。核心110执行映射并实施用户定义的合并计划,并实施归并策略。 模糊索引刷新服务128将索引加载到存储器内集群130中的经索引的分区114中。模糊索引刷新服务128另外重放来自WAL存储库122的未决更新,并且还在存在对合并元数据104的改变时刷新。模糊索引是针对统一和搜索而定制的。 [0036] 存储器内集群130被示出为包括三个集群:集群131、集群132、和集群133。在一些示例中,使用不同数量的集群。在一些示例中,集群131‑133中的每一个被类似地配置。集群 131具有头节点140,头节点140通过中心144管理工作者节点150的工作负载(例如,搜索查询),工作者节点150包括工作者节点151、工作者节点152、和工作者节点153。工作者节点 150使用搜索服务156来搜索数据记录,并且索引更新服务158将更新发送到工作者节点 150。索引更新和更新的记录被持久保存。头节点140使用匹配和统一服务142来运行合并计划,以产生最终的记录集。 [0037] 将记录从集群131发送到WAL服务120,WAL服务120更新WAL记录108、客户源实体 106、和合并元数据104。对合并元数据104的改变触发经索引的分区114的重建。WAL服务120还转发记录以存储在WAL存储库122中。拼接服务124从WAL存储库122写入文件116。在一些示例中,WAL服务120与模糊索引刷新服务128之间的活动以批处理模式运行,而WAL存储库 122和存储器内集群内的活动实时操作(例如,大约500毫秒或更短)。当实时更新到达时,它们将保留在存储器内高速缓存中,并且实时处理预写更新,并期望刷新调度将处理它们以提供对存储器内高速缓存的适当的重新索引、重新分区、和刷新(例如,在集群131中)。 [0038] 一组控制器160和API管理162经由用户节点164和用户节点166向客户提供访问。 在一些示例中,使能针对源实体的模糊搜索的搜索API和使能匹配和归并的统一API。客户能够输入用于生成stableID的规则170(下面结合图11和图12描述)和用于管理自合并的策略180。报告190包括关于stableID生成和合并结果的统计数据,其可用于帮助客户选择规则170和策略180。此外,用户节点164和166用于请求搜索和数据统一,并且搜索结果192被提供给用户节点164和166。在一些示例中,用户提供针对客户源实体106的插入、更新和删除请求的数据,这些数据实时反映在存储器内集群130中。规则170用于表示选择能力,并且可以比仅仅一组标准或决策因素更复杂。在一些示例中,规则170代表完整的基于ML的决策框架。 [0039] 图2示出了可以由布置100执行的示例性数据统一和其他操作的流程图200。在 202,在202处从用户节点164或166接收请求(例如,输入新数据记录),并在204将请求发送到WAL服务120作为提交请求并规范化。在206,给定指定的表列和合并计划,生成搜索计划和匹配计划。在208,将搜索计划和输入记录(在202接收的)发送到工作者节点(例如,工作者节点151)。在210,从工作者节点150接收CMP记录,在212,将CMP记录统一并返回到工作者节点150。在214,从工作者节点150接收扩展源数据。 [0040] 在216,对扩展的源数据进行自合并和规范化。下面例如结合图9更详细地描述自合并。在搜索时,对所请求的记录进行规范化(例如,语义规范化以及将数字转换为ASCII表示),但在规范化之前执行自合并。操作218通过针对候选记录迭代匹配计划来产生一组新的记录,并且操作220将最终记录与来自操作208的记录进行比较以确定变化(例如,更新的记录、删除的记录、和新的记录)。新数据行被发送回工作者节点150以检索脏的(例如,过时)记录。 [0041] 针对脏的和更新的源记录而运行归并过程,如操作224。stableID(例如,图11的stableID 1150)在操作228中生成并用于归并的记录。在228对操作224和218的结果进行比较以确定插入、更新和删除。该信息被发送到工作者节点150,用于在230更新索引并保存数据分区。更新的CMP和客户记录两者以及来自请求(在202处)的源记录都被发送和更新。操作230包括根据合并计划对数据结构进行索引。数据结构用于实时统一设计,这使得模糊搜索成为可能(例如,数据结构支持模糊匹配)。 [0042] 针对经索引的分区114中的每个分区构建索引(例如,通过模糊索引构建器服务 112),并且每个索引基于签名(例如,基于散列)到记录标识符的映射。构建每分区索引支持扩展。例如,当按分区计算索引时,可以按分区并行处理数据查询。这种索引和分区策略有效地分配了用于查询数据的多个并发请求查询的负载,从而减少了实时性能的延迟。 [0043] 在一些示例中,索引中使用类似于表1所示的数据结构: [0044] [0045] [0046] 在232,响应被发送回用户节点164或166(在202发送了初始请求的那个节点)。在 234将响应(CMP)和输入源记录作为数据提交发送到WAL服务120。操作236包括将(多个数据记录中的)数据记录共同定位在分布式网络的公共节点(例如,存储器内集群130)中,每个数据记录具有stableID,其中共同定位的数据记录组的两个或更多个stableID被识别为预期一起被搜索。对用户很可能一起搜索的数据记录的这种共同定位(利用stableID进行记录标识)允许在操作238中进行实时搜索。操作238中的搜索可以包括在头节点140处接收请求,该请求被转发到工作者节点150。操作238可以在任何时间被调用,并且不限于随后的操作236。每个工作者节点151、152和153使用它们的本地索引来运行模糊搜索,以识别本地候选记录。针对数据分区(例如,经索引的分区114)检查候选记录标识以找到数据记录。数据记录被发送到头节点140,头节点140运行映射、匹配、归并算法。匹配被发送回工作者节点 150以更新CMP数据和索引,并且结果被返回到请求搜索的用户节点。 [0047] 图3示出了从多个数据记录3021、3022和3023生成统一的数据记录3021a。如图所示,存在多个示例数据字段302‑322。数据字段302是记录ID,数据字段304是姓名(例如,可以在CDP中看到的客户姓名),数据字段306是电子邮件地址,并且数据字段308是电话号码。 数据字段310‑318是地址组。数据字段310是门牌号,数据字段312是街道名称,数据字段314是城市名称,数据字段316是州,并且数据字段318是邮政编码。数据字段320是记录的时间戳,并且数据字段322是有效性分数。 [0048] 如所指示的,数据记录3021是最旧的并且数据记录3023是最近期的(最新的)。数据记录3022在数据字段308b中具有最高有效性分数9的电话号码(308b是数据记录3022中对应于电话号码数据字段308的数据字段)。数据记录3021中的电话号码1234567890具有有效性分数(请参阅数据字段322),因为它看起来是人为的(contrived)。数据记录3023中的电话号码全为l,显然无效,因此有效性分数为0。数据字段306a为空,而数据字段306b具有电子邮件地址(306a和306b分别是数据记录3021和3022中的数据字段,对应于电子邮件数据字段308)。 [0049] 策略180中的策略180a选择数据记录3021作为主数据记录3021(例如,获胜者记录),应用偏向于(favor)最近期数据记录的策略。可以替代地使用其他策略,例如最旧的或最多填充的(最完整的)数据记录,或者根据某些评分算法的最有效的数据记录。策略180中的策略180b选择数据记录3022中未被选为主数据记录的数据字段306b作为主数据字段,以覆写(over‑write)主数据记录3021中与数据字段306相对应的数据字段的内容,应用偏向于最多填充的数据字段作为最有效的策略。 [0050] 策略180中的另一策略选择数据记录3022中的数据字段306b,应用偏向于最高有效性分数的策略作为主数据字段,以覆写主数据记录3021中与数据字段308相对应的数据字段的内容。策略180中的另一个策略,例如组策略,选择一组数据字段310‑318,包括数据字段地址组310g,应用偏向于最多填充的组作为最有效的策略,以覆写主数据记录3021中与数据字段310‑318相对应的数据字段的内容。这会产生统一的记录3021a。 [0051] 图4是示出可以由布置100执行的示例性操作的流程图400,例如更新(例如,客户源实体106的)实体402或404。针对实体402示出了自合并器410的操作;对实体404执行的操作是类似的。自合并通过查找很可能针对同一数据主体但在不同时间和/或从不同源接收的数据记录来移除重复的数据记录。关于自合并的进一步细节参考图5A‑6D提供。在框412应用规则并且将规范ID指派给每个记录。在框414,应用行获胜者策略并指派父ID。在框 416,前N(计数)条记录被保留在每个组内,并且不匹配的记录被传递到决策418,决策418确定是否剩余任何规则要应用。如果是,则循环通过框412‑418。当没有剩余规则时,结果被传递到框420以进行匹配。 [0052] 框420接收实体402和实体406两者的自合并器410的输出。在框422应用匹配规则,并且在框424执行清理。如决策426中所确定的,在还剩余更多规则要应用时,该过程再次流经框422和424。在框428生成stableID(参见图12)并且将结果输出到CMP(例如,在集群131中和/或输出到WAL服务120)。 [0053] 图5A是具有五个阶段501‑505的自合并过程500的图形描绘。给定一个无向加权图G(C,W),其中C是项目集合,并且W是权重集合,其指示C中项目对之间的距离,距离阈值θ>0,聚合层次聚类(AHC)算法首先将每个项目视为单个集群,迭代地归并最近的集群对,并在没有两个集群小于距离θ时停止。在图5中,仅显示小于0.4的距离,并且将θ设置为0.3。 [0054] 阶段501示出了初始状态,具有六个节点。在第一次聚类迭代之后,C1和C3在阶段 502被组合成C13。第二次迭代在阶段503将C4和C5组合成C45,并且第三次迭代在阶段504将C1和C13组合成C123。最终迭代在阶段505将C45和C6组合成C456,其中最终距离0.356大于0.3。不幸的是,这种迭代方法需要时间。 [0055] 图5B是可以由布置100执行的改进的自合并过程510的图形描绘,通过单次迭代直接从阶段501移动到最终阶段511。过程510可以被描述为具有对称节点折叠的基于分区的分布式凝聚层次聚类。过程510对每个分区执行存储器内局部聚类,整合聚类结果,并最终基于聚类来归并权重(即,边)。与过程500类似,当没有权重低于距离阈值θ时,过程510停止。 [0056] 局部聚类允许在分布式设置中并行计算聚类(例如,集群131‑133每个都有自己的分区)。与过程500相比,进行分区减少了迭代次数,从而节省了否则将用于迭代的开销的时间以及中间图阶段的混洗成本。图6A‑6D是可以用作过程510的示例的算法的伪代码。图6A示出了顶层算法600,其调用算法620(图6C)或算法630(图6D),然后调用算法610。 [0057] 算法610是局部分区聚类算法。对于分区中的每个集群Ci,不需要将所有边都加载到存储器中,而是只需要其最近邻来形成边列表L(Ci),从而减少了输入数据大小。另外,每个距离都从标量转换为范围,使得分区外部的边(即 )可以由通配符边表示,其指示它们到Ci的距离的下限。 [0058] L(Ci)定义为Ci的最近邻居列表,其大小限制是可配置的参数。对于每个Cj∈L(Ci),bL∈(Ci,Cj)和bU(Ci,Cj)分别定义为dist(Ci,Cj)的下限和上限。最初,当没有发生归并时,bL(Ci,Cj)和bU(Ci,Cj)分别是dist(Ci,Cj)的值。除了边界之外,L(Ci)中还附加了一个通配符Ci*。其下界bL(Ci,Ci*)指示所有剩余邻居都超出距离bL(Ci,Ci*)。它的(Ci,Ci*)是指示上限的特定于应用程序的大值(例如无穷大)。 [0059] 算法620是基于距离的算法,其使用中心(hub)和半径来对图进行分区。为每个聚类Cx确定半径,该半径是Cx与其第二最近邻居之间距离的10倍。这允许归并更多数量的集群。中心是在G中具有相互最近邻居的集群,由于其半径覆盖了其最近邻居,因此该集群将被归并。算法630以尺寸限制进行分区。算法630创建两个分区P1和P4,它们被传递到算法610以生成图5B的C123和C456——在单个迭代中。 [0060] 图7示出了如可以由布置100执行的自合并的替代图形描绘700。实体706具有项目E001和项目E002(用星号*标记以指示它是获胜者或主要项目)以及项目E300(其也是获胜者,因为它是该组中唯一的一个)。项目E001是与实体704中的项目E400的常规匹配,并且项目E002是与项目E400的强制匹配。项目E003是与实体704中的项目E600的常规匹配。在实体 704中,项目E100是获胜者并且与实体702中的项目E1具有常规匹配。项目E200和E300是与项目E1的强制匹配。项目E400是获胜者,并且与实体702中的项目E4具有常规匹配。项目E500与项目E4具有强制匹配。项目E600与实体702中的项目E6具有常规匹配。图形描绘710提供更简单的概念视图,具有相同的结果。 [0061] 图8示出了过程800中的示例性自合并结果824,如在布置100中可以发生的。数据记录8021‑8024具有数据字段802‑806并且被传递通过自合并820(参见图9),并且数据记录 8121‑8124具有数据字段802和816,并且还被传递通过自合并820。在框822匹配输出结果以产生结果824。 [0062] 数据字段802是每个记录的记录ID字段。数据字段804是名称字段,并且数据字段 806和数据字段816均是电子邮件字段。例如,当一个数据收集系统收集客户名称和客户电子邮件地址两者,而另一数据收集系统仅收集客户电子邮件地址时,可以发生这种布置。数据记录8021和数据记录8022具有相似的名称(“A”),但电子邮件地址不同。数据记录8121和数据记录8122各自具有分别与数据记录8021和8022的电子邮件地址相对应的电子邮件地址。数据记录8023和数据记录8024具有不同的名称(“B”与“c”)和不同的电子邮件地址。数据记录8123和数据记录8124各自具有分别与数据记录8023和8024的电子邮件地址相对应的电子邮件地址。 [0063] 在一些示例中发送到CMP的结果824具有各种输出可能性。输出数据记录8241可以具有来自数据记录8021或8022的记录ID、名称“A”、以及来自数据记录8121的电子邮件地址。输出数据记录8242可以具有来自数据记录8021或8022的记录ID、名称“A”,以及数据记录8122中的电子邮件地址。输出数据记录8243将具有来自数据记录8023的数据字段,输出数据记录8244将具有来自数据记录8024的数据字段。 [0064] 图9是示出与布置100相关联的示例性操作的流程图900。在一些示例中,针对流程图900描述的操作由图15的计算设备1500执行。流程图900开始于操作902,其包括902从用户输入接收策略180a和策略180b,这些策略将用于引导自合并。在操作904中接收数据记录。这包括更大的集合,在流程图900的描述中被称为第二多个数据记录。第二多个数据记录包括稍后将在操作918中识别的第一多个数据记录以及操作920‑932的主体。因此,操作 902包括接收第一多个数据记录(例如,数据记录3021‑3023或8021‑8124),第一多个数据记录中的每个数据记录包括多个数据字段。 [0065] 操作906执行数据统一过程,流程图900的剩余部分是该数据统一过程的一部分。 数据统一过程包括自合并过程,其从第一多个数据记录产生统一的数据记录(例如,图3的数据记录3021a)。操作908根据图5A‑6D的描述,使用操作910‑916执行第二多个数据记录的聚类。在一些示例中,聚类包括对多个分区执行存储器内局部聚类。在一些示例中,聚类在分布式计算节点(例如,集群131、131和133)之间并行执行。在一些示例中,聚类包括基于分区的分布式凝聚层次聚类。 [0066] 在操作910中执行局部聚类,操作912整合聚类结果,并且操作914归并边。重复操作910‑916直到决策操作916确定所有边权重超过距离阈值为止。在操作918中执行去重复(de‑dupe)。操作920将第一多个数据记录识别为第二多个数据记录的经聚类的子集,而不是第二多个数据记录的全部。 [0067] 操作922使用操作924‑930从第一多个数据记录中选择主数据记录3021。操作924包括应用用于从数据记录3021‑3023中选择主数据记录3021的策略180a。在一些示例中,策略180a是从由以下各项组成的列表中选择的:最近期的、最不近期的和最有效的。在一些示例中,最有效的策略包括最多填充的策略。在一些示例中,应用最有效的策略包括确定有效性分数。在一些示例中,应用最有效的策略包括选择最高的有效性分数。 [0068] 操作926包括从第一多个数据记录的数据记录中的对应数据字段中选择主数据字段(例如,数据字段306b)。这可以通过应用策略180b以从数据字段或数据字段组中进行选择来实现。在一些示例中,策略180b是从由以下各项组成的列表中选择的:最近期的、最不近期的和最有效的。决策操作928确定应用策略180b是成功的还是不成功的。如果不成功,则操作930包括至少基于确定应用策略180b不成功,应用第三策略以从数据字段或数据字段组中选择主数据字段或主数据字段组(例如,数据字段地址组310g)。 [0069] 操作932包括用主数据字段的内容替换主数据记录3021中与主数据字段相对应的数据字段(例如,数据字段308)的内容,以产生统一的数据记录3021a。操作934包括使用统一的数据记录3021a的数据字段子集的内容来生成最终数据记录(例如,统一的数据记录 3021a的最终版本)的stableID(例如,图11的stableID 1150)。操作934包括将stableID插入到统一的数据记录3021a的主键数据字段中。图12的流程图1200提供了操作932的进一步细节。 [0070] 图10突出显示了在数据记录发生改变之后对数据统一的需要,并使用拆分(split)成三个键环1000(较小版本)、1020和1030的键环1000的图形描绘的示例。键环与stableID不同,因为stableID用于基于上述策略来标记主键值,而键环是被标识为具有相同数据主体的数据记录的逻辑分组。键环可以将客户数据共同定位在单个节点中。在图10中,键环1000最初具有键1008和被标识为具有相同数据主体(例如,相同自然人)的四个数据记录1001‑1004。随着新信息的到来,数据记录1001,最初具有内容{Al;A2;A3;A4},现在具有内容{A1;A2;A3;E4}。数据记录1002,最初具有内容{B1;B2;B3;B4},现在具有内容{Bl; G2;B3;B4}。数据记录1003,最初具有内容{Cl;C2;C3;C4},现在具有内容{Cl;C2;C3;F4}。数据记录1004,最初具有内容{DI;D2;D3;D4},现在具有内容{DI;H2;H3;D4}。 [0071] 因为对数据记录1001和1003的改变是微小的,所以它们保留在键环1000内。然而,数据记录1002充分改变以从键环1000中被移除并且被解释为用于不同的主体。为数据记录 1002创建具有新键1028的新键环1020。类似地,数据记录1004充分改变以从键环1000移除并且被解释为用于又一个不同主体。为数据记录1004创建具有新键1038的新键环1030。新传入数据记录1005被解释为具有与数据记录1004相同的数据主体,因此被添加到键环 1030。由于这种拆分,对于数据统一的需要是可识别的。 [0072] 图11是对选择数据字段以(例如使用图12的流程图1200)生成数据记录的 stableID(例如图11的stableID 1150)的图形描绘。表示出了10个数据记录1120‑1130,每个数据记录具有数据字段1101‑1113。数据字段1101是每个数据记录的主键字段。突出显示的字段(对角斜线)表示每个数据记录内被选择用于生成stableID 1150的数据字段。 [0073] 用于生成stableID 1150的数据字段的选择确定stableID 1150对数据记录中的变化的敏感性。敏感性从图11顶部的最敏感(数据记录1121)到图11的底部的最不敏感(数据记录1130)进行排序。也就是说,数据记录1121对变化最敏感,因为使用了所有数据字段。 这意味着对任何一个数据字段的改变都可以改变为数据记录1121生成的记录ID。因此,优选地使用数据字段的子集而不是全部数据字段来生成stableID 1150。 [0074] 对于数据记录1122,选择数据字段1103、数据字段1104、数据字段1107、数据字段 1108、数据字段1111、数据字段1112和数据字段1113。这提供了较低的敏感度,使得为数据记录1122生成的stableID比为数据记录1121自动生成的记录ID更稳定。对于数据记录 1123,选择数据字段1101、数据字段1102、数据字段1103、数据字段1105、数据字段1106、数据字段1107、数据字段1109、数据字段1110和数据字段1111。基于该概念性示例中数据字段的性质,这提供了比数据记录1122更低的敏感度。 [0075] 继续,随着敏感度下降,对于数据记录1124,选择数据字段1103、1107和1111。对于数据记录1125,选择数据字段1103、1104、1107、1108、1111和1112。对于数据记录1126,选择数据字段1101、1102、1105、1106、1109和1110。对于数据记录1127,选择数据字段1101、1105和1119。对于数据记录1128和数据记录1129,仅选择数据字段1101,但是数据字段1101的不同方面可以改变,从而提供敏感度差异。对于数据记录1130,仅选择数据字段1113,其可以不太可能改变(例如,稳定)。 [0076] 针对数据记录1125描述了stableID 1150的生成。规则170被示出为具有两个规则 170a和170b,尽管在一些示例中可以使用不同的数量。规则170a和规则170b两者均用于选择数据字段1101‑1113的子集1140,特别是数据字段1103、1104、1107、1108、1111和1112。按照规则170a可以选择一些数据字段,并且可以按照规则170b选择附加数据字段。子集1140被提供给单向函数1152,单向函数1152可以是散列函数,其对那些数据字段的内容进行操作以产生stableID 1150。在一些示例中,单向函数1152级联子集1140的数据字段的内容并且对级联进行散列。stableID 1150被插入到数据记录1125的主键数据字段1101中。 [0077] 图12是示出与布置100相关联的示例性操作的流程图1200。在一些示例中,针对流程图1200描述的操作由图15的计算设备1500执行。流程图1200开始于操作1202,其包括 1202确定多个数据记录中的多个数据字段的数据质量参数。 [0078] 在一些示例中,数据质量参数包括空值、重复和/或不一致条件。操作1204包括生成多个数据字段的数据质量参数的报告(例如,报告190)。该信息可以帮助用户选择很可能提供对数据变化较不敏感的stableID的数据字段,例如通过识别一些数据字段变化或留空的速度有多快。 [0079] 操作1206包括从用户输入接收规则170a和规则170b。规则170a包括用于识别被标记为具有稳定内容的数据字段的规则。在一些示例中,用户输入包括用户界面(UI)中的拖放操作。操作1208包括从用户输入接收对多个规则的优先级排序。当在所应用的规则中选择的数据字段不可用(例如,空或不完整)时,可以使用对规则的优先级排序,因此要使用替代数据字段。操作1210包括执行数据统一过程。参见图9的操作906的描述。图12的剩余部分是数据统一过程的一部分。 [0080] 操作1212包括接收包括多个数据字段1101‑1113的数据记录1125。操作1214使用操作1216‑1224从数据字段1101‑1113中选择数据字段的子集1140。数据字段的子集1140在数量上少于多个数据字段1101‑1113(例如,6个对13个)。在一些示例中,数据字段的子集 1140包括数据记录1125的表格式中的关键列。 [0081] 操作1216应用规则170a来选择数据记录1125内的数据字段中的至少第一数据字段(例如,数据字段1103)以包括在数据字段的子集1140中。在一些示例中,规则170a还被应用来选择数据记录1125内的另一个数据字段(例如,数据字段1104)以包括在数据字段的子集1140中。操作1218应用规则170b来选择数据记录1125内的数据字段中的至少第二数据字段(例如,数据字段1107)以包括在数据字段的子集1140中。决策操作1220确定数据记录 1125内的数据字段之一是否为空(例如,如图3的记录3061)。如果是,则至少基于确定数据字段为空,操作1222从数据字段的子集1140中排除该空数据字段。操作1224从规则170中确定应用的优先级,并且应用所选择的规则来选择替换字段来代替所排除的空字段。在一些示例中,确定应用的优先级包括根据用户输入对规则进行优先级排序。 [0082] 操作1226包括:使用数据字段的子集1140的内容来生成数据记录1125的stableID  1150。在一些示例中,生成数据记录1125的stableID 1150包括:对数据字段的子集1140的内容执行单向函数1152。在一些示例中,单向函数1152包括散列函数。如果单向函数1152被选择为具有低冲突概率,则多次通过流程图1200生成多个数据记录的多个stableID,其中每个stableID很可能是唯一的。 [0083] 操作1228将stableID 1150插入到数据记录1125的主键数据字段1101中。在一些示例中,将stableID 1150插入到数据记录1125的主键数据字段1101中包括:将stableID  1150插入到获胜者记录的主键数据字段中(参见图3)。操作1230包括:报告stableID重复项的计数和/或报告使用(规则170中的)每个规则生成的stableID的计数。这有助于用户细化规则170和/或选择不同的单向函数1152。决策操作1232识别数据字段的子集1140的内容是否存在任何改变。如果是,则在操作1236中生成新的stableID。否则,在框1234中保留stableID 1150。 [0084] 图13是示出与布置100相关联的示例性操作的流程图1300。在一些示例中,针对流程图1300描述的操作由图15的计算设备1500执行。流程图1300开始于操作1302,其包括接收数据记录,该数据记录包括多个数据字段。操作1304包括从多个数据字段中选择数据字段的子集,数据字段的子集在数量上少于该多个数据字段。 [0085] 使用操作1306来执行操作1304,操作1306包括应用第一规则来选择数据记录内的数据字段中的至少第一数据字段以包括在数据字段的子集中。操作1308包括:使用数据字段的子集的内容,来生成数据记录的stableID。操作1310包括将stableID插入到数据记录的主键数据字段中。 [0086] 图14是示出与布置100相关联的示例性操作的流程图1400。在一些示例中,针对流程图1400描述的操作由图15的计算设备1500执行。流程图1400开始于操作1402,其包括:接收第一多个数据记录,第一多个数据记录中的每个数据记录包括多个数据字段。操作1404包括:从第一多个数据记录中选择主数据记录。 [0087] 使用操作1406来执行操作1404,操作1406包括:应用第一策略以从数据记录中进行选择。操作1408包括:从第一多个数据记录的数据记录中的对应数据字段中选择主数据字段。使用操作1410来执行操作1408,操作1410包括:应用第二策略以从数据字段或数据字段组中进行选择。操作1412包括:用主数据字段的内容替换主数据记录中与主数据字段相对应的数据字段的内容,以产生统一的数据记录。 [0088] 其他示例 [0089] 一种示例性的数据统一方法包括:接收数据记录,该数据记录包括多个数据字段; 从所述多个数据字段中选择所述数据字段的子集,所述数据字段的子集在数量上少于所述多个数据字段,其中选择所述数据字段的子集包括:应用第一规则来选择数据记录内的数据字段中的至少第一数据字段以包括在数据字段的子集中;使用数据字段的子集的内容,来生成数据记录的stableID;以及将stableID插入到数据记录的主键数据字段中。 [0090] 另一种示例性的数据统一方法包括:接收第一多个数据记录,第一多个数据记录中的每个数据记录包括多个数据字段;从第一多个数据记录中选择主数据记录,其中选择主数据记录包括:应用用于从数据记录中进行选择的第一策略;从第一多个数据记录的数据记录中的对应数据字段中选择主数据字段,其中选择主数据字段包括:应用用于从数据字段或数据字段组中进行选择的第二策略;将主数据记录中与主数据字段对应的数据字段的内容替换为主数据字段的内容,以产生统一的数据记录。 [0091] 另一种示例性的数据统一方法包括:根据合并计划对数据结构进行索引;将多个数据记录中的第一组数据记录共同定位在分布式网络的第一节点中,第一组数据记录中的每个数据记录具有stableID,其中第一组数据记录的两个或更多个stableID被识别为预期一起被搜索;将多个数据记录中的第二组数据记录共同定位在分布式网络的第二节点中,第二组数据记录中的每个数据记录具有stableID,其中第二组数据记录的两个或更多个stableID被识别为预期一起被搜索,并且其中第一组数据记录的两个或更多个stableID被识别为预期不与第二组数据记录的两个或更多个stableID一起被搜索。 [0092] 一种示例性的用于数据统一的系统包括:处理器;以及计算机可读介质,所述计算机可读介质存储指令,所述指令在由处理器执行时可操作以用于:接收数据记录,该数据记录包括多个数据字段;从所述多个数据字段中选择所述数据字段的子集,所述数据字段的子集在数量上少于所述多个数据字段,其中选择所述数据字段的子集包括:应用第一规则来选择所述数据记录内的所述数据字段中的至少第一数据字段以包括在所述数据字段的子集中;使用所述数据字段子集的内容,来生成所述数据记录的稳定标识符(stableID);以及将所述stableID插入到所述数据记录的主键数据字段中。 [0093] 另一种用于数据统一的示例性系统包括:处理器;计算机可读介质,存储指令,所述指令在由处理器执行时可操作以用于:接收第一多个数据记录,第一多个数据记录中的每个数据记录包括多个数据字段;从第一多个数据记录中选择主数据记录,其中选择主数据记录包括:应用用于从数据记录中进行选择的第一策略;从第一多个数据记录的数据记录中的对应数据字段中选择主数据字段,其中选择主数据字段包括:应用用于从数据字段或数据字段组中进行选择的第二策略;将主数据记录中与主数据字段对应的数据字段的内容替换为主数据字段的内容,以产生统一的数据记录。 [0094] 一种或多种示例性计算机存储设备具有存储在其上的计算机可执行指令,该计算机可执行指令在由计算机执行时使计算机执行包括以下操作的操作:接收数据记录,该数据记录包括多个数据字段;以及从多个数据字段中选择数据字段的子集,该数据字段的子集在数量上少于多个数据字段,其中选择数据字段的子集包括:应用第一规则来选择数据记录内的数据字段中的至少第一数据字段以包含在数据字段的子集中;使用数据字段的子集的内容,来生成数据记录的stableID;将stableID插入到数据记录的主键数据字段中。 [0095] 一种或多种示例性计算机存储设备具有存储在其上的计算机可执行指令,该指令在由计算机执行时使计算机执行包括以下操作的操作:接收第一多个数据记录,第一多个数据记录中的每个数据记录包括多个数据字段;从第一多个数据记录中选择主数据记录,其中选择主数据记录包括:应用用于从数据记录中进行选择的第一策略;从第一多个数据记录的数据记录中的对应数据字段中选择主数据字段,其中选择主数据字段包括:应用用于从数据字段或数据字段组中进行选择的第二策略;将主数据记录中与主数据字段对应的数据字段的内容替换为主数据字段的内容,以产生统一的数据记录。 [0096] 可替换地,或除了本文描述的其他示例之外,示例包括以下的任意组合: [0097] ‑从用户输入接收第一规则; [0098] ‑应用第二规则以选择数据记录内的数据字段中的至少第二数据字段以于包含在数据字段的子集中; [0099] ‑从第一规则和第二规则中确定应用的优先级; [0100] ‑根据应用的优先级执行应用第一规则以及应用第二规则; [0101] ‑确定多个数据字段的数据质量参数; [0102] ‑数据质量参数包括空值、重复和/或不一致条件; [0103] ‑生成多个数据字段的数据质量参数的报告; [0104] ‑生成数据记录的stableID包括:对数据字段的子集的内容执行单向函数; [0105] ‑执行数据统一过程; [0106] ‑数据统一过程包括自合并过程; [0107] ‑自合并过程标识至少一个获胜者记录; [0108] ‑将stableID插入到数据记录的主键数据字段中包括:将stableID插入到获胜者记录的主键数据字段中; [0109] ‑识别数据字段的子集的内容的变化; [0110] ‑基于识别数据字段的子集的内容的变化,生成新的stableID; [0111] ‑第一规则包括识别标记为具有稳定内容的数据字段; [0112] ‑数据字段的子集包括数据记录的表格式中的关键列; [0113] ‑单向函数包括散列函数; [0114] ‑应用第一规则来选择数据记录内的数据字段中的至少第三数据字段以包括在数据字段的子集中; [0115] ‑用户输入包括用户界面中的拖放操作; [0116] ‑从用户输入接收多个规则的优先级排序; [0117] ‑确定应用的优先级包括:将用户提供的规则优先于默认规则; [0118] ‑确定应用的优先级包括:根据用户输入对规则进行优先级排序; [0119] ‑确定数据记录内的数据字段中的第四数据字段是否为空; [0120] ‑至少基于确定第四数据字段为空,从数据字段的子集中排除第四数据字段; [0121] ‑生成多个数据记录的多个stableID; [0122] ‑报告stableID重复项的计数; [0123] ‑报告使用每个规则生成的stableID重复项的计数; [0124] ‑索引数据结构支持模糊匹配; [0125] ‑应用从数据字段或数据字段组中进行选择的第二策略; [0126] ‑第一策略和第二策略各自包括从由以下各项组成的列表中选择的策略:最近期的、最不近期的和最有效的; [0127] ‑确定应用第二策略不成功; [0128] ‑至少基于确定应用第二策略不成功,应用用于从数据字段或数据字段组中进行选择的第三策略; [0129] ‑接收第二多个数据记录; [0130] ‑第二多个数据记录包括第一多个数据记录; [0131] ‑执行第二多个数据记录的聚类; [0132] ‑将第一多个数据记录识别为第二多个数据记录的聚类子集,而不是第二多个数据记录的全部。 [0133] ‑聚类包括对多个分区执行存储器内局部聚类; [0134] ‑聚类包括整合聚类结果; [0135] ‑聚类包括至少基于聚类结果,归并边; [0136] ‑聚类包括重复局部聚类、整合和归并,直到所有边权重超过距离阈值; [0137] ‑使用统一的数据记录的数据字段子集的内容来生成最终数据记录的stableID; [0138] ‑将stableID插入到统一的数据记录的主键数据字段中; [0139] ‑执行数据统一过程; [0140] ‑数据统一过程包括自合并过程; [0141] ‑自合并过程从第一多个数据记录中产生统一的数据记录; [0142] ‑从用户输入接收第一策略和/或第二策略; [0143] ‑最有效的策略包括最多填充的策略; [0144] ‑应用最有效的策略包括确定有效性分数; [0145] 应用最有效的策略包括选择最高的有效性分数; [0146] ‑集群在分布式计算节点之间并行执行; [0147] ‑聚类包括基于分区的分布式凝聚层次聚类;以及 [0148] 在聚类之后执行重复数据删除。 [0149] 虽然已经根据各种示例及其相关操作描述了本公开的各方面,但是本领域技术人员将意识到,来自任何数量的不同示例的操作的组合也在本公开的各方面的范围内。 [0150] 示例操作环境 [0151] 图15是用于实现本文所公开的各方面的示例计算设备1500的框图,并且通常被指定为计算设备1500。在一些示例中,为本地计算解决方案提供一个或多个计算设备1500。在一些示例中,一个或多个计算设备1500被提供作为云计算解决方案。在一些示例中,使用本地和云计算解决方案的组合。计算设备1500只是合适的计算环境的一个示例,并且不旨在对本文所公开的示例的使用范围或功能提出任何限制,无论是单独使用还是作为较大集合的一部分。 [0152] 计算设备1500也不应当被解释为具有与所示组件/模块的任何一个或其组合相关的任何依赖性或要求。本文公开的示例可以在计算机代码或机器可用指令的一般上下文中描述,包括由计算机或其他机器(例如个人数据助理或其他手持设备)执行的计算机可执行指令(例如程序组件)。一般而言,包括例程、程序、对象、组件、数据结构等的程序组件是指执行特定任务或实现特定抽象数据类型的代码。所公开的示例可以在各种系统配置中实践,包括个人计算机、膝上型计算机、智能电话、移动平板电脑、手持设备、消费电子产品、专用计算设备等。当任务由通过通信网络链接的远程处理设备执行时,所公开的示例还可以在分布式计算环境中实践。 [0153] 计算设备1500包括直接或间接耦合以下设备的总线1510:计算机存储存储器 1512、一个或多个处理器1514、一个或多个呈现组件1516、I/O端口1518、I/O组件1520、电源 1522和网络组件1524。虽然计算设备1500被描绘为看似单个设备,但是多个计算设备1500可以一起工作并共享所描绘的设备资源。例如,存储器1512可以分布在多个设备上,并且处理器1514可以与不同的设备一起容纳。 [0154] 总线1510表示可以是一种或多种总线(例如地址总线、数据总线或其组合)。尽管为了清楚起见图15的各个块用线示出,可以用替代表示来完成描绘各种组件。例如,诸如显示设备之类的呈现组件在一些示例中是I/O组件,并且处理器的一些示例具有它们自己的存储器。在诸如“工作站”、“服务器”、“膝上型计算机”、“手持设备”等这样的类别之间不进行区分,因为所有类别都被设想在图15的范围以及本文对“计算设备”的引用之内。存储器 1512可以采用下面的计算机存储介质引用的形式,并且可操作地为计算设备1500提供计算机可读指令、数据结构、程序模块和其他数据的存储。在一些示例中,存储器1512存储以下一项或多项:操作系统、通用应用平台或其他程序模块和程序数据。因此,存储器1512能够存储和访问数据1512a和指令1512b,数据1512a和指令1512b可由处理器1514执行并且被配置为执行本文公开的各种操作。在一些示例中,存储器1512包括易失性和/或非易失性存储器、可移动或不可移动存储器、虚拟环境中的数据盘或其组合形式的计算机存储介质。存储器1512可以包括与计算设备1500相关联或可由计算设备1500访问的任意数量的存储器。存储器1512可以在计算设备1500的内部(如图15所示)、在计算设备1500的外部(未示出)、或两者(未显示)。存储器1512的示例包括但不限于随机存取存储器(RAM);只读存储器(ROM); 电可擦除可编程只读存储器(EEPROM);闪存或其他存储器技术;CD‑ROM、数字多功能光盘(DVD)或其他光学或全息介质;盒式磁带、磁带、磁盘存储器或其他磁存储设备;接线到模拟计算设备的存储器;或用于编码期望信息并供计算设备1500访问的任何其他介质。附加地或替代地,存储器1512可以分布在多个计算设备1500上,例如在虚拟化环境中,其中在多个计算设备1500上执行指令处理。出于本公开的目的,“计算机存储介质”、“计算机存储存储器”、“存储器”和“存储器设备”是计算机存储存储器1512的同义术语,并且这些术语都不包括载波或传播信号。 [0155] 处理器1514可以包括从诸如存储器1512或I/O组件1520之类的各种实体读取数据的任何数量的处理单元。具体地,处理器1514被编程为执行计算机可执行指令,用于实现本公开的各方面。这些指令可以由处理器、由计算设备1500内的多个处理器、或者由客户端计算设备1500外部的处理器来执行。在一些示例中,处理器1514被编程为执行诸如在下面讨论并在附图中描绘的流程图中所图示的指令之类的指令。此外,在一些示例中,处理器1514表示用于执行本文描述的操作的模拟技术的实现。例如,操作可以由模拟客户端计算设备 1500和/或数字客户端计算设备1500来执行。呈现组件1516向用户或其他设备呈现数据指示。示例性呈现组件包括显示设备、扬声器、打印组件、振动组件等。本领域技术人员将理解并领会,计算机数据可以以多种方式呈现,例如在图形用户界面(GUI)中可视地呈现、通过扬声器可听地呈现、在计算设备1500之间无线地呈现、通过有线连接呈现或以其他方式呈现。I/O端口1518允许计算设备1500逻辑地耦合到包括I/O组件1520的其他设备,其中一些组件可以是内置的。示例I/O组件1520包括例如但不限于麦克风、操纵杆、游戏手柄、卫星天线、扫描仪、打印机、无线设备等。 [0156] 计算设备1500可以使用到一台或多台远程计算机的逻辑连接经由网络组件1524在联网环境中操作。在一些示例中,网络组件1524包括网络接口卡和/或用于操作网络接口卡的计算机可执行指令(例如,驱动程序)。计算设备1500和其他设备之间的通信可以使用任何协议或机制通过任何有线或无线连接来发生。在一些示例中,网络组件1524可操作以使用传输协议在公共、私有或混合(公共和私有)上使用短距离通信技术(例如,近场通信TM (NFC)、Bluetooth 品牌通信等)或其组合在设备之间无线地传送数据。网络组件1524通过无线通信链路1526和/或有线通信链路1526a跨网络1530与云资源1528通信。通信链路1526和1526a的各种不同示例包括无线连接、有线连接和/或专用链路,并且在一些示例中,至少一部分通过互联网路由。 [0157] 尽管结合示例计算设备1500进行了描述,但是本公开的示例能够利用许多其他通用或专用计算系统环境、配置或设备来实现。可以适合与本公开的各方面一起使用的众所周知的计算系统、环境和/或配置的示例包括但不限于智能电话、移动平板电脑、移动计算设备、个人计算机、服务器计算机、手持式或笔记本电脑设备、多处理器系统、游戏机、基于微处理器的系统、机顶盒、可编程消费电子产品、移动电话、可穿戴或附件形状因数的移动计算和/或通信设备(例如手表、眼镜、头戴式耳机、或耳机)、网络PC、小型计算机、大型计算机、包括上述任何系统或设备的分布式计算环境、虚拟现实(VR)设备、增强现实(AR)设备、混合现实(MR)设备、全息设备,以及类似设备。这样的系统或设备可以以任何方式接受来自用户的输入,包括来自诸如键盘或定点设备的输入设备、经由手势输入、接近输入(诸如通过悬停)和/或经由语音输入。 [0158] 本公开的示例可以在计算机可执行指令(例如由软件、固件、硬件或其组合中的一个或多个计算机或其他设备执行的程序模块)的一般上下文中进行描述。计算机可执行指令可以被组织成一个或多个计算机可执行组件或模块。一般而言,程序模块包括但不限于执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件和数据结构。本公开的各方面可以用任何数量和组织的此类组件或模块来实现。例如,本公开的各方面不限于附图中所示和本文中所描述的特定计算机可执行指令或特定组件或模块。本公开的其他示例可以包括具有比本文所示和描述的更多或更少的功能的不同计算机可执行指令或组件。在涉及通用计算机的示例中,本公开的各方面在被配置为执行本文描述的指令时将通用计算机转换为专用计算设备。 [0159] 作为示例而非限制,计算机可读介质包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块等的信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动存储器。计算机存储介质是有形的并且与通信介质互斥。计算机存储介质以硬件实现并且不包括载波和传播信号。出于本公开的目的,计算机存储介质本身不是信号。示例性计算机存储介质包括硬盘、闪存驱动器、固态存储器、相变随机存取存储器(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、闪存或其他存储器技术、光盘只读存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光存储、盒式磁带、磁带、磁盘存储或其他磁存储设备,或可用于存储供计算设备访问的信息的任何其他非传输介质。相反,通信介质通常将计算机可读指令、数据结构、程序模块等体现在诸如载波或其他传输机制之类的调制数据信号中,并且包括任何信息传递介质。 [0160] 这里示出和描述的本公开的示例中的操作的执行或实施的顺序不是必需的,并且可以在各种示例中以不同的顺序方式来执行。例如,预期在另一操作之前、与另一操作同时或在另一操作之后执行或实施特定操作在本公开的各方面的范围内。当介绍本公开的各方面或其示例的要素时,词语“一”、“一个”、“该”和“所述”旨在表示存在一个或多个要素。术语“包括”、“包含”和“具有”旨在是包容性的,并且意味着可能存在除了所列出的要素之外的附加要素。术语“示例性”旨在表示“……的示例”。短语“以下中的一个或多个:A、B和C”是指“A中的至少一个和/或B中的至少一个和/或C中的至少一个”。 [0161] 已经详细描述了本公开的各方面,显然,在不脱离所附权利要求中限定的本公开的各方面的范围的情况下,修改和变化是可能的。由于在不脱离本公开的各方面的范围的情况下可以对以上构造、产品和方法进行各种改变,因此以上描述中包含的以及附图中示出的所有内容应被解释为说明性的,而非具有限制性的意义。

相关技术
M·巴拉苏布拉马尼安发明人的其他相关专利技术