首页 / 专利库 / 作物管理 / / 减少用于长期计算的存储器使用

减少用于长期计算的存储器使用

阅读:594发布:2021-06-08

专利汇可以提供减少用于长期计算的存储器使用专利检索,专利查询,专利分析的服务。并且所公开的代表性 实施例 压缩表达式使得它们可以利用较少的物理存储。表达式被放置处于标准表示,标准表示诸如为表达式树。系统利用一个或多个规则来标识表达式的可能与其他表达式共同的部分。从表达式树中提取共同部分作为模板并且从表达式中提升剩余部分作为独特部分。如果模板还没有驻存在高速缓存中,则模板被存储在高速缓存中。获得针对模板的高速缓存引用并且将高速缓存引用与独特部分组合以创建减少用于表达式的存储要求的 捆 绑。通过使用高速缓存引用从高速缓存中检索模板并将提升的独特部分放置到它们在模板中的原始 位置 中来恢复原始表达式。,下面是减少用于长期计算的存储器使用专利的具体信息内容。

1.一种用于压缩表达式的方法,包括:
接收处于标准表示格式的表达式;
创建包括所述表达式的子集的模板;
确定所述模板是否存在于高速缓存中;
响应于确定所述模板存在于所述高速缓存中,获得对所述模板的高速缓存引用;
响应于确定所述模板不存在于所述高速缓存中,将所述模板存储于所述高速缓存中并获得对所述模板的所述高速缓存引用;
从所述表达式减去所述模板,以标识所述模板与所述表达式之间的差异;以及创建包括所述高速缓存引用以及所述模板与所述表达式之间的所述差异的绑。
2.根据权利要求1所述的方法,还包括:
选择所述模板与所述表达式之间的至少一个差异;
创建包括所述至少一个差异的子集的第二模板;
从所述至少一个差异减去所述第二模板,以标识所述第二模板与所述至少一个差异之间的第二差异;
确定所述第二模板是否存在于所述高速缓存中;
响应于确定所述第二模板存在于所述高速缓存中,获得对所述第二模板的第二高速缓存引用;
响应于确定所述第二模板不存在于所述高速缓存中,将所述第二模板存储在所述高速缓存中并获得对所述第二模板的所述第二高速缓存引用;以及
将所述第二高速缓存引用和所述第二差异添加到所述捆绑以创建嵌套捆绑。
3.根据权利要求1所述的方法,其中所述标准表示是表达式树。
4.根据权利要求1、2或3所述的方法,还包括创建所述模板的指纹。
5.根据权利要求1、2或3所述的方法,其中创建所述模板包括:
标识所述表达式的不太可能改变的部分;以及
将那些部分中的至少一些部分放置到所述模板中。
6.根据权利要求5所述的方法,其中所述表达式的不太可能改变的所述部分通过将所述表达式与模板的历史进行比较而被标识。
7.根据权利要求1、2或3所述的方法,其中创建所述模板还包括:
检索至少一个模板选择规则;
基于所述至少一个模板选择规则来选择所述子集。
8.根据权利要求1、2或3所述的方法,其中创建所述模板还包括:
将所述表达式与多个候选模板进行比较;以及
选择所述多个候选模板中的与所述表达式的最大部分匹配的候选模板作为所述模板。
9.一种计算系统,包括:
处理器和可执行指令,所述可执行指令当由所述系统执行时使所述系统执行包括以下的操作:
选择处于标准表示格式的表达式;
创建包括所述表达式的子集的模板;
确定所述模板是否存在于高速缓存中;
响应于确定所述模板存在于所述高速缓存中,获得对所述模板的高速缓存引用;
响应于确定所述模板不存在于所述高速缓存中,将所述模板存储在所述高速缓存中并获得对所述模板的所述高速缓存引用;
从所述表达式减去所述模板,以标识所述模板与所述表达式之间的差异;以及创建包括所述高速缓存引用以及所述模板与所述表达式之间的所述差异的捆绑。
10.根据权利要求9所述的系统,其中所述指令使所述系统执行包括以下的另外的操作:
选择所述模板与所述表达式之间的至少一个差异;
创建包括所述至少一个差异的子集的第二模板;
从所述至少一个差异减去所述第二模板,以标识所述第二模板与所述至少一个差异之间的第二差异;
确定所述第二模板是否存在于所述高速缓存中;
响应于确定所述第二模板存在于所述高速缓存中,获得对所述第二模板的第二高速缓存引用;
响应于确定所述第二模板不存在于所述高速缓存中,将所述第二模板存储在所述高速缓存中并获得对所述第二模板的所述第二高速缓存引用;以及
将所述第二高速缓存引用和所述第二差异添加到所述捆绑以创建嵌套捆绑。
11.根据权利要求9所述的系统,其中所述标准表示是表达式树。
12.根据权利要求9所述的系统,其中所述指令使所述系统执行包括以下的另外的操作:创建所述模板的指纹。
13.根据权利要求9、10、11或12所述的系统,其中创建所述模板的所述操作包括以下操作:
标识所述表达式的不太可能改变的部分;以及
将那些部分中的至少一些部分放置到所述模板中。
14.根据权利要求13所述的系统,其中所述表达式的不太可能改变的所述部分通过将所述表达式与模板的历史进行比较而被标识。
15.根据权利要求9、10、11或12所述的系统,其中创建所述模板的操作包括以下操作:
检索至少一个模板选择规则;
基于所述至少一个模板选择规则来选择所述子集。

说明书全文

减少用于长期计算的存储器使用

技术领域

[0001] 本申请总体上涉及计算机系统中的减少的存储器使用。更具体地,本文中公开的实施例减少具有长期运行的计算的系统中的存储器。

背景技术

[0002] 如今存在允许长期运行的计算的许多系统。在该背景下,长期运行意味着计算持续一定延长的时间,而不一定意味着计算它们本身花费大量时间。例如,用户可以订阅当特定事件发生时发送警报的系统或者可以请求对信息的定期更新。例如,用户可能想要这样的系统在每天通知用户特定城市的天气。作为另一示例,用户可能想要每当股票市场达到特定值时被通知。为了标识天气或股票市场值可能不花费长时间,但是用户的请求不具有结绑日期(至少在这些示例中)并且系统可以在延长的时间段上执行任务。
[0003] 随着这样的长期运行的计算的数目增加,长期运行的计算的管理可能变成挑战。附图说明
[0004] 图1图示了利用表达式的系统的示例架构。
[0005] 图2图示了架构的示例。
[0006] 图3图示了云架构的另一示例。
[0007] 图4图示了压缩表达式的示例图。
[0008] 图5图示了压缩表达式的另一示例图。
[0009] 图6图示了将表达式压缩成嵌套捆绑的示例图。
[0010] 图7图示了对表达式进行压缩的示例流程图
[0011] 图8图示了对表达式进行解压缩的示例流程图。
[0012] 图9图示了标识表达式的共同部分和独特部分的代表性示例。
[0013] 图10图示了标识表达式的共同部分和独特部分的另一代表性示例。
[0014] 图11图示了创建针对表达式的签名的代表性示例。
[0015] 图12图示了适合于实施本文中公开的系统等等或者用于执行本文中公开的方法的机器的代表性架构。

具体实施方式

[0016] 下面的描述包括例示说明性实施例的说明性系统、方法、用户接口、技术、指令序列、以及计算机器程序产品。在下面的描述中,为了解释的目的,阐述了许多具体细节以提供对本发明主题的各种实施例的理解。然而,对于本领域技术人员将显而易见的是,可以在没有这些具体细节的情况下实践本发明主题的实施例。总体上,未详细示出公知的指令实例、协议、结构以及技术。
[0017] 概述
[0018] 本文中公开的实施例减少系统中持续存在一定时间段的表达式的存储器使用。如本文中所使用的,表达式涵盖元编程表达式,其中代码被处置为数据以及过滤器、查询、规则、策略或被设计为通常当满足条件或一组条件时选择数据或执行动作的其他类似结构。作为示例,表达式可以是当存在条件或一组条件时主动地通知用户特定信息的数字助手或其他系统的部分。这可能是如下情况,其中用户想要当外面正在下雨时或者当用户请求在每个早上呈现她在该日的日程表时被通知。表达式还存在于云服务架构中,其中云服务需要在给定时间在存储器中保持许多代码片段
[0019] 随着用户的数目增加,系统可以在长期计算中具有数千万或数亿万表达式。这呈现资源管理的问题以及将表达式保持于能够容易地访问它们的存储器中与又高效地利用系统的存储器和其他存储之间的权衡。在本公开中系统将被呈现为云服务或至少利用云服务架构。然而,单个系统或系统的集群等等也提供用于如下面所讨论的本公开的合适的背景。如将解释的,本公开特别地适用于系统必须存储从相对有限数量的模板导出的许多表达式的情况。
[0020] 本文中描述的实施例获取表达式并将它们转化为共同格式,诸如表达式树。表达式树的跨各表达式共同或者可能跨各表达式共同的部分之后与对表达式独特的部分分离。共同部分被高速缓存在高速缓存中并且对共同部分的引用与表达式的独特部分捆绑以便减少表达式的存储要求。再融合(rehydration)(即,原始表达式的恢复)通过反转过程来进行。
[0021] 说明
[0022] 图1图示了提供表达式的系统的示例架构100。如本文中所使用的,表达式包括元编程表达式,其中代码被处置为数据以及过滤器、查询、规则、策略或被设计为选择数据或执行动作的其他类似结构。有时,当满足条件或一组条件时执行表达式。在图1的架构100中,表达式110由服务提供108使用。取决于服务提供108,表达式110可以持续一定时间段。在一些实例中,表达式110可以存在延长的时间段并且需要在整个该时间中可用于由服务提供108使用。实例服务提供包括商业智能、数据分析、数字助手、订阅/通知服务、以及许多其他类型的服务提供。作为表达式的几个代表性示例,考虑以下项:
[0023] 1.“通知我针对西部地区的销售平何时达到针对任何给定天的$100,000。”[0024] 2.“告诉我西雅图的天气。”
[0025] 3.“标识与太阳能发展有关的文章并将它们转发给我。”
[0026] 4“.当针对脉管11的温度警报被触发时,从传感器8a、9b和10c收集数据,将数据保存到日志文件,并将通知发送到工厂管理者。”
[0027] 5.“在每场比赛之后将科罗拉多洛矶队的得分发送给我。”
[0028] 这些表达式用英语而不是编程和/或查询语言编写以便以简单易懂的方式说明本文中的构思。然而,表达式通常以某种编程、脚本和/或查询语言来精心制作。表达式的许多其他示例可以被给出。一般,表达式可以被认为是被维持用于由服务、程序、等等执行的任何类型的“代码”。取决于服务提供和用户的数量,由特定云服务托管的表达式可以达到非常大的数量,包括百万、千万或亿万。因此,表达式的高效且有效存储是重要的考虑。
[0029] 如果表达式不经常被使用,则它们可以被交换出到更慢的存储装置,诸如数据存储设备112。然而,在一些实例中,响应时间是重要的并且将表达式保持在盘上不是很好的解决方案,因为将东西移动到外部存储可以导致检索期望的表达式使得其可以被执行的延迟。将表达式保持在存储器中的其他实例可以在多个表达式共享查询的大部分的情况下有意义。例如,“告诉我西雅图的天气是否下雨”和“告诉我西雅图的天气是否是晴天”共享查询的大部分,其中区别仅仅是“晴天“和“下雨”。将查询保持在存储器中可以帮助优化表达式。因此,在存储器存储解决方案中在一些意义上通常是更好的,但是将大量保持在存储器中可以导致显著的存储器使用和成本。
[0030] 服务提供108通常驻存于或被执行于云服务计算架构106上,因为其提供随着需求扩大或缩小而按比例放大或缩小的益处。然而,本文的实施例可以在非云类型架构中操作的单个机器或机器的集群上被执行。
[0031] 用户设备102通过如所图示的网络104访问服务提供108。
[0032] 图2图示了云架构200的示例。图2的架构200表示用于实施本文中描述的实施例的合适的环境。该架构202表示云架构通常对用户、开发者、等等看起来如何。架构一般是实际底层云架构实施方式的抽象表示。例如,云架构202包括多个层,其表示与云架构200相关联的不同功能和/或服务。
[0033] 硬件层218包括数据中心设施和机械系统以及存储、网络和计算基础设施。这些元件中的每个元件提供使得管理接口能够与架构的更高层交互。
[0034] 虚拟层216表示云计算架构中利用的虚拟机、虚拟网络、容器、等等。该层允许这些虚拟部件共享卷、盘、计算资源、等等。能的部分是提供与云计算机相关联的资源池化和弹性。
[0035] 自动化层214、管理层212和编排层210在IT过程自动化方面从最大粒度构建到最大宽度。自动化层214提供允许更高层管理系统与虚拟资源和物理资源之间的接口的基础技术和服务。
[0036] 管理层212提供利用自动化层214技术来执行管理任务的服务,管理任务诸如为检查补丁顺从性、部署补丁、验证安装、等等。管理层212提供通常受限于服务器管理生命周期的一个特定方面(诸如部署、打补丁、监控、备份、等等)的基本过程自动化。
[0037] 编排层210绑定多个产品、技术和过程以实现端到端IT过程自动化。编排层210帮助创建和/或运行IT工作流,其使诸如集群部署、托管补丁、虚拟机提供、等等的复杂任务自动化。
[0038] 平台即服务(PAAS)层208可以包括各种平台类型提供,诸如数据库数据库管理系统、测试工具、部署工具、目录服务、等等。软件即服务(SAAS)层206可以包括各种服务提供,诸如电子邮件/即时消息通讯、商业应用、社交网络、办公生产力和自动化、虚拟桌面等等。
[0039] 租户自服务和管理员接口层204表示被提供给用户的那些服务和/或接口以提供自助类功能。例如,该层可以提供允许用户删除溢出数据的功能,在以上描述的基本功能(即,删除数据、清空垃圾桶、等等的能力)和本文中描述的允许对溢出数据的安全删除的功能两方面上。在一些实施例中,该功能可以是服务(例如,数据共享服务、电子邮件服务、等等)本身的部分。在一些实施例中,该功能可以是云服务架构的部分。在另外的其他实施例中,其组合被使用。
[0040] 本公开的实施例将通常被实施于这些层中的一个或多个中。具体地,如下面所描述的,在系统根据下面描述的实施例压缩表达式的情况下,实施例可以结合操作系统(例如,作为硬件和/或虚拟化层的部分)被实施。额外地或备选地,它们可以被实施于云架构内的(多个)其他层处。
[0041] 数据中心220是各种资源池222以及它们的组成标度单元的表示。该数据中心表示图示了与云计算架构一起出现的缩放和弹性。资源池222包括服务器(或计算)标度单元226、网络标度单元224和存储标度单元228。标度单元是能够部署在数据中心内的最小单元的服务器、网络和/或存储单元。标度单元允许根据需求增加或减少部署更多容量。
[0042] 网络标度单元224包含可以被部署的一个或多个网络230(诸如网络接口单元、等等)。网络230可以包括例如虚拟LAN 232、234。计算标度单元226通常包括包含多个处理单元(诸如处理器238、240的)单元236。存储标度单元228包含一个或多个存储设备,诸如盘、存储附接的网络(SAN)、网络附接的存储(NAS)设备、等等。这些被共同地图示为SAN 242。每个SAN 242可以包括一个或多个卷、盘、等等242、246。
[0043] 图3图示了云架构300的示例的另一视图。该视图是更关注硬件的并且图示了在图2的更逻辑架构下面的资源。云架构300通常具有多个服务器或其他系统302、304、306、308。
这些服务器包括多个真实和/或虚拟服务器。因此,服务器302包括服务器1以及虚拟服务器
1A、1B、1C等等。
[0044] 服务器通过诸如网络A 310和/或网络B 312的一个或多个网络来连接和/或相互连接。服务器还被连接到多个存储设备,诸如SAN 1(318)、SAN 2(320)和备份322。尽管备份322通常经由SAN或其他这样的存储设备被实施,但是其出于解释的目的在本文中单独地被唤起。SAN通常通过诸如SAN接入A 314和/或SAN接入B 316的网络被连接到服务器。
[0045] 图2的计算标度单元226通常是服务器302、304、306和/或308的一些方面,如处理器和与之相关联的其他硬件。网络标度单元224通常包括或至少利用图示的网络A(310)和B(312)。存储标度单元通常包括SAN 1(318)、SAN 2(320)和/或备份322的一些方面。因此,图2的逻辑云架构可以被映射到图3的物理架构。
[0046] 本文中描述的实施例的服务和/或其他实施方式将运行在服务器和/虚拟服务器上并且利用各种硬件资源来实施所公开的实施例。
[0047] 图4图示了压缩表达式的示例图。诸如表达式402的表达式具有共同的形式。换言之,表达式通常具有各种细节,但是许多共享共同的模板。例如,“告诉我何时下雨”和“告诉我何时晴天”之间的差别仅仅在于“下雨”或“晴天”的具体细节但是其他方面是相似的和/或相同的。来自特定领域的表达式通常具有可以用于减少用于存储表达式的存储同时保持访问时间相对快速的许多相似性。换句话说,当与由特定服务托管的表达式实例的数量相比较时,来自特定领域的表达式通常具有几个模板。
[0048] 因为表达式是或者可以使用编程语言、脚本语言和/或查询语言来实施,所以表达式可以被解析并转变为语法树。在本公开中,该语法树将被称为表达式树并且可以是图示由表达式执行的操作以及由表达式使用的任何“数据”(即,细节)的任何表示。换言之,表达式树是标识表达式的操作、流和数据的任何组合的系统中的针对表达式的共同格式。因此,在图4中,解析操作404将表达式402转变为表达式树406。如以上所指出的,表达式树不一定必须为“树”或以树格式存储数据。然而,树通常用于表示程序(即,可执行代码)的语法并且可以在一些实施例中被用作表达式树表示。
[0049] 表达式树406包含不太可能改变(即,采用另一表达式)的部分以及可能改变的部分两者。各种策略可以用于从模板(即,不太可能改变的方面)中分离出独特方面(即,可能改变的方面)。这由操作412图示。从模板中分离出独特方面的过程有时被称为“提升(hoisting)”。下面描述从独特方面来标识模板的各种策略。
[0050] 在图4中,模板由414图示而独特方面由416表示。模板414被存储于高速缓存418中并且获得高速缓存引用422。高速缓存引用422和独特方面416被组合成“捆绑”420。捆绑420无损地表示表达式402同时占用比表达式402更少的存储器。另外,对高速缓存418的使用通常允许比在表达式被交换出到盘的情况下重新组成原始表达式的更少延迟。
[0051] 针对模板和捆绑的高速缓存要求可以不同并且用于存储模板和捆绑的高速缓存可以被创建以利用这些差异。例如,模板一般需要不仅容易可用于如下面所讨论的再融合,而且容易可用于对新表达式的比较和压缩过程。另一方面,(例如,仅仅在再融合期间)不太经常访问捆绑。在一些实施例中,捆绑成批地被再融合(即,许多捆绑同时)。捆绑还倾向于将它们本身很好地适用于表中的列式存储。因此,对于成批的高效再融合,利用相同/相似模板的捆绑的同质模式,捆绑可以根据每个实例被存储一行并且根据每个提升的常量、变量、等等被存储一列。因此,变化的特性可以当其开始存储捆绑和模板时不仅通知高速缓存设计而且也通知高速缓存策略。
[0052] 高速缓存418可以是适合于实施方式的任何类型的高速缓存。例如,在云服务实施方式的背景下,高速缓存418可以依赖于处理器、服务器、等等中的高速缓存存储器。高速缓存418可以是单级高速缓存、多级高速缓存、或其他高速缓存类型结构。另外,高速缓存418可以根据任何期望的策略来管理,诸如最近最少使用(LRU)策略,其中最近最少使用的项目被移除和/或转移到更低级高速缓存以为新高速缓存的项目让出空间。其他策略在本领域中是已知的,并且除非特别指示,否则本文中的实施例不限于任何特定高速缓存和/或高速缓存管理策略。
[0053] 再融合是根据捆绑420恢复原始表达式402的过程并通过反转刚刚描述的过程来执行。下面更详细地讨论再融合。
[0054] 图5图示了压缩表达式的另一示例图500。图500图示了当使用本文中的公开内容将各种表达式压缩成捆绑时高速缓存(即,图4的高速缓存418)如何被改变。
[0055] 在时间T1,表达式502被压缩成捆绑510。系统首先对表达式502进行提升以标识表达式的模板部分504和独特部分505。在该示例中,高速缓存最初是空的,如由506所示的,并且系统将模板504存储到高速缓存中,如由508所示的。捆绑510之后被包装有如图示的高速缓存引用(R1)和独特部分。
[0056] 在时间T2,表达式512被压缩成捆绑520。系统将表达式512提升成模板514和独特部分515。高速缓存已经包含来自表达式502的模板,如由516所示的。系统将模板514与存储于高速缓存516中的模板(即,模板504)进行比较以查看是否存在匹配。这可以通过使用模板的散列作为高速缓存键或以其他方式比较如下面所讨论的签名来完成。由于模板514不匹配模板504,所以模板514被存储到高速缓存中,如由518所示的。获得到模板514的引用(R2)并且根据高速缓存引用(R2)和独特部分515来创建捆绑520。
[0057] 在时间T3,表达式522被压缩成捆绑530。同样,表达式522被提升成模板524和独特部分525。系统将模板524与存储于高速缓存中的模板(504和514)进行比较,如由526所示的。由于模板524不匹配模板504,所以没有什么被添加到高速缓存(528),并且获得到匹配模板的引用(R1)。之后根据引用(R1)和独特部分525来创建捆绑530。
[0058] 图6图示了将表达式压缩成嵌套捆绑的示例图600。尽管下面的讨论将表达式分离成单个模板,但是在一些实例中,系统可以从提升的表达式中递归地提升独特成分并且得到的表达式具有来自高速缓存的多个链接和来自原始表达式的多个独特部分。
[0059] 原始表达式602具有其可以被压缩成捆绑的多种方式。在该实例中,系统首先将表达式602提升成模板604和三个独特部分606A、606B和606C。独特部分606B是完全子树。在本文中描述的方法和实施例中,独特部分是个体节点还是整棵子树不重要。下面更详细地解释这一点。
[0060] 模板604被存储于高速缓存618中并且获得引用(R1)。因此,在第二次提升之前,“外”捆绑包括到模板604的引用(R1)和三个独特部分606A、606B、606C。
[0061] 中间子树606B可以再次被提升,如图6所示。在中间子树606B被提升之后,其被分解成模板612和两个独特节点610。模板612被存储于高速缓存618中并且“内”捆绑616根据到模板612的引用(R2)和两个独特节点610来创建。因此,整个捆绑614具有到第一模板604的引用(R1)、两个独特外节点606A和606C以及具有到模板612的引用(R2)和两个独特节点610的内捆绑616。
[0062] 因此,本文中的实施例可以执行多轮提升以便创建“嵌套”捆绑。当对嵌套捆绑进行再融合时,再融合过程可以从外捆绑或内捆绑开始,因为两者都将可行。
[0063] 当根据一个或多个高速缓存引用和一个或多个独特部分来创建捆绑(嵌套或非嵌套)时,位置信息可以被保留使得在再融合期间,独特部分可以被放置于由高速缓存引用所引用的模板的合适节点中。因此,在图6的嵌套捆绑614的示例中,独特部分606A、内捆绑616和独特部分606C可以显式地或隐式地包括位置信息以允许再融合过程将合适的独特部分与模板中的合适的节点相关联。
[0064] 显式位置信息应当相对易于理解。因此,显式位置信息可以被存储为捆绑的部分、与捆绑相关联的元数据的部分、等等。
[0065] 隐式位置信息可以依赖于特定“打包”和“解包”以便标识什么到哪里。例如,如果嵌套捆绑以以下次序被存储:[R1;606A;R2;610;610;606C],则其可以通过在没有任何显式次序信息的情况下从左向右进行来再融合。因此,为了再融合,系统将首先检索由R1引用的模板(即,模板604)。该模板具有其中独特信息需要被替换的三个位置(即,由模板604中的空节点图示)。下一项目被检索并被放置于最左边的节点位置中。在这种情况下,独特部分606A将被放置于最左边的节点位置中。
[0066] 存储中的下一项目是高速缓存引用R2。由R2引用的模板612将被检索并且其根节点被放置于模板604中的下一(即,中心)开放位置中。这导致由模板612表示的“子树”被放置于模板604的“中心”开放节点中。
[0067] 仍然从左向右前进的再融合过程将在之后对由模板612表示的子树进行再融合。因此,子树/模板612的最左边的开放节点将被填充有从存储检索的下一项目,其是第一个独特部分610(即,左边的节点)。检索到的下一项目将是第二个独特部分610,其将被放置于子树/模板612的下一开放节点中。
[0068] 再融合过程之后前进到下一开放节点,其是模板604的最右边的开放节点并将下一检索的项目(即,604C)放置于该节点中。此时,捆绑是空的并且原始表达式树已经被再融合。
[0069] 尽管该再融合过程基于以上标识的特定存储次序,但是“捆绑”可以以将在之后引起对再融合过程的同量改变的其他格式和/或次序被存储。例如,再融合过程可以基于深度优先遍历或任何其他类型的遍历。所有需要的是能够将提升的部分替换到模板中它们的原始位置中。下面呈现对再融合的进一步讨论。
[0070] 图7图示了对表达式进行压缩的示例流程图700。在操作702中,标识要被压缩的表达式。由于压缩表达式700可以独立于对表达式的任何执行来操作,所以过程700可以被离线或在背景中执行,很像高速缓存维护、垃圾收集、或任何其他维护过程。压缩过程700可以通过许多标准来触发,许多标准不一定是相互排斥的。例如,压缩过程700可以基于定期或不定期排程、根据定时器、基于系统事件(诸如存储器使用高于给定阈值、“空间时间”度量指示表达式还没有在给定时间段内被访问、自上次访问时间度量的时间、等等)、系统事件的组合、或其任何组合来触发。
[0071] 操作702可以被设置为循环通过尚未被压缩的所有表达式或者可以被设置以基于特定标准或一组标准来选择表达式。例如,如果表达式还没有在特定时间段(即,自列表触发器/访问超过阈值的时间)内被触发,使用频率数量(或其他使用度量)低于阈值,则系统预测压缩因子(即,与由压缩的表达式占据的估计的存储器相比由未压缩的表达式占据的存储器)高于特定阈值和/或任何其他标准或标准的组合,则系统可以选择表达式用于压缩。
[0072] 一旦表达式被选择用于压缩,操作704就将表达式解析成共同格式,诸如先前讨论的表达式树。尽管表达式树已经被给出作为代表性示例,但是可以使用其本身适用于将模板(即,不太可能改变的部分)与独特部分(即,可能改变的部分)分离的任何共同格式。
[0073] 一旦操作704完成,提升(操作706)就标识可能改变的部分和太可能改变的那些部分。下面讨论这可以如何完成的几个示例过程的。
[0074] 操作708从表达式树中提取模板(即,不太可能改变的部分)并且检查以查看模板是否已经在高速缓存中(操作710)。下面讨论执行该检查的过程。
[0075] 如果模板已经在高速缓存中,则采用“是”分支716并且在操作718中检索高速缓存引用。否则,如果模板不在高速缓存中,则采用“否”分支712并且在操作714中将模板存储于高速缓存中并且在718中获得高速缓存引用。
[0076] 系统可以之后将独特部分与高速缓存引用一起存储(即,操作724)或者可以如结合图6所解释的在操作720(其示出环路722)中再次提升表达式。
[0077] 注意尽管操作724被示出为在所有提升完成之后创建捆绑,但是捆绑可以以递增的方式来创建,其中引用和独特部分当它们被提取时被存储,使得内容以如结合图6所讨论的特定次序被存储。
[0078] 图8图示了对表达式进行解压缩的示例流程图800。解压缩过程800也在本文中被称为再融合。再融合过程可以以各种方式来触发。例如,再融合过程可以当系统需要调用/执行表达式时被触发。备选地,再融合过程可以被定期地或不定期地调用并且可能需要再融合的任何表达式可以在那时被再融合。
[0079] 在其他示例中,一些实施例可以利用度量、(多个)系统事件、和/或其他标准来调用再融合过程800。例如,系统可以具有某些表达式被调用的时间。因此,如果表达式是“在每个早上递送我的位置的头条新闻”,则系统可以标识用户位于哪里并且获知表达式将在针对用户的6:00am当地时间被调用。在这些类型的情形中,系统可能能够确定表达式何时将被调用或可能被调用并且及时调用再融合过程800以供表达式利用。
[0080] 表达式被调用的历史使用(即,何时或多久)可以向系统给出预测表达式何时可能被调用的方式并且在该时刻之后触发再融合过程。因此,系统可以跟踪调用时间并使用各种已知算法来确定调用的模式以标识何时算法可能被调用。例如,如果系统创建调用时间的直方图,则直方图可以被转换成概率分布,其可以用于基于直方图变量(即,一天中的时间、一月中的时间、一年中的时间、自最后一次调用的时间、等等)来确定调用的可能性。
[0081] 在其他实施例中,预测何时表达式可能被调用可以依赖于不同的和/或额外的方法/标准。
[0082] 当被调用时,再融合过程标识要在操作802中再融合的表达式。如果例如再融合基于定期或不定期调用排程,则操作802将使用诸如以上指出的那些的标准(即,哪些表达式可能被调用,或者以上的其他标准)。如果另一方面再融合过程800特别地因为特定表达式(或表达式的组)被调用或可能被调用而被调用,则操作802可以标识哪个表达式或表达式的组适合该标准并选择列表上的下一表达式。
[0083] 操作804获得来自捆绑的高速缓存引用并且操作806从高速缓存中检索模板。在操作808中获得独特方面。
[0084] 如果已经获得了需要重新创建表达式所需要的所有信息,则任何中间格式(即,表达式树或其他中间格式)可以被重新创建并且在操作816中将表达式放入合适的格式,诸如由系统使用的编程、查询或其他语言。
[0085] 如果捆绑是嵌套的,则操作812循环回到操作804,使得子树可以被提取并且被再融合。
[0086] 再融合过程800的操作还可以如结合图6所描述的被重新布置以便允许以如以上所解释的更增量的方式进行再融合。
[0087] 图9图示了标识表达式的共同部分和独特部分的代表性示例900。在该代表性示例900中,标识模板可以通过使用领域特定的知识902来完成。领域特定的知识是关于被使用或可能要被使用的模板的特定格式或类型的任何知识。仅通过举例的方式,在某些环境和系统中,可以被使用的模板的类型受系统或受用户可能请求什么限制。例如,考虑数字助手系统。在这些系统中,用户可以执行的动作通常表示闭集。因此,用户可以向系统请求特定位置的天气,但是可能不能向系统请求预定披萨。在用户可以执行或者请求系统执行的动作的类型的情况下,模板904的集合可以通过创建针对闭集的成员的模板来创建。这创建大量前期工作,但是允许通过如何创建模板来调谐压缩。
[0088] 作为在模板创建期间并入领域特定的知识的另一备选方案是提供应用编程接口(API)(未示出)以允许系统的用户创建模板,很像存储的流程或用户定义的功能。API可以提供直接馈送到系统中的通用机制。换言之,用户可以调用API以启动图7、图9或执行表达式压缩的其他领域中描述的过程。API将包含语法列表,语法列表将在API的调用后变成捆绑的部分。然而,这些参数(即,语法列表)它们本身可以在许多实例中被进一步优化,诸如在语法它们本身是表达式的情况下。另外,对于为模板的语法,系统可以诸如在共享共同片段的许多流程(即,通过API)被定义的情况下进一步优化它们(例如,当系统获知哪些是共同/独特的时提升为共同/独特的部分)。
[0089] 领域知识可以用于标识不太可能改变的部分(即,模板)的另一方式可以与图9中的实施例或下面图10中描述的实施例一起使用。领域特定的知识902可以给出关于表达式中使用的变量的类型、常量、字符串和其他类型的参数(共同地被称为参数)的信息。因此,领域特定的知识可以得到关于哪些参数等价并且哪些参数不等价的信息。例如,存在其中常数可以看起来像字符串/变量和/或反之亦然的情形。考虑包括确定表达式的输出应当如何被格式化(即,用于显示或用于另一原因)的字符串的表达式。从表面上看,格式化字符串是变量(可以在不同表达式之间变化)。然而,在一些领域中,表达式通常使用该格式化字符串,之后用于标识表达式中的模板,字符串可以被当作常量而非变量。它们可以因此被当作如常量用于根据表达式来标识模板。领域知识还可以用于标识为常量或看上去像常量而不应当被当作常量用于标识模板的事物。
[0090] 领域知识还可以给出关于表达式中的节点的次序是否重要的信息(即,可以被当作用于标识/匹配模板和/或独特部分的等价物)。
[0091] 在图9中,模板集合904表示根据动作的闭集创建的模板。这些模板可以被离线创建并且权衡可以被评价以标识可能给出系统中的最好总体压缩性能的模板的集合。一旦被创建,模板集合904就可以被固定并且因此用作用于压缩的固定代码本,或者可以用作用于更自适应系统的开始点,如下面进一步所描述的。模板集合904可以在压缩过程(即,图7的操作706)中被用于标识不太可能改变的部分。例如,模板集合904可以用作具有可以使用任何类型的树和/或模式匹配算法被匹配到传入表达式以标识表达式的不太可能改变的部分的不同树和子树的代码本。因此,当传入表达式树的树和/或子树与模板集合904的成员匹配时,该部分被标识为针对对应表达式的模板。因此,模板集合904可以被存储以便被用于标识表达式树的应当被标识模板的部分。
[0092] 模板集合904中的全部或部分可以被存储于高速缓存906中。在一些实施例中,在不是所有模板集合904都被存储于高速缓存906中的情况下,高速缓存的部分表示可以在之后演变以根据选定高速缓存管理方法来高速缓存模板集合906的“最好”子集的初始高速缓存状态。
[0093] 可以针对模板创建签名(操作908)以帮助标识在被压缩的表达式树中标识的模板是否已经驻存于高速缓存中。在这种意义上,签名是与模板相关联的指纹或其他标识符。好签名是独特的或者因此可能是独特的以便具有最小冲突险(即,两个不同模板生成相同签名)。许多算法存在并且对本领域技术人员将是已知的,其将生成合适的签名。图11给出签名可以如何被创建的代表性示例。如图9所示,签名可以被存储于高速缓存中,被存储于单独的高速缓存中(并且被链接到高速缓存的模板),或者否则以允许从模板签名中快速检索对应的高速缓存的模板的方式与对应的高速缓存的模板相关联。在一个代表性示例中,签名可以被用作到高速缓存的密钥(即,高速缓存引用)。
[0094] 当压缩过程(诸如图7中图示的压缩过程)标识了模板910时,系统标识模板910是否驻存在高速缓存906中。在一个代表性示例中,模式匹配算法912可以用于标识所标识的模板910是否驻存在高速缓存中。在另一代表性示例中,所标识的模板910的签名可以被创建(操作918)并且签名可以用于标识模板是否驻存在高速缓存中(操作920),如以上所解释的。
[0095] 图10图示了标识表达式的共同部分和独特部分的另一代表性示例1000。该实施例具有其自适应本质使得如何从传入的表达式标识模板可以随时间改变。
[0096] 一些实施例对高速缓存进行播种以便快速启动过程。对空高速缓存进行播种的一个过程被图示在图10中。对空高速缓存进行播种的一种方式是将初始表达式分解成各种模板。例如,初始表达式1002。候选模板1028的初始集合可以通过获取初始表达式1002的树和子树的组合来创建(操作1026)。因此,模板1018通过提升出叶节点1004、1006、1008、1010来创建。模板1020通过提升出子树1012、节点1014、以及叶节点1008和1010来创建。模板1022通过提升出子树1012、节点1014、以及子树1016来获取。模板1024通过以子树1016开始并提升出子树1008和1010来获取。树和/或子树的其他组合可以被使用,但是这足以用于说明不同的候选模板可以如何被创建(操作1026)。
[0097] 通过操作1026创建的候选模板可以依赖于领域特定的知识和/或由框1032表示的模板选择规则、策略和/或方法的初始集合。可能的模板选择规则的示例的非穷举列表是:
[0098] 1.提升表达式中的常量。
[0099] 2.基于以下项来托管特定类型的参数或选定参数:
[0100] i.表达式树中的位置;
[0101] ii.参数在“提升的参数”的列表中的包含;
[0102] iii.参数的值;
[0103] iv.参数的类型;
[0104] v.提升参数允许可能的模板与模板高速缓存中的模板匹配;或者
[0105] vi.其他领域特定的规则/信息。
[0106] 3.在选择由以下项中的至少一项定义的情况下提升选择常量:
[0107] i.表达式树中的位置;
[0108] ii.常量的值;
[0109] iii.提升常量允许可能的模板与模板高速缓存中的模板匹配;或者
[0110] iv.其他领域特定的规则/信息。
[0111] 4.提升表达式中的自由变量。
[0112] 5.在选择基于以下项中的至少一项的情况下提升表达式中的选定变量:
[0113] i.表达式树中的位置;
[0114] ii.变量在“提升的变量”的列表中的包含;
[0115] iii.变量的值;
[0116] iv.变量的类型;
[0117] v.提升变量允许可能的模板与模板高速缓存中的模板匹配;或者
[0118] vi.其他领域特定的规则/信息。
[0119] 6.在子树基于以下项中的至少一项来选择的情况下提升选定子树:
[0120] i.表达式树中的位置;
[0121] ii.“提升的表达式子树”列表上的包含;
[0122] iii.子树在高速缓存中被发现作为模板的基础;
[0123] iv.提升子树允许可能的模板与模板高速缓存中的模板匹配;或者
[0124] v.其他领域特定的规则/信息。
[0125] 7.一旦各种变量模板被利用就浏览高速缓存和/或模板历史并提升传入的表达式的剩余的那些部分(即,提升传入的表达式树的与模板集合中的模板的组合不匹配的那些部分)。
[0126] 对于大部分,以上示例应当是自解释的。然而,几个评论可以帮助澄清以上示例中的几个示例。在这种背景下,提升的常量、参数、子树等等意味着常数、参数、子树等等至少针对初始提升被标识为独特部分(即,不是模板的部分)。如以上所解释的,在子树被提升的情况下,它们也可以被重新评价并在提升的子树中标识模板使得嵌套捆绑最终被创建。示例中的若干示例,例如常数、参数、变量、等等,在它们在“提升”的列表上的情况下被提升。“提升”的列表是包含常数、参数、变量、等等的列表,正如系统将在它们存在于候选表达式中的情况下选择用于提升的情况一样。项目可以出于各种原因被放置于提升的列表上并且列表可以基于一些先验知识(即,领域特定的知识)、基于过去的历史(即,系统可以保持跟踪在传入的表达式中出现的项目并在不经常出现的事物应当被提升为独特的假设下将没有出现超过特定阈值次数的那些放置于列表上)、或者基于其他标准来创建。
[0127] 在高速缓存中发现的子树可以被提升并且用于在一些实例中创建嵌套捆绑。因此,如果子树在高速缓存中被发现作为模板的基础(可能通过提升出参数和/或子树),则子树可以被标识用于提升并创建启用的嵌套捆绑。
[0128] 对于最后一个规则,系统将要做的是查看先前已经被选择的模板(高速缓存中或历史中)并标识可以用于压缩传入的表达式并提升剩余部分的模板的组合。该规则还可以通过对可以被组合使用的模板的数量施加限制、选择使用最少模板的组合、等等来改进。最后一个规则使用模板的集合作为代码本来压缩传入的表达式,如以上结合图9所解释的。差别在于在该实施例中,模板的集合可以如下面所解释的改变。
[0129] 尽管以上模板选择规则已经根据什么应当从表达式中被提升出来形成,但是额外地或备选地,模板选择规则可以标识什么不应当从模板中被提升出来。通过进一步的解释,以上示例规则中的若干陈述了参数、子树、等等应当在它在提升的列表上的情况下被提升。类似地,列表可以由不应当被提升的事物保持。例如,如果参数、常量、变量、子树、等等频繁地出现(特别是以表达式树的其他节点的组合),则该参数、常量、变量、子树、等等不应当被提升并且应当被剩余作为模板的部分。因此,实施例可以具有包括理论上比应当被剩余在标识的模板中的经常出现(特别是以与其他事物的组合)的事物被看见多于预定次数(单独地或以与其他事物的组合)的事物的列表。其他规则可以标识不应当被提升出来的事物并且本领域技术人员可以容易标识以上示例规则可以如何被修改以标识不应当从可能模板中被提升出来的项目。
[0130] 用于(即,经由操作1026)创建候选模板1028的集合用于预加载高速缓存1030的模板选择规则还可以在一些实施例中被用作模板选择规则1032的开始集合。这些规则可以当接收到新表达式随时间演变并且如下面所解释的针对规则进行评价。
[0131] 当接收到新表达式1036时,模板选择规则1032可以由模板选择过程1038(诸如图7的操作706、708)用于标识应当从表达式中提升出来的部分和/或应当被剩余在模板中的部分。在图10的代表性示例中,新表达式1036类似于高速缓存中的事物,但是不是完全匹配。作为示例,假设规则标识两个叶节点和一个其他中间节点作为用于从表达式中提升出来的候选。剩余的模板被图示为1040。模板可以之后用于创建如在操作1042中指示的并且如先前所讨论的捆绑。由于1040未存储于高速缓存中,所以模板将被存储于高速缓存中并且高速缓存引用以及提升的节点将被组合成合适的捆绑。
[0132] 模板1040可以之后用于标识对模板选择规则的可能的改变。例如,比较过程1034可以将所标识的模板(即,模板1040)和/或潜在表达式(即,表达式树1036)与高速缓存1030、初始开始候选集合1028和/或模板的历史(未示出)中的模板进行比较,以标识与已经在过去选择的事物的相似性和差异。所标识的模板的历史可以是过去的模板的某种形式的历史。例如,其可以是所有选择的过去的模板的完整历史。因此,历史可以保持跟踪所有过去的模板并且保持跟踪模板已经多久被选择的计数。历史还可以是加权的历史,其中较老的模板被给予比较新的模板更少的权重。历史还可以是窗口化的历史,其中仅仅给定回看时段内的事物是历史的部分并且比窗口老的模板被移除。以上的组合也可以被使用。历史的目的是标识不太可能改变的项目。例如,这样的历史可以用于标识节点、子树、等等以放置于以上规则的提升的和/或未提升的列表上。
[0133] 额外地或备选地,比较过程1034可以用于标识所标识的模板(1040)和/或传入的表达式(1036)与高速缓存1030、初始开始候选集合1028和/或模板的历史(未示出)之间的差别。差别的分析可以标识可以做出的对规则的改变,以便选择具有被重复的最大可能性(即,改变的最小可能性)的模板。作为代表性示例,假设模板选择规则1032导致模板选择过程1038根据表达式1036来选择模板1040。限制假设集合1028表示模板的历史而非开始模板集合。另外假设历史的分析产生指示模板1024是历史中的最可能的模板的概率分布函数。另外,所选择的模板1024从未出现在模板历史中。在该实例中,可能更有益的是利用模板
1024作为嵌套捆绑的部分而不是创建不太可能被重复的整个新模板实例1040(至少基于至今为止收集的信息)。在这种情况下,比较过程1034可以标识针对模板选择规则1032的规则改变,其将得到合适的捆绑。
[0134] 在又一示例中,比较过程1034可以评价不同选项并且帮助选择针对模板的最好选项。该评价可以完全离线进行并且可以用于改进模板选择。例如,考虑查看模板历史中的模板并且查看现有捆绑并且在现有捆绑上运行比较并且在使用不同地选择的模板来压缩捆绑的情况下将发生的总体存储器使用的过程。该过程可以通过考虑根据诸如随机选择的一些标准来选择的现有捆绑的一些子集、嵌套捆绑、等等来运行,随机选择选择在一些时间段内压缩的捆绑(即,在上周、上月或某个其他时间窗口内创建的捆绑)。选定捆绑可以被再融合,并且表达式树被比较以标识将压缩最大数量的捆绑的最大跨度树。例如,如果每个表达式树是“叠加”的,则差别可以被标注并且捆绑通过共同节点/子树来分组。对表达式树进行重新布置以找到最大共同子集(即,针对最大数量的表达式树的最大重叠)将帮助标识针对模板的可能候选。多次迭代可以被执行,其中每次迭代标识下一个最大共同子集(即,下一个最大重叠)等等直到候选模板的集合被标识。表达式树可以之后被重新压缩并且存储器使用与原始捆绑进行比较。如果存储器使用更小,则候选模板的集合可以被用于重新压缩现有的捆绑。模板选择规则将在之后改变以利用候选模板的集合。
[0135] 作为又一示例,针对相同表达式的候选模板的多个版本可以被存储以便分析命中数(即,出现多少利用候选模板的表达式)、匹配/提升成本(时间成本、处理器周期、存储器、等等以匹配特定模板并提升出独特部分)、再融合成本(时间成本、处理器周期、存储器、等等以根据候选模板来再融合表达式)、和/或其他度量以便选择随时间形成的最有益模板。因此,在一些实施例中,针对表达式的多个模板可以存在并且不一定必须存在表达式与模板之间的独特对应关系。
[0136] 以这种方式,用于压缩表达式的模板的“代码本”可以随着表达式随时间改变而被更新。即使表达式不随时间改变,也仍然存在其中系统可以学习(即,通过测量如以上所讨论的度量)哪些模板导致更大的效率的情形。另外,在一些实施例中,如果候选模板的“新”集合与候选模板的旧集合之间的差别不会得到大于阈值的改进,则不需要做出改变。在又一备选方案中,即使当改进超过阈值时,重新压缩也可以直到某个其他系统事件之后才被触发,某个其他系统事件诸如新服务器的故障转移、自最后一次‘重新压缩’的时间限制,或者某种其他类型的事件。最后,这些过程可以全部在背景中被离线执行以便不干扰系统的操作。
[0137] 如以上所看到的,比较过程1034表示改变模板选择规则的反馈环路。该反馈环路可以以递增的方式(即,将表达式认为它们进来)或者以批量模式(即,考虑一批表达式)来应用。反馈环路还可以在背景中执行,可以定期或不定期地执行,和/或可以基于特定事件或事件的组合来执行。
[0138] 在图9和图10的实施例的描述中,在进行比较的情况下,比较可以使用匹配树和/或子树的模式匹配来做出或者可以使用签名来做出。下面的描述说明签名可以如何被生成。
[0139] 图11图示了创建针对表达式的签名的代表性示例1100。在该方法1100中,表达式树可以是模板、表达式子模板(即,模板的子树)、表达式树、和/或表达式子树。为了便于描述,这些将在图11的描述中全部被称为“模板”,对于针对该图的理解,该术语更广泛地适用。
[0140] 操作1102选择或接收要被压缩的模板。模板1104是代表性示例。
[0141] 操作1106接下来将模板平面化并以给定次序放置节点。任何树遍历算法可以用于标识模板中的所有节点,并且算法遍历树的节点的次序可以是模板中的节点的“展平”次序。多次访问节点的算法仅仅将在其第一次被访问时“输出”给定节点。模板如何被展平不重要,只要算法针对模板的相同树结构产生相同次序。展平的模板1108表示模板1104的展平。
[0142] 操作1110将展平的表示的节点转换为标准表示。同样不重要的是使用什么算法,只要表示针对给定节点使用相同表示。然而,标准表示将说明应当被匹配的事物和不应当被匹配的事物。例如,如果常量要独立于常量的实际值被匹配,则标准表示将会把任何值的常量转换成相同标准表示。如果当匹配两棵树时叶节点不应当被考虑,则转换为标准表示可以消除叶节点或针对叶节点使用“通配符”表示。如果特定类型的两个节点的次序不重要,则标准表示可以将两个节点(即,ab、aa、bb、ba)的所有组合转换成相同表示。从该描述,本领域技术人员可以理解到标准符号的转换是将应当匹配的事物映射到相同表示的一组映射规则。
[0143] 操作1114可选地根据标准表示来计算指纹或者某个易于比较的表示。如果例如易于比较两个项目的标准表示,则操作1114可以是不需要的。另一方面,如果比较标准表示将是较难的,也就是说需要字符串比较或诸如此类,则散列或其他功能可以用于比较可以被容易地比较的指纹1115。不管什么功能被用于操作1114,都应当具有两个不同的标准表示被映射到相同的指纹1115的低可能性。以密码方式的强散列函数是合适的并且具有这些属性的许多是已知的。在这种背景下,函数不需要难以反转以用于操作1114的目的。
[0144] 指纹1114之后变成如由操作1116示出的签名1118。
[0145] 示例机器架构和机器可读介质
[0146] 图12图示了适合于实施本文中公开的系统等等或者用于执行本文中公开的方法的机器的代表性架构。图12的机器被示出为独立设备,其适合于实施以上的构思。对于以上描述的服务器方面,操作于数据中心中的多个这样的机器、云架构的部分、等等可以被使用。在服务器方面中,不是所有的图示的功能和设备都可以被利用。例如,尽管用户使用以与服务器和/或云架构交互的系统、设备、等等可以具有屏幕、触摸屏输入、等等,但是服务器通常不具有屏幕、触摸屏、相机、等等并且通常通过具有合适的输入和输出方面的连接的系统与用户交互。因此,下面的架构应当被认为包含多种类型的设备和机器,并且各个方面可以取决于其形状因子和目的(例如,服务器很少具有相机,而可穿戴装置很少包括盘)存在于或可以不存在于任何特定设备或机器中。然而,图12的示例解释适合于允许本领域技术人员确定如何实施先前利用硬件和软件的合适的组合描述的实施例。
[0147] 尽管仅仅图示了单个机器,但是术语“机器”还应当被认为包括单独地或联合地执行一组(或多组)指令以执行本文中讨论的方法中的任何一个或多个的机器的任何汇集。
[0148] 机器1200的示例包括至少一个处理器1202(例如,中央处理单元(CPU)、图形处理单元(GPU)、高级处理单元(APU)、或其组合),诸如主存储器1204的一个或多个存储器,静态存储器1206、或其他类型的存储器,其经由链接1208与彼此通信。链接1208可以是总线或其他类型的连接通道。机器1200可以包括另外的可选方面,诸如包括任何类型的显示器的图形显示单元1210。机器1200还可以包括其他可选方面,诸如字母数字输入设备1212(例如,键盘、触摸屏、等等)、用户接口(UI)导航设备1214(例如,鼠标、跟踪球、触摸设备、等等)、存储单元1216(例如,盘驱动器或(多个)其他存储设备)、信号生成设备1218(例如,扬声器)、(多个)传感器1221(例如,全球定位传感器、(多个)加速度计、(多个)麦克风、(多个)相机、等等)、输出控制器1228(例如,与诸如通用串行总线(USB)、近场通信(NFC)、红外(IR)、串行/并行总线、等等的一个或多个其他设备连接和/或通信的有线或无线连接)、以及网络接口设备1220(例如,有线和/或无线)。
[0149] 可执行指令和机器可读介质
[0150] 各种存储器(即,1204、1206、和/或(多个)处理器1202的存储器)和/或存储单元1216可以存储体现本文中描述的方法或功能中的任何一个或多个或由本文中描述的方法或功能中的任何一个或多个利用的指令和数据结构(例如,软件)1224的一个或多个集合。
这些指令当由(多个)处理器1202执行时使各种操作实施所公开的实施例。
[0151] 如本文中所使用的,术语“机器可读介质”和“计算机可读介质”意指相同事物并且可以在本公开中可互换地使用。术语包括存储一个或多个指令或数据结构的单个介质或多个介质(例如,中心化或分布式数据库,和/或相关联的高速缓存和服务器)。该术语还应被理解为包括能够存储、编码或承载用于由机器运行的并且使机器执行本发明的方法中的一个或多个的指令或者能够存储、编码或承载由这样的指令使用的或与这样的指令相关联的数据结构的任何有形介质。因此,该术语应被理解为包括但不限于固态存储器、以及光学和磁性介质。机器可读介质/计算机可读介质的具体示例包括非易失性存储器,通过示例包括,半导体存储器器件(例如,电可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM))、以及闪存器件;诸如内部硬盘和可移除盘的盘;磁光盘;以及CD-ROM和DVD-ROM盘。这些术语特别地不包括非法定信号本身,其可以被涵盖在下面讨论的术语“信号介质”之下。
[0152] 信号介质
[0153] 术语“信号介质”应当被理解为包括任何形式的调制的数据信号和信号本身。术语“经调制的数据信号”意指具有以使得在信号中编码信息的方式设置或改变的其特性中的一个或多个的信号。
[0154] 示例实施例
[0155] 示例1.一种用于压缩表达式的方法,包括:
[0156] 接收处于标准表示格式的表达式;
[0157] 创建包括所述表达式的子集的模板;
[0158] 确定所述模板是否存在于高速缓存中;
[0159] 响应于确定所述模板存在于所述高速缓存中,获得对所述模板的高速缓存引用;
[0160] 响应于确定所述模板不存在于所述高速缓存中,将所述模板存储于所述高速缓存中并获得对所述模板的所述高速缓存引用;
[0161] 从所述表达式减去所述模板以标识所述模板与所述表达式之间的差异;以及[0162] 创建包括所述高速缓存引用以及所述模板与所述表达式之间的所述差异的捆绑。
[0163] 示例2.根据示例1所述的方法,还包括:
[0164] 选择所述模板与所述表达式之间的至少一个差异;
[0165] 创建包括所述至少一个差异的子集的第二模板;
[0166] 从所述至少一个差异减去所述第二模板以标识所述第二模板与所述至少一个差异之间的第二差异;
[0167] 确定所述第二模板是否存在于所述高速缓存中;
[0168] 响应于确定所述第二模板存在于所述高速缓存中,获得对所述第二模板的第二高速缓存引用;
[0169] 响应于确定所述第二模板不存在于所述高速缓存中,将所述第二模板存储于所述高速缓存中并获得对所述第二模板的所述第二高速缓存引用;以及
[0170] 将所述第二高速缓存引用和所述第二差异添加到所述捆绑以创建嵌套捆绑。
[0171] 示例3.根据示例1所述的方法,其中,所述标准表示是表达式树。
[0172] 示例4.根据示例1、2或3所述的方法,还包括创建所述模板的指纹。
[0173] 示例5.根据示例1、2或3所述的方法,其中,创建所述模板包括:
[0174] 标识所述表达式的不太可能改变的部分;以及
[0175] 将那些部分中的至少一些部分放置到所述模板中。
[0176] 示例6.根据示例5所述的方法,其中,所述表达式的不太可能改变的所述部分通过将所述表达式与模板的历史进行比较来标识。
[0177] 示例7.根据示例1、2或3所述的方法,其中,创建所述模板还包括:
[0178] 检索至少一个模板选择规则;
[0179] 基于所述至少一个模板选择规则来选择所述子集。
[0180] 示例8.根据示例1、2或3所述的方法,其中,创建所述模板还包括:
[0181] 将所述表达式与多个候选模板进行比较;以及
[0182] 选择所述多个候选模板中的与所述表达式的最大部分相匹配的候选模板作为所述模板。
[0183] 示例9.一种机器可读介质,其具有编码于其上的可执行指令,所述可执行指令当由机器的至少一个处理器执行时使所述机器执行包括以下的操作:
[0184] 选择处于标准表示格式的表达式;
[0185] 创建包括所述表达式的子集的模板;
[0186] 确定所述模板是否存在于高速缓存中;
[0187] 响应于确定所述模板存在于所述高速缓存中,获得对所述模板的高速缓存引用;
[0188] 响应于确定所述模板不存在于所述高速缓存中,将所述模板存储于所述高速缓存中并获得对所述模板的所述高速缓存引用;
[0189] 从所述表达式减去所述模板以标识所述模板与所述表达式之间的差异;以及[0190] 创建包括所述高速缓存引用以及所述模板与所述表达式之间的所述差异的捆绑。
[0191] 示例10.根据示例9所述的计算机可读介质,其中,所述指令使所述机器执行包括以下的另外的操作:
[0192] 选择所述模板与所述表达式之间的至少一个差异;
[0193] 创建包括所述至少一个差异的子集的第二模板;
[0194] 从所述至少一个差异减去所述第二模板以标识所述第二模板与所述至少一个差异之间的第二差异;
[0195] 确定所述第二模板是否存在于所述高速缓存中;
[0196] 响应于确定所述第二模板存在于所述高速缓存中,获得对所述第二模板的第二高速缓存引用;
[0197] 响应于确定所述第二模板不存在于所述高速缓存中,将所述第二模板存储于所述高速缓存中并获得对所述第二模板的所述第二高速缓存引用;以及
[0198] 将所述第二高速缓存引用和所述第二差异添加到所述捆绑以创建嵌套捆绑。
[0199] 示例11.根据示例9所述的计算机可读介质,其中,所述标准表示是表达式树。
[0200] 示例12.根据示例9所述的计算机可读介质,其中,所述指令使所述机器执行包括以下的另外的操作:创建所述模板的指纹。
[0201] 示例13.根据示例9、10、11或12所述的计算机可读介质,其中,创建所述模板的操作包括以下操作:
[0202] 标识所述表达式的不太可能改变的部分;以及
[0203] 将那些部分中的至少一些部分放置到所述模板中。
[0204] 示例14.根据示例13所述的计算机可读介质,其中,所述表达式的不太可能改变的所述部分通过将所述表达式与模板的历史进行比较来标识。
[0205] 示例15.根据示例9、10、11或12所述的计算机可读介质,其中,创建所述模板的操作包括以下操作:
[0206] 检索至少一个模板选择规则;
[0207] 基于所述至少一个模板选择规则来选择所述子集。
[0208] 示例16.根据示例9、10、11或12所述的计算机可读介质,其中,创建所述模板的操作包括以下操作:
[0209] 将所述表达式与多个候选模板进行比较;以及
[0210] 选择所述多个候选模板中的与所述表达式的最大部分相匹配的候选模板作为所述模板。
[0211] 示例17.一种实施对溢出数据的安全去除的计算系统,包括:
[0212] 处理器和计算机可读介质上可访问的可执行指令,所述可执行指令当被执行时使所述系统执行包括以下的操作:
[0213] 选择处于标准表示格式的表达式;
[0214] 创建包括所述表达式的子集的模板;
[0215] 确定所述模板是否存在于高速缓存中;
[0216] 响应于确定所述模板存在于所述高速缓存中,获得对所述模板的高速缓存引用;
[0217] 响应于确定所述模板不存在于所述高速缓存中,将所述模板存储于所述高速缓存中并获得对所述模板的所述高速缓存引用;
[0218] 从所述表达式减去所述模板以标识所述模板与所述表达式之间的差异;以及[0219] 创建包括所述高速缓存引用以及所述模板与所述表达式之间的所述差异的捆绑。
[0220] 示例18.根据示例17所述的系统,其中,所述指令使所述系统执行包括以下的另外的操作:
[0221] 选择所述模板与所述表达式之间的至少一个差异;
[0222] 创建包括所述至少一个差异的子集的第二模板;
[0223] 从所述至少一个差异减去所述第二模板以标识所述第二模板与所述至少一个差异之间的第二差异;
[0224] 确定所述第二模板是否存在于所述高速缓存中;
[0225] 响应于确定所述第二模板存在于所述高速缓存中,获得对所述第二模板的第二高速缓存引用;
[0226] 响应于确定所述第二模板不存在于所述高速缓存中,将所述第二模板存储于所述高速缓存中并获得对所述第二模板的所述第二高速缓存引用;以及
[0227] 将所述第二高速缓存引用和所述第二差异添加到所述捆绑以创建嵌套捆绑。
[0228] 示例19.根据示例17所述的系统,其中,所述标准表示是表达式树。
[0229] 示例20.根据示例17、18或19所述的系统,其中,所述指令使所述机器执行包括以下的另外的操作:
[0230] 使用来自所述捆绑的所述高速缓存引用来从所述高速缓存检索所述模板;
[0231] 标识所检索的模板内的所述差异能够驻存于其中的部分;以及
[0232] 将所述差异放置在所标识的部分内以再融合所述表达式。
[0233] 示例21.一种用于压缩表达式的方法,包括:
[0234] 接收处于标准表示格式的表达式;
[0235] 创建包括所述表达式的子集的模板;
[0236] 确定所述模板是否存在于高速缓存中;
[0237] 响应于确定所述模板存在于所述高速缓存中,获得对所述模板的高速缓存引用;
[0238] 响应于确定所述模板不存在于所述高速缓存中,将所述模板存储于所述高速缓存中并获得对所述模板的所述高速缓存引用;
[0239] 从所述表达式减去所述模板以标识所述模板与所述表达式之间的差异;以及[0240] 创建包括所述高速缓存引用以及所述模板与所述表达式之间的所述差异的捆绑。
[0241] 示例22.根据示例21所述的方法,还包括:
[0242] 选择所述模板与所述表达式之间的至少一个差异;
[0243] 创建包括所述至少一个差异的子集的第二模板;
[0244] 从所述至少一个差异减去所述第二模板以标识所述第二模板与所述至少一个差异之间的第二差异;
[0245] 确定所述第二模板是否存在于所述高速缓存中;
[0246] 响应于确定所述第二模板存在于所述高速缓存中,获得对所述第二模板的第二高速缓存引用;
[0247] 响应于确定所述第二模板不存在于所述高速缓存中,将所述第二模板存储于所述高速缓存中并获得对所述第二模板的所述第二高速缓存引用;以及
[0248] 将所述第二高速缓存引用和所述第二差异添加到所述捆绑以创建嵌套捆绑。
[0249] 示例23.根据任何前述示例所述的方法,其中,所述标准表示是表达式树。
[0250] 示例24.根据任何前述示例所述的方法,还包括创建所述模板的指纹。
[0251] 示例25.根据任何前述示例所述的方法,其中,创建所述模板包括:
[0252] 标识所述表达式的不太可能改变的部分;以及
[0253] 将那些部分中的至少一些部分放置到所述模板中。
[0254] 示例26.根据任何前述示例所述的方法,其中,所述表达式的不太可能改变的所述部分通过将所述表达式与模板的历史进行比较来标识。
[0255] 示例27.根据任何前述示例所述的方法,其中,创建所述模板还包括:
[0256] 检索至少一个模板选择规则;
[0257] 基于所述至少一个模板选择规则来选择所述子集。
[0258] 示例28.根据任何前述示例所述的方法,其中,创建所述模板还包括:
[0259] 将所述表达式与多个候选模板进行比较;以及
[0260] 选择所述多个候选模板中的与所述表达式的最大部分相匹配的候选模板作为所述模板。
[0261] 示例29.根据任何前述示例所述的方法,其中,被选择作为所述模板的所述子集是基于从先前子集选择获得的信息来选择的。
[0262] 示例30.根据示例29所述的方法,其中,基于从先前子集选择获得的信息来选择所述子集创建反馈循环,其中,被选择作为所述模板的所述子集是基于先前选择的模板的。
[0263] 示例31.根据任何前述示例所述的方法,还包括:
[0264] 使用来自所述捆绑的所述高速缓存引用来从所述高速缓存检索所述模板;
[0265] 标识所检索的模板内的所述差异能够驻存于其中的部分;以及
[0266] 将所述差异放置在所标识的部分内以再融合所述表达式。
[0267] 示例32.根据示例31所述的方法,还包括:
[0268] 使用来自所述捆绑的所述第二高速缓存引用来从所述高速缓存检索所述第二模板;
[0269] 标识所检索的第二模板内的所述第二差异能够驻存于其中的部分;以及[0270] 将第二所述差异放置在所标识的部分内以再融合所述表达式。
[0271] 示例33.根据任何前述示例所述的方法,其中,创建包括所述表达式的子集的模板包括模式匹配。
[0272] 示例34.一种装置,包括用于执行根据任何前述示例所述的方法的单元。
[0273] 示例35.一种机器可读存储装置,其包括机器可读指令,所述机器可读指令当被执行时实施根据任何前述示例所述的方法或实现根据任何前述示例所述的装置。
[0274] 结论
[0275] 鉴于本发明的原理和前述示例可以被应用的许多可能实施例,应当意识到,本文中描述的示例意味着仅仅是说明性的并且不应当被理解为限制本发明的范围。因此,如本文中所描述的本发明预见到如可以落入随附权利要求及其任何等效方案的范围内的所有这样的实施例。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈