首页 / 专利库 / 专利权 / 第I章 / 国际申请 / 修改 / 使用盲更新操作的高吞吐量数据修改

使用盲更新操作的高吞吐量数据修改

阅读:591发布:2020-07-13

专利汇可以提供使用盲更新操作的高吞吐量数据修改专利检索,专利查询,专利分析的服务。并且获取规定对与键值储存库相关联的逻辑页面的更新的更新 请求 。在没有经由读取操作 访问 逻辑页面的情况下,使用所获得的多个更新请求来发布对逻辑页面的更新。,下面是使用盲更新操作的高吞吐量数据修改专利的具体信息内容。

1.一种系统,包括:
至少一个处理器;
存储可执行指令的计算机可读存储介质,所述可执行指令由所述至少一个处理器可执行,以用于实现包括页面更新管理器,所述页面更新管理器包括:
更新获取模,所述更新获取模块访问规定对于与键值储存库相关联的逻辑页面的更新的多个更新请求;以及
更新发布引擎,所述更新发布引擎使用所访问的多个更新请求来控制所述更新的发布,所述发布在没有经由读取操作访问所述逻辑页面的情况下发生。
2.根据权利要求1所述的系统,还包括:
页面存根管理器,所述页面存根管理器经由表示页面存根的页面存根增量记录来控制所述页面存根到所述逻辑页面的当前状态的前置,所述页面存根包括所述逻辑页面的当前状态的地址的指示以及规定所述逻辑页面的属性的元数据,所述页面存根到所述当前状态的所述前置经由原子操作通过在映射表中安装表示所述页面存根的所述页面存根增量记录的地址被控制。
3.根据权利要求2所述的系统,其中:
所述更新获取模块访问规定对所述逻辑页面的记录更新的多个更新请求;以及所述更新发布引擎使用所获得的多个更新请求来控制所访问的记录更新的发布,所述发布在没有经由读取操作访问所述逻辑页面的情况下发生。
4.根据权利要求3所述的系统,其中:
所述更新发布引擎通过向所述页面存根前置多个相应增量记录来控制所访问的记录更新的发布,其中所述多个相应增量记录包括规定对在所述相应多个更新请求中规定的所述逻辑页面的相应更新的记录更新信息。
5.根据权利要求4所述的系统,还包括:
整合引擎,所述整合引擎使用被前置于所述页面存根的所述多个相应增量记录经由预定义的整合功能来控制所访问的记录更新的整合。
6.根据权利要求2所述的系统,其中:
所述更新获取模块访问规定对所述逻辑页面中的记录的递增更新的多个更新请求;以及
所述更新发布引擎使用所访问的多个更新请求来控制所访问的所规定的递增更新的递增发布,所述递增发布在没有经由读取操作访问所述逻辑页面的情况下发生。
7.根据权利要求6所述的系统,其中:
所述更新发布引擎通过控制多个相应增量记录到所述页面存根的递增前置来控制所访问的所规定的递增更新的递增发布,其中所述多个相应增量记录包括规定对所述记录的所述相应更新的键更新信息。
8.根据权利要求7所述的系统,还包括:
数据检索引擎,所述数据检索引擎控制所述键值储存库中的键的查找,以经由从存储装置到存储器中的读取操作来在所述逻辑页面的当前状态中访问所述逻辑页面的至少部分的表示;以及
合并引擎,所述合并引擎使用被前置于所述页面存根的所述多个相应增量记录经由预定义的合并功能来控制所访问的所规定的递增更新的合并。
9.根据权利要求2所述的系统,还包括:
递增冲刷引擎,所述递增冲刷引擎使用单个写入操作来控制所述逻辑页面的内容与被前置于所述页面存根的所述多个相应增量记录到被附加至存储装置的冲刷缓冲器存储区的递增冲刷。
10.一种方法,包括:
访问规定对与逻辑页面相关联的键值储存库中的键的递增更新的多个更新请求;以及使用所获得的多个更新请求来控制所述键的递增更新,所述递增更新在没有经由读取操作访问所述逻辑页面的情况下发生。
11.根据权利要求10所述的方法,还包括:
经由表示页面存根的页面存根增量记录来控制所述页面存根到所述逻辑页面的当前状态的前置,所述页面存根包括所述逻辑页面的当前状态的地址的指示,所述页面存根到所述当前状态的所述前置经由原子操作通过在映射表中安装表示所述页面存根的所述更新增量记录的地址被发起。
12.根据权利要求11所述的方法,其中:
递增地更新所述键包括:向表示所述页面存根的所述页面存根增量记录递增地前置多个相应增量记录,其中所述多个相应增量记录包括规定对在所述相应多个更新请求中规定的所述键的相应更新的键更新信息。
13.根据权利要求11所述的方法,其中:
所述页面存根包括与所述逻辑页面相关联的键边界的值。
14.根据权利要求10所述的方法,其中:
递增地更新所述键包括:在没有经由读取操作访问所述逻辑页面的情况下,通过递增地向辅助存储装置读出增量更新记录,使用所获得的多个更新请求来递增地更新所述键。
15.一种计算机程序产品,包括存储可执行指令的计算机可读存储介质,所述可执行指令使得至少一个数据处理装置:
控制规定对与键值储存库相关联的逻辑页面的更新的多个更新请求的访问;以及使用所获得的多个更新请求来控制所述更新的发布,所述发布在没有经由读取操作访问所述逻辑页面的情况下发生,作为向所述键发布所获得的更新的一部分。

说明书全文

使用盲更新操作的高吞吐量数据修改

背景技术

[0001] 电子设备的用户经常需要访问数据库系统以获取各种类型的信息。已经设计了很多不同的技术用于存储和检索数据项。例如,一些最近的硬件平台已经利用最近的硬件开发(诸如,多核处理器、多层存储器分层结构)和辅助存储设备(诸如,闪存),以努提供更高的性能。发明内容
[0002] 根据一个一般方面,一种系统可以包括一种装置,该装置包括存储可执行指令的计算机可读存储介质,这些可执行指令包括页面更新管理器,该页面更新管理器包括更新获取模,该更新获取模块获取更新请求,该更新请求规定对于与键值储存库相关联的逻辑页面的更新。在没有经由读取操作访问逻辑页面的情况下,更新发布引擎使用所获得的更新请求来发布更新。
[0003] 根据另一方面,可以获得规定对与逻辑页面相关联的键值储存库中的键的递增更新的更新请求。在没有经由读取操作访问逻辑页面的情况下,该键可以使用所获得的更新请求来递增地更新。
[0004] 根据另一方面,一种包括计算机可读存储介质的计算机程序产品存储可执行指令,这些可执行指令引起至少一个数据处理装置获取规定对与键值储存库相关联的逻辑页面的更新的多个更新请求,并且在没有经由读取操作来访问逻辑页面的情况下,使用所获得的多个更新请求来发布更新,作为向键发布所获得的更新的一部分。
[0005] 提供本发明内容以便以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容不旨在识别所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。在附图和以下描述中阐述了一个或多个实现的细节。根据说明书和附图以及权利要求书,其他特征将是容易理解的。

附图说明

[0006] 图1A至图1C描绘了示例更新操作。
[0007] 图2是示例B树原子记录存储架构的框图
[0008] 图3示出了用于高速缓存/存储层的访问方法的示例架构分层。
[0009] 图4是用于多个访问方法的无存的日志结构存储装置的示例架构的框图。
[0010] 图5示出了示例映射表。
[0011] 图6A和图6B示出了示例映射表上的示例增量更新。
[0012] 图7描绘了示例部分页面换出和示例部分交换增量。
[0013] 图8A至图8C示出了闪存存储装置上的示例日志结构存储组织。
[0014] 图9是使用盲更新操作的数据修改的示例系统的框图。
[0015] 图10A至图10C是示出图9的系统的示例操作的流程图
[0016] 图11A和图11B是示出图9的系统的示例操作的流程图。
[0017] 图12是示出图9的系统的示例操作的流程图。

具体实施方式

[0018] I.介绍
[0019] 硬件平台的最新发展已经开发了多核处理器、多层存储器分层结构和辅助存储设备(诸如,闪存),以努力提供更高的性能。例如,中央处理单元(CPU)的改变包括多核处理器和涉及多级高速缓存的主存储器访问。例如,就地更新妥协能力的闪存存储装置和硬盘供应商识别已经导致日志结构的使用增加。例如,数据中心增加了系统规模,并且商品硬件的使用增加了对高可用性技术的重视。
[0020] 很多索引应用可能需要以高吞吐量来维持快速写入。对于这样的应用,在写入(以查找键的现有值)之前所需要的读取输入/输出(I/O)可能是索引插入吞吐量的瓶颈。存在广泛的应用类别(例如,倒排索引),其中与键相关联的值可以在不知道现有值的情况下被更新(例如,向用于一个项的发布列表添加新的文档标识符(id))。对于这样的应用,更新不需要涉及读取I/O,但是底层键值储存库可能不支持这样的优化。根据本文中讨论的示例技术,在不对更高级应用做出任何假设的情况下,可以在通用键值储存库的框架内使用用于“盲”递增更新(不需要读取以执行写入操作)的机制。与本文中讨论的示例键值储存库的日志结构存储组织一起,键更新可以以可以接近顺序存储写入带宽的吞吐量来保持。
[0021] 根据本文中讨论的示例技术,还提供了一种用于对被包括在与示例键值储存库相关联的逻辑页面中的记录进行“盲”更新(不需要读取以执行写入操作)的机制。
[0022] 在本上下文中,“键值储存库”通常可以指代可以存储相应键(或项)和值的对、以及当相应键已知时的检索值的数据库管理系统的形式。例如,键值储存库可以包括具有与相应项相关联的对象的相应列表的项(例如,键)。例如,键值储存库可以存储包括与相应项相关联的文档标识符的相应列表的索引。
[0023] 例如,在倒排索引环境(例如,LUCENE)中,常见的方法是“分段索引”。当文档到达时,分段索引被一一写入。虽然这样的写入避免了读取,但是它们可能使查询服务路径复杂化。例如,查询可以扫描多个分段索引,因此用户可以在查询时间与结果的新鲜度之间做出折衷。
[0024] 在本上下文中,“倒排索引”通常可以指代索引数据结构,索引数据结构存储从内容(例如,字或数字)到其在数据库文件中或在文档或文档集合中的位置的映射。例如,当文档被添加至数据库时,可以以增加处理为代价使用倒排索引来实现快速全文本搜索。例如,倒排索引可以包括存储用于每个字的对文档的引用列表的记录级倒排索引(例如,倒排文件索引或倒排文件)、或者可以另外存储文档内的位置字的字级倒排索引(例如,完全倒排索引或倒排列表)。
[0025] 例如,在通用键值储存库环境(例如,日志结构合并树(LSM-树))中,可能不支持语义值合并。因此,读取I/O被用以执行写入,并且这可能减慢索引插入的速度。
[0026] 根据本文中讨论的示例技术,可以在驻留在存储装置(例如,盘或闪存)上的索引页面的存储器中保持细长的页面存根。该页面存根存储帮助将页面的其余部分定位在辅助存储装置上的信息(例如,存储指示页面的其余部分驻留的位置的位置信息)。例如,它还可以存储一些访问方法特定的信息。例如,它可以存储与索引页面相关联的键边界(例如,与索引页面相关联的索引的最小键值和最大键值)。因此,例如,当执行盲更新时,存根可以提供帮助确定特定键属于特定页面(或不属于特定页面)的信息。例如,如果页面在处理期间被分割,则存根具有关于边界的信息。
[0027] 在本上下文中,“页面”可以指代存储装置中的对象,其可以经由物理存储地址来被访问。如本文中使用的,“页面”可以与灵活的大小相关联,并且可以表示可以分布在多个不连续存储的存储分段上的页面存储单元。存储装置可以包括易失性存储装置和/或稳定存储装置。
[0028] 在本上下文中,“逻辑页面”可以包括基本页面和指示对页面的更新的零个或多个增量记录,因此使得页面能够在被冲刷时以碎片被写入闪存。因此,闪存上的逻辑页面可以对应于可能在被链接在一起的不同物理设备块上的记录,例如,使用文件偏移量作为指针。此外,物理块可以包括来自多个逻辑页面的记录。此外,逻辑页面可以指代存储相关信息的位置。
[0029] 根据本文中讨论的示例技术,当页面上的键的递增更新到达时,这可以作为“增量记录”被附加至页面(例如,通过链接至现有的页面存根)。可能不需要读取I/O,这是因为页面存根足以更新成功。
[0030] 根据本文中讨论的示例技术,这些增量记录可以最终使用“递增页面冲刷”来被冲刷到存储装置,其中页面的未冲刷部分被复制到更大的冲刷缓冲器,该冲刷缓冲器可以使用单个写入I/O(例如,使用LLAMA)被附加至在存储装置上的“数据日志”的结尾,因此利用整个存储写入带宽。
[0031] 在本上下文中,“冲刷”操作可以指代通过将页面复制到输出缓冲器来将页面从主存储器(例如,高速缓存存储装置)传送给辅助存储装置。
[0032] 根据本文中讨论的示例技术,在其中读取I/O可以是可接受的查找(查询)路径上,整个页面可以从存储装置中读取,并且键的值的不同片段可以被提供给“用户定义的合并功能”以获取最终值;合并功能的用户定义的属性可以使得键值储存库能够在没有任何应用知识的情况下保持通用(例如,键值储存库可以对应用“不透明”,反之亦然)。例如,特定用户可以使用用于存储和维护键值储存库的特定技术,并且可以经由用户功能的调用来使用“用户定义的合并功能”,以根据用户的特定存储/维护技术来执行合并功能。
[0033] 根据本文中讨论的示例技术,可以暴露执行对键值的递增更新的机制。
[0034] 根据本文中讨论的示例技术,可以通过附加描述对存在于存储器中的页面存根的更新的信息来有利地避免(或基本上避免)需要在这样的递增更新之前执行读取I/O。
[0035] 根据本文中讨论的示例技术,可以例如使用单个写入I/O来执行将存储这样的键值更新的页面递增冲刷到附加至存储装置的大冲刷缓冲器中。
[0036] 根据本文中讨论的示例技术,可以暴露用户定义的合并功能,其被用于将多个递增更新合并到键值以获取在查询路径上返回的最终值。
[0037] 图1A至图1C描绘了对索引的示例更新操作。如图1A所示,索引102可以在存储页面106的盘104上使用。如图1A所示,项索引t 108最初可以存储表示三个文档d1、d2和d3的值(例如,文档标识符或文档id)。请求向项索引t 108添加文档id d4的更新请求110可以被接收用于处理。读取操作112可以被执行以读取页面106,使得修改操作114可以被执行以将d4添加至项索引t 108。然后,使用更新的项索引t 108,可以执行写入操作116以将页面106写入盘104。
[0038] 如图1B所示,并且根据本文中讨论的示例技术,可以在存储基本页面134的固态设备(SSD)132上使用盲递增更新使能的索引130。如图1B所示,项索引t 136最初可以存储表示三个文档d1、d2和d3的值(例如,文档标识符或文档id)。如图1B所示,页面存根138可以用于将所请求的盲递增更新附加至项索引t 136(而不需要读取基本页面134),直到它们可以被进一步处理。例如,页面存根138可以被前置于基本页面134。请求向项索引t 136添加文档id d4的第一盲更新请求140可以被接收用于处理。该盲更新请求140可以被前置于页面存根138,从而针对基本页面134的项索引t136,更新页面存根138的当前状态以包括盲更新请求140。因此,可以在不需要读取“旧的”基本页面的情况下执行对项索引t 136的更新。
[0039] 如图1B所示,请求从项索引t 136删除文档id d2的第二盲更新请求142可以被接收用于处理。盲更新请求142可以被前置于页面存根138,从而针对基本页面134的项索引t 136,更新页面存根138的当前状态以包括盲更新请求142(以及盲更新请求140)。
[0040] 可以对项索引t 136执行查找144,这可以导致基本页面134的至少部分(即,至少项索引t 136和页面存根138)被读入存储器中。可以执行合并操作146以处理第一盲更新请求140和第二盲更新请求142,从而将d4添加至项索引t 136,并且从项索引t 136中删除d2,以与整合的页面148(来自基本页面134)一起使用。例如,可以经由如上所述的“用户定义的合并功能”来执行合并操作146,以获得最终值。
[0041] 虽然图1A和图1B仅示出了存储在存储设备中的单个页面,但是数据处理领域的技术人员将理解,在不脱离本文中讨论的精神的情况下,可以将很多页面存储在各种存储设备中。
[0042] 如图1C所示,并且根据本文中讨论的示例技术,可以与存储基本页面134的固态设备(SSD)132相关联地执行盲更新。如图1C所示,基本页面134可以包括可以被更新的多个记录160a、160b、160c。例如,则UPSERT操作在记录已经不存在的情况下可以插入记录,并且在记录存在的情况下可以使用记录的更新版本替换记录(例如,经由对基本页面134的“整个记录”更新)。根据本文中讨论的示例技术,页面存根138可以用于将所请求的盲更新170、172和174附加至基本页面134中的记录(而不需要读取基本页面134),直到它们可以被进一步处理。
[0043] 例如,页面存根138可以被前置于基本页面134。请求向基本页面134添加记录Rj的第一盲更新请求170可以被接收用于处理。该盲更新请求170可以被前置于页面存根138,从而针对页面134更新页面存根138的当前状态以包括盲更新请求170。
[0044] 如图1C所示,请求向包括基本页面134和在先更新请求170的逻辑页面添加记录Ri的第二盲更新请求172可以被接收用于处理。盲更新请求172可以被前置于页面存根138,从而针对基本页面134更新页面存根138的当前状态以包括盲更新请求172(以及盲更新请求170)。
[0045] 如图1C所示,请求针对包括基本页面134和在先更新请求170和172的逻辑页面添加/更新记录R2(例如,其可以包括已经存在的记录R2的替换)的第三盲更新请求174可以被接收用于处理。盲更新请求174可以前置于页面存根138和在先更新请求170和172,从而针对基本页面134更新页面存根138的当前状态以包括盲更新请求174(以及盲更新请求170、172)。
[0046] 可以对盲更新170、172、174与基本页面134执行整合操作180,这可以导致基本页面134的至少部分被读取到存储器中。可以执行整合操作180以将盲更新170、172、174与基本页面134整合以生成整合的页面182(来自基本页面134)。例如,可以经由如本文中讨论的“用户定义的整合操作”来执行整合操作180以获得最终值。
[0047] 虽然图1C仅示出了存储在存储设备中的几个页面,但是数据处理领域的技术人员将理解,在不脱离本文中讨论的精神的情况下,可以将很多页面存储在各种存储设备中。
[0048] 例如,BW-TREE和LLAMA技术(下面进一步讨论)可以用于倒排索引应用,以提供用于索引插入/更新的持续吞吐量。例如,与BW-TREE和LLAMA技术一起使用的日志结构存储设计可以使用用于写入的整个存储吞吐量。然而,索引插入/更新可能涉及页面读取,并且这样的读取可能干扰持续写入吞吐量的递送,特别是在硬盘上。
[0049] 这种干扰读取可以起源于两个平:
[0050] (1)应用层:处理一批文档可以涉及更新关联项的发布列表。可以通过以下方式来执行这样的更新:对键(项)执行读取以获得当前发布列表,使用新的文档ID更新当前发布列表,然后对键执行到索引中的更新(或插入)。
[0051] (2)BW-TREE层:例如,BW-TREE可以提供类似于结构化查询语言(SQL)的语义(参见例如于2012年6月20日提交的名称为“Structuring Storage Based on Latch-Free B-Trees”的发明人为David Lomet等人的共同拥有的美国专利申请序列号13/527,880以及2013年4月8-11日的29th IEEE International Conference on Data Engineering(ICDE 
2013)的J.Levandoski等人的“The BW-TREE:A B-tree for New Hardware Platforms”)。
因此,插入对键执行查找,并且在它已经存在的情况下返回错误。更新对键执行查找,并且在它不存在的情况下返回错误。在索引更新期间的上述两个读取源可能干扰数据库应用的持续索引插入/更新吞吐量。索引更新期间的这样的读取源可以被避免(或基本上避免)如下:
[0052] 对于级别(1):索引可以支持对更新前不需要读取键的键的递增更新。在应用层,这可以涉及通过仅规定要添加至发布列表(或从发布列表中删除)的文档ID来执行对项的发布列表的递增更新。这可以有利地避免在插入/更新之前在键(项)上发布读取。
[0053] 对于级别(2):索引可以有利地避免类似于SQL的插入/更新语义,取而代之在描述对键的递增更新的页面上发布增量记录。因此,插入/更新可以不涉及读取整个页面。
[0054] 用户层(例如,应用索引层)还可以提供回调功能(f)(例如,如上所述的“用户定义的合并功能”),其通过组合基本发布列表表示与对键(项)的递增更新序列来计算最终发布列表表示。在查询路径上,可以读取整个页面,并且可以将用于键的值的所有片段提供给合并功能,以计算该键(发布列表表示)的最终值,该最终值可以被返回给用户层。
[0055] 如下面进一步讨论的,盲写入(即,不涉及读取在先版本的更新)可以有利地包括避免读取在先版本,以及在事务部件(TC)处并发更新的可能性。下面讨论用于处理盲写入和它们被应用到的聚合对象的示例技术。
[0056] 根据本文中讨论的示例技术,在本文中可被称为LLAMA(无锁存、日志结构访问方法感知)的示例系统包括用于(至少)最近开发的硬件环境(例如,闪存、多核)的高速缓存和存储子系统,但是数据处理领域的技术人员应当理解这样的示例技术不仅限于最近开发的硬件。
[0057] 例如,LLAMA可以支持用于任意选择的面向页面的访问方法的应用编程接口(API),其提供高速缓存和存储管理两者,以优化处理器高速缓存和辅助存储。例如,高速缓存层(CL)和存储层(SL)可以使用分离页面的逻辑和物理位置的公共映射表。例如,高速缓存层(CL)可以经由其映射表上的无锁存的比较和交换原子状态变化来支持数据更新和管理更新(例如,用于索引重组)。
[0058] 例如,存储层(SL)可以使用相同的映射表来处理由每次页面冲刷时的日志结构所产生的页面位置改变。例如,可以使用无锁存的BW-TREE实现(例如,使用BW-TREE的实现,作为有序B树样式索引的示例)。在本上下文中,“无锁存”可以指代允许多个线程对页面的并发访问。
[0059] 本文中讨论的示例技术可以提供可以虚拟化页面的位置和大小二者的映射表。例如,如本文中进一步讨论的,这样的虚拟化可以用于主存储器设计和稳定存储设计(例如,日志结构存储设计)二者。
[0060] 本文中讨论的示例技术可以将访问方法层与高速缓存/存储管理分离。作为示例,本文中讨论的技术可以用于实施预先写入日志协议。例如,在冲刷页面之前,传统的数据库内核可以检查页面日志序列号(LSN),以确定在事务日志中是否存在尚不稳定的更新。例如,LLAMA高速缓存管理可以利用示例性增量更新来“换出”部分页面。例如,它可以从缓存中丢弃已经存在于辅助存储装置上的页面的一部分(不包括最近的增量更新)。例如,访问方法层可以定期冲刷事务日志检查点。因此,高速缓存管理器将找到足够的候选(可能是部分)页面,以满足任何缓冲器大小约束。
[0061] 本文中讨论的示例技术可以提供如下框架:该框架使得大量访问方法(即,不仅仅是单个实例)能够通过实现提供它们的子系统层来利用这些技术。此外,日志结构存储装置可以被实现用于将数据写入提供有利效率的辅助存储装置。因此,访问方法可以集中在其索引的主存储器方面,并且本文中讨论的示例技术可以提供用于实现类似于BW-TREE的性能度量的性能度量的框架。
[0062] 例如,诸如LLAMA等技术通过其API可以提供无锁存页面更新,该无锁存页面更新通过映射表上的比较和交换(CAS)原子操作来在主存储器中实现。
[0063] 例如,在管理高速缓存时,诸如LLAMA等技术可以通过仅从存储器丢弃页面的在先冲刷的部分来收回主存储器,从而不涉及任何输入/输出(I/O)操作,即使换出“脏的”页面。因此,诸如LLAMA等技术可以能够在没有来自其访问方法用户的输入的情况下控制其缓冲器高速缓存存储器大小。
[0064] 例如,对于辅助存储装置的有效管理,诸如LLAMA等技术可以利用日志结构。例如,诸如LLAMA等技术可以通过使用部分页面冲刷和基本上没有空白空间的页面(即,基本上100%的存储利用)来与传统的日志结构相比改进性能。当页面被冲刷时,这些可以减少输入/输出操作(I/O)的数量和每页面所消耗的存储量,并且因此可以减少在使用日志结构时可能经历的写入放大。此外,所有与存储相关的操作可以是完全无锁存的。
[0065] 例如,诸如LLAMA等技术可以提供(至少)有限形式的系统事务。在这个意义上,系统事务不是用户级事务,而是利用日志结构储存库,纯粹为访问方法的“私有使用”而提供原子性(例如,用于索引结构修改(SMO))。例如,这可以使得索引能够在它们增长时适应,同时并发更新继续。
[0066] 例如,BW-TREE结构可以包括一种类型的无锁存B树结构。例如,可以基于将更新增量前置于在先页面状态来执行对BW-TREE节点的更新。因此,BW-TREE可以是无锁存的,因为其可以允许多个线程对页面的并发访问。因为这样的增量更新保持页面的在先状态,所以这样的增量更新也可以提供改进的处理器高速缓存性能。
[0067] 图2是示例B树原子记录储存库架构(例如,示例BW-TREE架构)的框图200。如图2所示,访问方法层或B树层202是顶层。B树层202与作为中间层的缓存层204交互。示例高速缓存管理器可以建立在存储层206之上,存储层206可以支持示例日志结构闪存储存库。根据本文中讨论的示例实施例,日志结构储存库可以管理闪存和盘存储二者。示例映射表208可以被包括在高速缓存层204中。
[0068] 使用BW-TREE的示例技术还可以提供也是无锁存的并且可以采用B链路树型侧指针的页面分割技术。分割(和其他结构修改操作)在主存储器内和当被使得稳定时可以是原子的。例如,可以基于BW-TREE架构来实现原子记录储存库。
[0069] 数据处理领域的技术人员将理解,在不脱离本文中的讨论的精神的情况下,可以有很多方式来实现本文中讨论的无锁存和日志结构存储。
[0070] 在LLAMA层(参见例如于2013年6月22日提交的名称为“Latch-Free,Log-Structured Storage for Multiple Access Methods”的发明人为David Lomet等人的共同拥有的美国专利申请序列号13/924,567以及2013年8月26日的39th International Conference on Very Large Databases的Proceedings of the VLDB Endowment的第6卷、第10期的Levandoski等人的“LAMA:A Cache/Storage  Subsystem for Modern Hardware”),页面是被操纵的抽象。为了支持盲写入,LLAMA可以使得页面能够被更新,而不管它们是在高速缓存中还是在稳定存储装置中。
[0071] 根据本文中所论述的示例技术,示例更新接口可以支持(至少)增量更新(UPDATE-D)和替换更新(UPDATE-R)(例如,当整个页面在高速缓存中可用时)。
[0072] 根据本文中讨论的示例技术,LLAMA可以有利地支持部分页面,包括部分页面换出。
[0073] 图3示出了用于高速缓存/存储层的访问方法的示例架构分层。如图3所示,访问方法层302是顶层。访问方法层302与高速缓存层304交互,高速缓存层304是中间层。应用编程接口(API)306可以用于访问方法层302与高速缓存层304之间的活动。示例存储层308可以与映射表310交互,该映射表310可以在高速缓存层304与存储层308之间共享。例如,LLAMA 312包括高速缓存层304和存储层308。例如,存储层可以支持日志结构闪存储存库。根据本文中讨论的示例技术,日志结构储存库可以管理闪存和盘存储二者。例如,该设计可以适合作为独立的或者DEUTERONOMY样式的原子记录储存库(ARS)。
[0074] 例如,诸如LLAMA等技术可以支持页面抽象,以支持高速缓存/存储层的访问方法实现。此外,可以在顶部添加事务部件(例如,DEUTERONOMY样式的事务部件)。图4是用于多个访问方法的无锁存的日志结构存储装置的示例架构的框图。如图4所示,事务部件402可以支持事务键值储存库,并且可以与数据部件404一起操作,该数据部件404可以包括原子键值储存库。如图4所示,数据部件404可以包括无锁存有序索引406和/或无锁存线性散列索引408。如图4所示,数据部件404还可以包括示例无锁日志结构的访问方法感知(LLAMA)存储引擎410(例如,图3的LLAMA 312)。
[0075] 示例API 306可以是“数据不透明的”,这意味着示例LLAMA实现不“查看”(例如,不检查或分析或依赖于)访问方法(例如,访问方法层302)将什么放入页面或增量记录中,并且独立于通过访问方法在页面或增量记录中提供的内容而动作。因此,示例LLAMA实现可以响应于访问方法已经选择了要在其上操作的页面的特定操作而动作,并且LLAMA执行的操作不依赖于所提供的数据参数(data argument)。
[0076] 如图5所示,在主存储器高速缓存512中或辅助存储装置514上,可以经由映射表504来访问页面502,映射表504将页面标识符(PID)506映射到状态508(例如,经由存储在映射表504中的“物理地址”510)。例如,主存储器高速缓存512可以包括随机存取存储器(RAM)。例如,辅助存储装置514可以包括闪存。例如,可以根据需要将页面502从辅助存储装置514读取到主存储器高速缓存512中,可以将它们冲刷到辅助存储装置514,并且可以将它们更新以在高速缓存512中的同时改变页面状态。例如,根据本文中讨论的示例技术,基本上所有页面状态改变(数据状态和管理状态二者)可以被提供为原子操作。如图5所示,示例物理地址510可以包括指示物理地址是否与闪存或存储器(例如,高速缓存)存储相关联的闪存/存储器标志516(例如,1比特,如示例中所示),其中地址字段518用于(至少)地址本身(例如,63比特,如示例中所示)。数据处理领域的技术人员应当理解,在不脱离本文中的讨论的精神的情况下,存在很多表示“物理地址”(例如,除了64比特表示)的方式。
[0077] 根据本文中所论述的示例技术,LLAMA通过其API可经由对映射表504的比较和交换(CAS)原子操作来提供无锁存页面更新(例如,由阻塞线程代替防止页面被并发访问的传统锁存器)。例如,CAS策略可以有利地增加处理器利用率并且改善多核缩放。
[0078] 根据本文中讨论的示例技术,在管理高速缓存时,LLAMA可以通过从存储器中仅丢弃页面的在先冲刷部分来收回主存储器,从而即使在换出“脏的”页面时也不使用任何I/O。因此,在不需要检查由其访问方法用户存储在页面中的数据(例如,作为示例架构,诸如LLAMA不知道事务和预先写入日志)的情况下,诸如LLAMA等示例架构可以控制其缓冲器高速缓存存储器大小。
[0079] 诸如LLAMA等示例架构可以使用日志结构来管理辅助存储装置(例如,提供以下优点:避免随机写入,减少经由大的多页面缓冲器的大量写入,以及闪存涉及的损耗均衡)。此外,诸如LLAMA等示例架构可以有利地提高的部分页面冲刷和基本上没有空白空间(即基本上100%利用率)的页面的性能(例如,与传统的日志结构相比)。例如,这些可以减少当页面被冲刷时每页面所消耗的I/O和存储装置的数量,并且因此可以减少当使用日志结构时可能遇到的写入放大。此外,基本上所有与存储相关的操作可以是完全无锁存的。
[0080] 另外,诸如LLAMA等示例架构可以支持(至少)有限形式的系统事务(参见例如关于系统交易的2009年Conference on Innovative Data Systems Research(CIDR)的D.Lomet等人的“Unbundling Transaction Services in the Cloud”)。例如,系统事务可以不是用户事务,而是可以纯粹地为访问方法的“私有使用”提供原子性(例如,用于索引结构修改(SMO)——参见1992年的pp.371-380的In Proceedings of the 1992 ACM SIGMOD International Conference on Management of Data(SIGMOD'92)的例如C.Mohan等人的“ARIES/IM:An Efficient and High Concurrency Index Management Method Using Write-Ahead Logging”)。例如,与事务日志分开记录的系统事务可能有效这一属性是DEUTERONOMY方法对分解数据库内核的有利理解的示例。
[0081] 在设计诸如LLAMA等示例系统时,设计目标可以包括尽可能作为“通用目的”的目标,这有时可能导致“尽可能低水平”的目标。然而,为了使得诸如LLAMA等示例系统变为“通用”,可能希望在尽可能少地了解访问方法在使用其设施方面做什么的同时有效地操作。因此,诸如LLAMA等示例系统的操作可以是“原语”,目标是高速缓存管理和页面的更新。例如,诸如LLAMA等示例系统可以包括一些附加的设施,以支持可以有利地包括用于SMO(例如,页面拆分和合并)的原始事务机制。
[0082] 根据本文中讨论的示例技术,诸如LLAMA等示例系统可以在关于日志序列号(LSN)、预先写入日志或用于事务日志的检查点的接口中不包括任何内容。根据本文中讨论的示例技术,诸如LLAMA等示例系统可以不包括用于用户操作的幂等性测试。此外,根据本文中讨论的示例技术,诸如LLAMA等示例系统可以不包括事务恢复(例如,根据本文中讨论的示例技术,该示例技术可以由使用诸如LLAMA等示例系统的访问方法来处理)。
[0083] 示例访问方法可以响应于用户操作来改变状态。例如,用户可能想要创建(C)、读取(R)、更新(U)或删除(D)记录(例如,CRUD操作)。根据本文中讨论的示例技术,诸如LLAMA等示例系统可以不直接支持这些操作。相反,示例访问方法可以将它们实现为对LLAMA页面的状态的更新。
[0084] 例如,还可以存在作为示例访问方法操作的部分的结构改变。例如,BW-TREE页面分割可以涉及将分割增量发布到原始页面O,使得搜索者知道新的页面现在包含O中的键的子范围的数据。例如,这些也可以被处理为对LLAMA页面O的更新。
[0085] 根据本文中讨论的示例技术,诸如LLAMA等示例系统可以支持两种形式的更新,例如增量更新和替换更新。例如,访问方法可以根据用户的意愿来选择利用这些形式的更新。例如,BW-TREE可以进行一系列增量更新,并且在某些时候通过将增量更新应用于基本页面来决定“整合”并优化页面。例如,BW-TREE继而可以使用替换更新来生成新的基本页面。
[0086] 根据本文中讨论的示例技术,诸如LLAMA等示例系统可以在如本文中讨论的更新操作和替换操作期间保持关于在辅助存储装置中的页面的物理位置的信息,使得系统100具有辅助存储装置页面位置信息用于在其被换出主存储器高速缓存和用于垃圾收集的情况下重新读取页面,如本文中进一步讨论的。因此,系统300可以记住在先的页面位置和稳定的页面状态信息。
[0087] 例如,增量更新可以被指示为Update-D(PID,in-ptr,out-ptr,data)。例如,增量更新可以前置描述对页面的在先状态的改变的增量。例如,对于BW-TREE,Update-D的“data”参数可以包括至少,其中lsn启用幂等性。例如,“in-ptr”指向页面的在先状态,并且“out-ptr”指向页面的新的状态。
[0088] 例如,替换更新可以被指示为Update-R(PID,in-ptr,out-ptr,data)。例如,替换更新可能导致页面的完全新的状态。使用Update-D时保留的在先状态可以用“data”参数替换。因此,“data”参数包含具有增量“折叠”的页面的整个状态。
[0089] 例如,“读取”可以被指示为Read(PID,out-ptr)。例如,读取可以经由“out-ptr”返回页面的主存储器中的地址。如果页面不在主存储器中,则映射表条目可以包含辅助存储地址。例如,在这种情况下,页面可以被读入主存储器中,并且映射表可以用新的主存储器地址来更新。
[0090] 除了支持数据操作之外,本文中讨论的示例系统(例如,LLAMA)可以提供用于管理页面的存在、位置和持久性的操作。为了调整存储的数据量,访问方法可以从其管理的集合中添加或减去页面。为了提供状态持久性,访问方法可以不时地将页面冲刷到辅助存储。为了管理该持久性,可以适当地注释页面(例如,使用对数序列号(lsns))。例如,页面管理器可以被配置为控制对页面的冲刷操作、分配操作和自由操作。
[0091] 例如,冲刷操作可以被指示为Flush(PID,in-ptr,out-ptr,annotation)。例如,Flush可以将页面状态复制到日志结构储存库(LSS)I/O缓冲器中。在对主存储器的影响中,冲刷可能在一定程度上类似于Update-D,这是因为其向在先状态中前置增量(带有注释)。该增量可以被标记为“冲刷”。根据本文中讨论的示例技术,诸如LLAMA等示例系统可以将页面所在的LSS辅助存储地址(称为闪存偏移量)和调用者“注释”存储在冲刷增量中。例如,Flush可能无法向用户确保I/O缓冲器在返回时是稳定的。
[0092] 例如,缓冲器管理器可以被配置为经由无锁存更新操作来控制对日志结构辅助存储缓冲器的更新。因此,例如,多个线程可以经由无锁存操作同时更新日志结构辅助存储缓冲器。
[0093] 例如,“使稳定”操作可以被指示为Mk_Stable(LSS address)。例如,Mk_Stable操作可以确保冲刷到LSS缓冲器的页面直到LSS地址参数在辅助存储装置上是稳定的。当Mk_Stable返回时,提供的LSS address和所有较低的LSS地址被确保在辅助存储装置上是稳定的。
[0094] 例如,“高稳定”操作可以被指示为Hi_Stable(out-LSS address)。例如,Hi_Stable操作可以返回在辅助存储装置上当前稳定的最高LSS address。
[0095] 例如,基于发起将第一页面的页面状态复制到辅助存储缓冲器中,发起将冲刷增量记录前置于页面状态,以及基于经由比较和交换(CAS)操作在映射表中安装冲刷增量记录的地址来发起对页面状态的更新,页面管理器可以被配置为发起高速缓存层存储装置中的第一页面到辅助存储装置中的位置的冲刷操作。
[0096] 例如,缓冲器管理器可以被配置为发起稳定性操作用于确定被冲刷到具有较低地址的辅助存储缓冲器,直到第一辅助存储地址自变量的页面在辅助存储器中是稳定的。
[0097] 例如,“分配”操作可以被指示为Allocate(out-PID)。例如,Allocate操作可以返回在映射表中分配的新页面的PID。所有这样的页面可以被永久地记住,因此分配Allocate可以被包括作为系统事务的部分(如下面进一步讨论的),其可以自动地冲刷其所包括的操作。
[0098] 例如,“free”操作可以被指示为Free(PID)。例如,Free操作可以使得由PID识别的映射表条目可用于重用。在主存储器中,PID可以被放置在用于当前历元(epoch)的PID的待决空闲列表上(如下面进一步讨论的)。再次,因为活动页面可能需要被记住,Free可以被包括作为系统事务的一部分。
[0099] 根据本文中讨论的示例技术,示例LLAMA系统事务可以用于为结构修改(例如,SMO)提供相对持久性和原子性(全部或一个也没有)。例如,LSS及其面向页面的记录可以用作“日志记录”。例如,除了改变高速缓存中的页面状态之外,事务内的所有操作还可以自动被冲刷到存储器中LSS I/O缓冲器。例如,对于严格为“页面”储存库的示例LSS,每个LSS条目可以包括页面的状态。
[0100] 如下面进一步讨论的,在主存储器中,事务内的所有这样的操作可以保持隔离,直到事务提交。例如,在提交时,事务中的所有页面改变可以被原子地冲刷到LSS缓冲器。例如,在中止时,所有改变可以被丢弃。例如,系统事务管理器可以被配置为提交事务和中止事务。
[0101] 例如,系统事务可以经由LLAMA支持的操作来发起和终止。
[0102] 例如,“事务开始”操作可以被指示为TBegin(out-TID)。例如,可以发起由事务ID(TID)识别的事务。这可以涉及将其输入由示例LLAMA高速缓存层(CL)管理器维护的活动事务表(ATT)。
[0103] 例如,“事务提交”操作可以被指示为TCommit(TID)。例如,可以从活动事务表中移除事务,并且可以提交事务。例如,事务中的页面状态改变可以被安装在映射表中,并且被冲刷到LSS缓冲器。
[0104] 例如,“事务中止”操作可以被指示为TAbort(TID)。例如,可以从活动事务表中移除事务,可以将改变的页面重置为高速缓存中的“事务开始”,并且不冲刷任何改变。
[0105] 根据本文中讨论的示例技术,除了Allocate和Free之外,可以在事务内允许Update-D操作以改变页面状态。例如,如下面进一步讨论的,可以不使用Update-R,这是因为它可能使事务撤销复杂化。
[0106] 根据本文中讨论的示例技术,事务操作可以都具有输入参数:TID和annotation。例如,TID可以被添加至高速缓存中的增量,并且可以将annotation添加至在事务中更新的每个页面(例如,好像它正在被冲刷)。当安装在冲刷缓冲器中并提交时,高速缓存中的所有更新的页面可以具有描述其位置的冲刷增量(例如,好像它们独立于事务被冲刷)。
[0107] BW-TREE(参见例如2013年4月8-11日的29th IEEE International Conference on Data Engineering(ICDE 2013)的J.Levandoski等人的“The Bw-Tree:A B-tree for New Hardware Platforms”)可以提供示例键值储存库,其可以使得能够支持用户事务(例如,对于事务部件202)。例如,它可以管理LSN,实施预先写入日志(WAL)协议,并且如DEUTERONOMY数据部件(DC)所期望地响应于检查点请求(参见例如2011年1月的Conference on Innovative Data Systems Research(CIDR)的pp.123-133的J.Levandoski等人的“Deuteronomy:Transaction Support for Cloud Data”以及2009年的Conference on Innovative Data Systems Research(CIDR)的D.Lomet等人的“Unbundling Transaction Services in the Cloud”)。本文中的讨论包括解决在使用诸如LLAMA等示例系统时其如何实现。
[0108] 到Update-D和Update-R LLAMA操作的“数据”内容可以包括键、LSN和键值储存库的“数据部分”。例如,BW-TREE因此可以经由这些操作实现键值储存库,经由LSN提供幂等性,经由Update-D执行递增更新,经由Update-R执行其页面整合,以及访问页面用于使用LLAMA Read或Flush操作来读取或写入。例如,系统可以包括记录管理器,该记录管理器可以被配置为基于更新增量记录操作和替换更新操作来控制更新。
[0109] 例如,访问方法可以将LSN存储在其经由更新操作提供给LLAMA的数据中。此外,存储在冲刷增量中的Flush操作annotation参数可以提供用于描述页面内容的附加信息。例如,这些可以允许BW-TREE实施预先写入日志(WAL)。例如,在冲刷页面之后的稳定操作(例如,Mk-Stable)可以使得更新对于事务日志检查点设置是稳定的。
[0110] 例如,Allocate和Free操作可以允许示例BW-TREE实现增长和收缩其树。例如,BeginTrans(例如,TBegin)和提交/中止(例如,TCommit/TAbort)可以实现在执行结构修改操作(SMO)时所期望的原子性。
[0111] 例如,更新操作(例如,Update-D/Update-R)可以不限于“用户级”数据。例如,如下面进一步讨论的,关于系统事务,当实现SMO时,BW-TREE可以使用Update-D来发布其“合并”和“拆分”增量。
[0112] 根据本文中讨论的示例技术,关于高速缓存层数据操作,页面更新可以通过使用比较和交换操作(CAS)在映射表504中安装新的页面状态指针602来完成,而无论其是增量更新(如图6A所示)还是替换更新。例如,替换更新(例如,Update-R(PID,in-ptr,out-ptr,data))可以包括期望的新状态和页面在LSS中的在先状态的位置。例如,新的更新增量604(例如,Update-D(PID,in-ptr,out-ptr,data))指向已经包括该LSS位置的页面502的在先状态606。
[0113] 例如,这样的无锁存方法可以避免由锁存引入的延迟,但是它可能招致其自身的惩罚,如“乐观的”并发控制方法,即CAS可能失败,并且随后将重试更新。例如,可以由示例LLAMA用户来适当地重试其操作,作为示例,LLAMA实现可以指示何时发生故障。
[0114] 根据本文中讨论的示例技术,虽然没有操作可以阻止数据在高速缓存(例如,512)中,但是从辅助存储装置读取页面可以涉及等待页面出现在高速缓存中。映射表(例如,映射表504)将指向LSS页面,甚至对于高速缓存的页面,如上文所述,使得能够在高速缓存与LSS之间移动页面,以实现有效的高速缓存管理。
[0115] 根据本文中讨论的示例技术,当页面被冲刷时,示例LLAMA实现可以确保高速缓存(例如,512)中呈现的内容与LSS(例如,514)中的内容匹配。因此,冲刷增量可以包括冲刷增量中的PID和LSS偏移二者,并且可以通过将其前置于页面502来将该增量包括在LSS缓冲器和高速缓存(例如,512)中。
[0116] 根据本文中讨论的示例技术,因为示例LLAMA实现可以支持增量更新,所以页面状态可以包括非连续片段。将该特征与冲刷活动组合可以导致高速缓存中页面使其部分状态在LSS中(已经被更早地冲刷),而最近的更新可以仅存在于高速缓存中。当这发生时,可以降低下一次冲刷的存储成本。
[0117] 因此,示例LLAMA实现可以通过写入仅包括自在先冲刷以来的改变的增量来冲刷这样的页面。例如,使用指向页面的剩余部分的指针LSS,通过写入连续形式的增量(其在本文中可以被称为“C-delta”),可以使得高速缓存中的多个更新增量全部连续用于冲刷。因此,整个页面可以在LSS中可访问,但可能是几个部分。
[0118] 根据本文中讨论的示例技术,Flush操作可以观察高速缓存的页面状态,其可以具有已经以这种方式随着时间被冲刷的几个部分,从而导致其中呈现有单独的段以及它们的LSS地址的高速缓存的页面。根据本文中讨论的示例技术,在任何时间,Flush可以通过连续地(并且冗余地)写入不连续页面片段的内容,将这些片段一起带到LSS存储器中。例如,当LSS使用闪存存储装置时,用户可能愿意将这些片断分开,而当LSS使用盘存储装置时,由于不同的读取访问和存储成本,用户可能希望这些片段邻接。
[0119] 根据本文中讨论的示例技术,当页面被冲刷时,可能希望系统在冲刷之前知道页面的什么状态正在被冲刷。例如,这可以使用锁存器容易地确定,因为系统可以简单地锁存页面,并且执行冲刷。然而,在无锁存方法中,系统可能在正确地排序页面冲刷方面具有相当大的困难。例如,这可能在预先写入日志协议的实施中或者当冲刷作为结构修改的部分发生时造成问题。例如,当它们执行其CAS时,不合适的冲刷可能会失败。因此,根据本文中讨论的示例技术,可以使用指向要在CAS中冲刷的页面状态的指针,该指针继而可以仅捕获该特定状态,并且如果状态在冲刷完成之前已经被更新,则可能失败。但是,这可能会引起其他问题。
[0120] 在研究中,在确定当执行高速缓存管理和将页面冲刷到LSS时可能有利的强不变量的种类时遇到了困难。例如,不变量可以包括诸如以下的属性:
[0121] 被成功冲刷到LSS的页面在高速缓存中被立即看到已被冲刷,并且页面的冲刷状态将在所有稍后状态的冲刷之前在LSS I/O缓冲器中。冲刷失败的页面不会显示为在高速缓存中冲刷,并且容易看出在查看LSS时冲刷未成功。
[0122] 例如,两种替代方法可以包括:
[0123] a.冲刷的成功可以通过首先执行CAS来确保。一旦CAS成功,该页面可以被发布到LSS。例如,如果这样做,竞争条件可能破坏可信的LSS恢复。例如,随后可以冲刷取决于较早冲刷的页面,其中该“稍后”冲刷在系统崩溃之前成功写入LSS,而“较早”冲刷太慢而不能完成并且不出现在稳定的LSS中。这种情况可能折衷于一种形式的因果关系。
[0124] b.期望被冲刷的页面的页面状态可以被捕获,并且将其写入LSS缓冲器。然后,可以尝试CAS,并且CAS可能失败。因此,如果系统崩溃,则向LSS写入没有用于区分冲刷是成功还是失败的指示的页面。例如,可以存在在多个时间写入LSS的多个这样的页面。例如,可以写入在LSS中比失败的CAS更早出现的页面的稍后状态。如上文所述,它开始较晚,但在较早冲刷之前获得其缓冲槽。
[0125] 例如,如下所述,可以解决以上讨论的困境。例如,如果足够早地执行CAS,则可以在将页面的状态复制到日志缓冲器之前确定冲刷是否将成功。因此,可以如下执行示例冲刷过程:
[0126] 步骤1:标识意图要冲刷的页面的状态。
[0127] 步骤2:占用LSS缓冲器中要写入状态的空间。
[0128] 步骤3:执行CAS以确定冲刷是否成功。将获得冲刷增量中的LSS偏移量以便进行这一操作(如上面步骤2中所提供的)。
[0129] 步骤4:如果步骤3成功,写入要保存到LSS中的状态。当这被写入LSS时,本文中讨论的示例LLAMA技术可以防止缓冲器被写入到LSS辅助存储装置。
[0130] 步骤5:如果步骤3失败,则将指示“失败冲刷”的指示写入缓冲器中的保留空间中。这可能消耗存储装置,但是解决了关于哪些冲刷成功或者哪些冲刷失败的模糊性。
[0131] 该示例过程的结果是,在恢复期间,LSS可能不会观察到作为已经失败的CAS的结果的页面。例如,这还保留了以下属性:在LSS中出现的任何页面(在“日志”中的位置方面)将是页面的稍后状态而不是LSS日志中的页面的所有在先实例。
[0132] 根据本文中讨论的示例技术,可能期望示例LLAMA实现来管理高速缓存和换出数据以便满足其存储器约束。例如,示例LLAMA实现可以知道增量更新、替换更新和冲刷,并且可以识别这些中的每个。然而,示例LLAMA实现将不知道页面的内容,如果它的目的是通用。因此,示例LLAMA实现不知道访问方法层是否通过在页面中维护LSN来支持事务。因此,可能提出的问题包括关于示例LLAMA实现在其可能没有看到LSN并且实施预先写入日志协议时如何提供高速缓存空间管理(包括逐出页面)的潜在问题。
[0133] 例如,已经被冲刷的任何数据可以从高速缓存中被丢弃。例如,其中页面被适当地更新的系统可以被防止换出(从缓存中丢弃)任何最近更新的和“脏的”页面。然而,由于增量更新,示例LLAMA实现可以确定页面的哪些部分已经被冲刷。例如,每个这样的部分可以用冲刷数据来描述,并且这些冲刷的部分可以从高速缓存“换出”。
[0134] 在“换出”的页面部分中,简单地解除分配存储装置并重新使用它可能是不利的,这是因为这可能留下对被换出的部分的虚(dangling)引用。因此,根据本文中讨论的示例技术,可以使用描述页面的什么部分已被换出的增量。
[0135] 例如,对于完全换出的页面,其在映射表504中的主存储器地址可以被来自页面的最近冲刷增量的LSS指针替换。
[0136] 图7描绘了示例部分页面换出和示例部分交换增量。例如,对于部分换出的页面,可以使用CAS来插入“部分交换”增量记录702。例如,该增量记录702可以指示页面已被部分换出(例如,因此高速缓存中的页面内容不能用于满足通常的页面READ操作),并且可以指向平滑增量记录704,该平滑增量记录704指示用于定位页面706的缺失部分的LSS中的位置信息。例如,一旦“部分交换”增量702已经安装了CAS,则可以使用示例历元机制来释放用于正被删除的页面的部分的存储器。
[0137] 例如,页面管理器可以被配置为基于发起将部分交换增量记录前置于与第一页面相关联的页面状态来发起高速缓存层存储装置中的第一页面的一部分到辅助存储装置中的位置的交换操作,部分交换增量记录包括指示冲刷增量记录的存储位置的辅助存储地址,冲刷增量记录指示所述第一页面的丢失部分在辅助存储装置中的位置。
[0138] 例如,页面管理器还可以被配置为使用历元机制来发起用于与第一页面的该部分相关联的高速缓存层存储的空闲操作。
[0139] 根据本文中讨论的示例技术,该方法可以有利地为用户提供几个有用的特征。例如,这样的示例LLAMA实现的高速缓存层304可以在没有关于页面的实际内容的知识的情况下收回存储器(例如,512)。例如,删除页面的冲刷页面和冲刷部分可能不涉及任何I/O操作。例如,将部分冲刷的页面带回到主存储器中可能涉及比LSS中具有多个部分的完全冲刷的页面的情况下更少的LSS读取。
[0140] 如本文中讨论的,“逻辑页面”可以包括基本页面以及指示对页面的更新的零个或多个增量记录,从而使得页面能够在被冲刷时以碎片被写入闪存。因此,闪存上的逻辑页面可以对应于潜在地在使用文件偏移量作为指针被链接在一起的不同物理设备块上的记录。此外,物理块可以包括来自多个逻辑页面的记录。图8A示出了闪存514上的示例日志结构存储组织800A。
[0141] 例如,可以通过从闪存上的链的头(其顺序日志802中的偏移可以从映射表504获得)开始,并且跟随链接的记录来从闪存514中读取逻辑页面到存储器(例如,RAM 512)中。例如,可以从映射表504获得偏移量804,用于访问增量记录806以获得当前状态,以及访问基本页面808,用于从闪存514向存储器512中读取相应的“逻辑页面”。
[0142] 例如,可以从映射表504获得偏移810,用于访问增量记录812,获得增量和链接,以访问第二增量记录814,并且随后访问基本页面816,用于从闪存514向存储器512中读取对应的“逻辑页面”。
[0143] 例如,当它们被一起冲刷时,冲刷过程可以有利地将相同逻辑页面的多个增量记录整合成闪存上的连续的C-delta。此外,当逻辑页面在存储器中被整合之后被冲刷时,可以在闪存上整合逻辑页面,这可以有利地提高页面读取性能。
[0144] 图8B描绘了示例映射表504,其基于使用页面842的新状态844的物理地址(例如,由于页面842与在先前置的增量记录的整合产生)替换第一存储对象846的物理地址(例如,在图8B中,其包括具有多个在先前置的增量记录的基本页面842),指示使用页面842的新状态844代替页面842的在先状态840。
[0145] 例如,如图8C所示,将页面842的在先状态840替换为页面842的新状态844可以包括将多个增量记录整合成连续的C-delta850,其然后可以与基本页面842一起冲刷。
[0146] 例如,用页面842的新状态844替换页面842的在先状态840可以包括生成当前页面842的修改版本,或者确定用于替换当前页面842的另一页面,并且通过映射表504上的原子比较和交换操作,将当前页面842的物理地址替换为页面842的新状态844的物理地址(例如,修改版本或用于替换的其他页面)。
[0147] 例如,作为图8B与图8C的特征之间的区别,当将页面写入辅助存储装置时,LLAMA可以执行图8C所示的整合,但它取决于执行Update-R的访问方法以执行图8B的整合。
[0148] 根据本文中所论述的示例技术,示例LLAMA实现可以完全无锁存。此外,专用线程可能不用于冲刷I/O缓冲器,因为这可能使保持线程工作负载平衡变得复杂。因此,所有线程可以参与管理该缓冲器。例如,传统的方法已经使用锁存器。然而,这样的传统的技术可能仅在缓冲器中分配空间时锁存,以在数据传输之前释放锁存器,因此可以并行地进行。
[0149] 根据本文中讨论的示例技术,示例LLAMA实现可以避免用于缓冲器空间分配的传统的锁存器,而是使用用于原子性的CAS,如在本文中讨论的示例系统中的别处所做的那样。例如,这涉及定义CAS执行的状态。例如,缓冲器状态的常数部分可以包括其地址(Base)和大小(Bsize)。例如,可以使用相对于Base的Offset来跟踪在缓冲器中使用的存储器的当前高水位标记。例如,使用缓冲器的每个请求可以开始于为页面冲刷保留空间大小。
[0150] 根据本文中讨论的示例技术,为了在缓冲器中保留空间,线程可以获取当前Offset并且计算Offset+Size。例如,如果Offset+Size≤Bsize,则该请求可以存储在缓冲器中。例如,线程可以发布具有当前偏移量的CAS作为比较值、以及具有Offset+Size的CAS作为新的值。如果CAS成功,则Offset可以被设置为新的值,空间可以被保留,并且缓冲器写入器可以将数据传送给缓冲器。
[0151] 根据本文中讨论的示例技术,即使当整个页面不在高速缓存中时,也可以进行更新。然而,有时候更新需要已读取的页面的版本在读取和后续更新之间保持不变。例如,用户可能希望确定页面状态自从它之前被“看过”(即,被观察)以来是否已经改变。
[0152] 例如,在“非盲”更新中,映射表指针的值(其识别在先读取的页面状态)可以伴随更新,以证明状态自从读取以来没有改变。由于对页面的READ操作涉及在高速缓存中的页面的存在,这可以确保将对高速缓存中的整个页面进行更新。
[0153] 盲更新还可以涉及页面状态,以确保可能的冲突操作没有被干预。对于这些操作,可以使用操作P-READ(部分页面读取),其读取当前在用于状态的页面高速缓存中的任何内容,而没有在不存在整个页面的情况下触发整个页面的读取。然后,返回的地址可以像以前一样用在更新中,而不需要整个页面都在高速缓存中。如果映射表仅存储闪存偏移,则P-READ可以将在闪存中引用的页面的第一部分读入高速缓存中,而不需要引入整个页面。
[0154] 因此,具有这样的PREAD操作的访问方法可以满足LLAMA支持来自访问方法的盲更新。
[0155] 例如,可以通过使用具有特定注释的冲刷增量、以及其对高速缓存中的页面状态的剩余部分以及页面在稳定存储装置中的位置的闪存偏移(稳定存储位置)的引用来提供“页面存根”。例如,当高速缓存管理器经由“部分交换”换出页面直到最后的冲刷增量时,可以“创建”存根。然而,根据本文中讨论的示例技术,可以将冲刷增量保留在适当的位置,而不是用闪存偏移替换映射表地址。剩余的冲刷增量可以保留该闪存偏移加上LLAMA的用户的注释(例如BW-TREE)。访问方法可以用PREAD读取页面存根(或页面的更多部分,如果存在于高速缓存中)以确定它可以对页面做什么。
[0156] 如上所述,BW-TREE可以用作被建立以在LLAMA之上作为其面向页面的高速缓存管理器执行的索引记录管理器。在这一层,记录管理器至少支持典型的CRUD(创建、读取、更新、删除)操作。CRUD操作可以涉及对记录储存库的在先状态的了解,这可以涉及在LLAMA处的高速缓存操作,其可以涉及读取整个页面以获取该知识。
[0157] 为了支持“盲”格式记录操作,可以利用附加操作。例如,如果新的记录版本存在,则UPSERT操作使用新的记录版本来替换现有记录,或者如果新的记录版本尚不存在,则创建(插入)记录。因此,它将CRUD的C与U(创建和更新)组合。在上面讨论的LLAMA示例中,UPSERT可以执行P-READ而不是普通读取,然后继续其更新(例如,使用UPDATE-D)。
[0158] 例如,除了在删除之前检查版本是否存在的“正常”删除之外,还可以使用示例BLIND-D操作或盲删除(CRUD中的D),因此涉及页面READ。该操作可以仅涉及执行P-READ。这样的BLIND-D操作可以具有各种不同的定义。例如,当页面最终被读取和合理化时,它可以删除在先的版本,并且如果没有在先的版本,则它可以是空操作。
[0159] 作为另一示例,其可以作为删除请求而仅作为针对记录添加的后续版本而“放弃”。
[0160] 在任一情况下,BLIND-D的效果可能没有完全实现,直到页面经由READ完全在存储器中。
[0161] 例如,应用可以支持UPSERT形式的记录的盲递增更新。递增记录改变(与上面讨论的记录更新的完全替换更新模型相反)可以涉及面向记录的访问方法(诸如BW-TREE)通常不知道的“记录内”语义。
[0162] 产生改变但不替换记录的递增记录更新(UPDATE-I)可以使用与盲写入相同的LLAMA操作,即PREAD而不是READ。因此,它们可以类似于UPSERT来处理。然而,BW-TREE本身不能理解如何将这些更新整合到记录版本。下面讨论用于处理这种“整合”的两种示例技术,
[0163] 作为第一示例,使用BW-TREE的应用可以发出记录读取(READ)(CRUD中的R)。例如,BW-TREE可以经由其已经接收到的片段的连接来将更新的记录的片段收集在一起。在此读取之后,应用将整合记录呈现为“正常”更新,其用已经由应用整合的记录替换在先的拼接在一起的记录。可以不涉及额外的功能(除了UPDATE-I)。
[0164] 作为第二示例,应用可以向BW-TREE提供如何将整合片段格式的记录整合成应用理解整合格式的过程的理解。存在可以在关于由BW-TREE支持的“表”保留的信息中提供一次该过程或通过提供BW-TREE可以调用以执行该功能的回调点提供该过程的各种方式,例如在作为READ的一部分传送记录之前,或者在由BW-TREE在它将增量更新合并到整合页面中时完成的页面整合过程期间。
[0165] 根据本文中讨论的示例技术,可以支持这两种变体。
[0166] 下面讨论的是用于通过上述示例技术将作为UPDATE-1的结果的记录段替换为已经被整合的版本的示例技术。
[0167] 因此,可能期望将整合的记录存储在BW-TREE中,以替换之前提供的UPDATE-I递增。
[0168] 例如,当CONSOLIDATE-I操作已经由在先的UPDATE-I操作单独更新时,它可以在记录上工作。这样的CONSOLIDATE-I操作可以识别要替换的在先UPDATE-I,然后将该整合版本发布到BW-TREE中。可以假设每个UPDATE-I具有用于幂等性的LSN。当整合发生时,已知哪个UPDATE-I进入所产生的整合版本。因此,当在页面的更新增量中使用时,整合的记录可以保留这些LSN。这使得未来的操作(未来的整合和未来的BW-TREE操作)能够提供幂等性。
[0169] BW-TREE知道如何整合页面,并且可以使用UPDATE-R LLAMA操作来用新的形式替换页面的当前形式。在此过程中,BW-TREE可以从页面中删除在CONSOLIDATE-I操作中捕获的所有UPDATE-I,以将它们替换为整合的记录。未使用整合的记录捕获的任何UPDATE-I操作可能仍保留为记录的未整合的条目(例如,稍后要整合)。BW-TREE不需要了解整合的细节来完成这一点。BW-TREE只需要知道在整合的记录中捕获的LSN信息。
[0170] 数据处理领域的技术人员应当理解,在不脱离本文中讨论的精神的情况下,可以使用很多其它类型的技术用于盲增量更新的索引插入。
[0171] II.示例操作环境
[0172] 本文中讨论的特征作为可以以数据处理领域的技术人员可以理解的很多不同方式实现的示例实施例来提供,而不脱离本文中讨论的精神。这样的特征仅被解释为示例实施例特征,而不旨在被解释为仅限于这些详细描述。
[0173] 如本文中进一步讨论的,图9是使用盲更新操作(包括递增和完全记录替换)进行数据修改的通用系统900的框图。所示的通用系统900仅旨在示出可以被包括在如本文中讨论的示例技术中的各种示例功能和/或逻辑,而不旨在各种硬件和/或软件配置的实现方面进行限制。数据处理领域的技术人员将理解,系统900可以在硬件实现、软件实现或其组合中实现。如图9所示,系统900可以包括具有至少一个处理器904的设备902。设备902可以包括页面更新管理器906,页面更新管理器906可以包括更新获取模块908,更新获取模块908获取规定于键值储存库相关联的逻辑页面的更新的多个更新请求910。
[0174] 例如,页面数据存储装置912可以包括任何类型的页面数据存储装置,包括(至少)诸如主存储器等易失性存储装置和诸如“辅助存储装置”等更稳定的存储装置(例如,更非易失性存储装置),其可以包括闪存存储装置以及其他类型的盘驱动器等。数据处理领域的技术人员将理解,存在可以与本文中讨论的技术一起使用的很多类型的页面数据存储装置,而不脱离本文中讨论的精神。
[0175] 根据示例实施例,页面更新管理器906或其一个或多个部分可以包括可以存储在有形计算机可读存储介质上的可执行指令,如下所述。根据示例实施例,计算机可读存储介质可以包括任何数量的存储设备和任何数量的存储介质类型,包括分布式设备。
[0176] 在本上下文中,“处理器”可以包括被配置为处理与计算系统相关联的指令的单个处理器或多个处理器。因此,处理器可以包括并行地和/或以分布式方式执行指令的一个或多个处理器。虽然设备处理器904在图9中被描绘为在页面更新管理器906外部,但是数据处理领域的技术人员将认识到,设备处理器904可以被实现为单个部件和/或作为分布式单元,其可以位于页面更新管理器906、和/其元件的内部或外部。
[0177] 例如,系统900可以包括一个或多个处理器904。例如,系统900可以包括存储由一个或多个处理器904可执行的指令的至少一个有形计算机可读存储介质,可执行指令被配置为引起至少一个数据处理装置执行与被包括在系统900中的各种示例部件相关联的操作,如本文中讨论的。例如,一个或多个处理器904可以被包括在至少一个数据处理装置中。数据处理领域的技术人员将理解,在不脱离这种讨论的精神的情况下,可以根据本文中的讨论来配置处理器和数据处理设备的很多配置。
[0178] 在本上下文中,“部件”或“模块”可以指代可以被配置为执行某些操作的指令或硬件。这样的指令可以被包括在指令的部件组内,或者可以分布在多于一个组上。例如,与第一部件的操作相关联的一些指令可以被包括在与第二部件(或多个部件)的操作相关联的指令组中。例如,本文中的“部件”可以指代可以由可以位于单个实体中的指令实现的功能类型,或者可以扩展或分布在多个实体上,并且可以与和其他部件相关联的指令和/或硬件交叠。
[0179] 根据示例实施例,页面更新管理器906可以与一个或多个用户设备相关联地实现。例如,页面更新管理器906可以与服务器通信,如下面进一步讨论的。
[0180] 例如,可以经由数据库接口部件922访问一个或多个数据库。数据处理领域的技术人员将理解,存在很多用于存储本文中讨论的信息的技术,诸如各种类型的数据库配置(例如,关系数据库、分层数据库、分布式数据库)和非数据库配置。
[0181] 根据示例实施例,页面更新管理器906可以包括可以存储诸如中间结果等对象的存储器924。在本上下文中,“存储器”可以包括被配置为存储数据和/或指令的单个存储器设备或多个存储器设备。此外,存储器924可以跨越多个分布式存储设备。此外,存储器924可以分布在多个处理器之间。
[0182] 根据示例实施例,用户界面部件926可以管理用户928与页面更新管理器906之间的通信。用户928可以与接收设备930相关联,该接收设备930可以与显示器932和其他输入/输出设备相关联。例如,显示器932可以被配置为经由内部设备总线通信或经由至少一个网络连接与接收设备930通信。
[0183] 根据示例实施例,显示器932可以被实现为平面屏幕显示器、打印形式的显示器、二维显示器、三维显示器、静态显示器、移动显示器、传感显示器、诸如触觉输出、音频输出以及用于与用户(例如,用户928)通信的任何其他形式的输出。
[0184] 根据示例实施例,页面更新管理器906可以包括网络通信部件934,网络通信部件934可以管理页面更新管理器906与可以经由至少一个网络936与页面更新管理器906通信的其他实体之间的网络通信。例如,网络936可以包括以下中的至少一项:因特网、至少一个无线网络或至少一个有线网络。例如,网络936可以包括蜂窝网络、无线电网络或可以支持用于页面更新管理器906的数据传输的任何类型的网络。例如,网络通信部件934可以管理页面更新管理器906与接收设备930之间的网络通信。例如,网络通信部件934可以管理用户接口部件926与接收设备930之间的网络通信。
[0185] 例如,高速缓存层管理器938可以包括映射表管理器940,映射表管理器940可以被配置为在间接地址映射表942上发起表操作,表操作包括发起对间接地址映射表942中的条目的原子比较和交换(CAS)操作,以使用页面的新状态替换与页面数据存储装置912相关联的页面的在先状态。
[0186] 例如,使用这样的原子操作可以提供完全的多线程能力——即,任何线程可以访问任何数据,因此,有利地提供处理中的速度能力。
[0187] 例如,映射表管理器940可以被配置为在与数据不透明接口943相关联的间接地址映射表942上发起表操作,其中间接地址映射表942共同用于包括高速缓存层存储装置944和辅助存储装置946的数据存储装置的管理。
[0188] 例如,间接地址映射表942将页面的逻辑位置与页面的对应物理位置分离,其中页面数据存储装置的用户在引用页面数据存储装置的数据结构中的别处存储页面标识符值,而不是页面的物理位置地址值。
[0189] 例如,更新管理器948可以被配置为使用对间接地址映射表942中的条目的无锁比较和交换操作来控制数据更新和管理更新,以在间接地址映射表942上实现原子状态改变。
[0190] 例如,存储层949可以包括日志结构存储层管理器950,日志结构存储层管理器950可以被配置为使用对间接地址映射表942中的条目的无锁比较和交换操作来控制与由页面冲刷产生的日志结构相关联的页面位置改变。
[0191] 例如,缓冲器管理器951可以被配置为经由无锁存更新操作来控制对日志结构辅助存储缓冲器的更新。因此,例如,多个线程可以经由无锁操作同时更新日志结构辅助存储缓冲器。
[0192] 例如,缓冲器管理器951可以被配置为发起稳定性操作,用于确定被冲刷到具有较低地址直到第一辅助存储地址自变量的日志结构辅助存储缓冲器的页面在日志结构辅助存储装置中是稳定的。
[0193] 例如,页面管理器952可以被配置为控制页面上的冲刷操作、分配操作和自由操作。例如,基于发起将第一页面的页面状态复制到辅助存储缓冲器中,以及发起将冲刷增量记录前置于页面状态,页面管理器952可以被配置为发起高速缓存层存储器中的第一页面到辅助存储装置中的位置的冲刷操作,冲刷增量记录包括在指示第一页面在辅助存储装置中的存储位置的辅助存储地址和与呼叫者相关联的注释之前,以及基于所述页面状态来启动对所述页面状态的更新,通过比较和交换(CAS)操作将冲刷增量记录的地址安装在映射表中。
[0194] 例如,基于发起将部分交换增量记录前置于与第一页面相关联的页面状态,页面管理器952可以被配置为发起高速缓存层存储装置中的第一页面的部分到辅助存储装置中的位置的交换操作,部分交换增量记录包括指示冲刷增量记录的存储位置的主存储器地址,冲刷增量记录指示第一页面的丢失部分在辅助存储装置中的位置。
[0195] 例如,系统事务管理器954可以被配置为提交事务和中止事务。
[0196] 例如,记录管理器956可以被配置为基于更新增量记录操作和替换更新操作来控制更新。
[0197] 例如,页面管理器952可以被配置为基于经由比较和交换(CAS)操作在映射表中安装指向冲刷增量记录的指针来冲刷辅助存储装置的页面状态,冲刷增量记录被前置于经由CAS操作在映射表中被替换的现有页面状态。
[0198] 例如,页面管理器952可以被配置为:确定CAS操作是否成功,并且如果确定CAS操作成功,则发起写入操作以将现有页面状态写入辅助存储冲刷缓冲器。
[0199] 例如,则页面管理器952可以被配置为在确定CAS操作失败的情况下,发起对在先分配给现有页面的存储空间的空操作。
[0200] 在不经由读取操作访问逻辑页面的情况下,更新发布引擎960可以使用所获得的更新请求来发布更新。
[0201] 例如,页面存根管理器962可以经由表示页面存根的页面存根增量记录来发起将页面存根前置于逻辑页面的当前状态,页面存根包括逻辑页面的当前状态的地址的指示和规定逻辑页面的属性的元数据,通过经由原子操作将表示页面存根的页面存根增量记录的地址安装在映射表中来将页面存根前置于当前状态。例如,页面存根可以包括与逻辑页面相关联的键边界的值。
[0202] 例如,更新获取模块908可以获取规定对逻辑页面的记录更新的多个更新请求910。
[0203] 例如,更新发布引擎960可以在不经由读取操作访问逻辑页面的情况下,使用所获得的多个更新请求910来发布所获得的记录更新。
[0204] 例如,更新发布引擎960可以通过将多个相应的增量记录前置于页面存根来发布所获得的记录更新。相应的增量记录可以包括记录更新信息,记录更新信息规定在相应的多个更新请求中规定的对逻辑页面的相应更新。
[0205] 例如,整合引擎963可以使用被前置于页面存根的多个相应增量记录,经由预定义的整合功能来整合所获得的记录更新。
[0206] 例如,更新获取模块908可以获得规定对逻辑页面中的记录的递增更新的多个更新请求910。
[0207] 例如,更新发布引擎960可以在不经由读取操作访问逻辑页面的情况下,使用所获得的更新请求910递增地发布所获得的规定的递增更新。
[0208] 例如,更新发布引擎960可以通过递增地将多个相应增量记录前置于页面存根来递增地发布所获得的规定的增量更新,其中多个相应增量记录包括规定对记录的相应更新的键更新信息。
[0209] 例如,数据检索引擎964可以发起对键值储存库中的键的查找,以经由从存储装置到存储器的读取操作获得在逻辑页面的当前状态中的逻辑页面的至少部分的表示。
[0210] 例如,合并引擎966可以使用前置于页面存根的多个相应的增量记录,经由预定义的合并功能来合并所获得的规定的递增更新。例如,预定义的合并功能包括用户定义的合并功能。
[0211] 例如,增量冲刷引擎968可以将逻辑页面的内容与前置于页面存根的多个相应增量记录递增地冲刷到使用单个写入操作前置于存储装置的冲刷缓冲器存储区。
[0212] 例如,键值储存库包括表示与相应文档相关联的项的键、以及表示相应文档标识符的相应值。
[0213] 例如,逻辑页面被存储在辅助存储装置上。
[0214] 数据处理领域的技术人员将理解,在不脱离本文中的讨论的精神的情况下,可以使用很多不同的技术用于使用盲更新的数据修改。
[0215] III.流程图说明
[0216] 本文中讨论的特征作为示例实施例提供,其可以以数据处理领域的技术人员可以理解的很多不同方式实现,而不脱离本文中讨论的精神。这样的特征仅被解释为示例实施例特征,而不旨在被解释为仅限于这些详细描述。
[0217] 图10A至图10C是示出图9的系统的示例操作的流程图。在图10A的示例中,可以获取规定对与键值储存库相关联的逻辑页面的更新的多个更新请求(1002)。
[0218] 在不经由读取操作访问逻辑页面的情况下,可以使用所获得的多个更新请求来发布更新(1004)。
[0219] 例如,页面存根到逻辑页面的当前状态的前置可以经由表示页面存根的页面存根增量记录来发起,页面存根包括逻辑页面的当前状态的地址的指示和规定逻辑页面的属性的元数据,经由原子操作,通过将表示页面存根的页面存根增量记录的地址安装在映射表中来将页面存根前置于当前状态(1006)。
[0220] 例如,键值储存库可以包括表示与相应文档相关联的项的键、以及表示相应文档标识符的相应值(1008)。
[0221] 例如,逻辑页面可以被存储在辅助存储装置上(1010)。
[0222] 例如,在图10B的示例中,可以获取规定对逻辑页面的记录更新的多个更新请求(1012)。
[0223] 例如,在不经由读取操作访问逻辑页面的情况下,可以使用所获得的多个更新请求来发布所获得的记录更新(1014)。
[0224] 例如,所获得的记录更新可以通过将多个相应的增量记录前置于页面存根来发布,其中多个相应增量记录包括记录更新信息,记录更新信息规定对在相应多个更新请求中规定的逻辑页面的相应更新(1016)。
[0225] 例如,所获得的记录更新可以使用前置于页面存根的多个相应增量记录,经由预定义的整合功能来整合(1018)。
[0226] 例如,在图10C的示例中,可以获取规定对逻辑页面中的记录的递增更新的多个更新请求(1020)。
[0227] 例如,在不经由读取操作访问逻辑页面的情况下,可以使用所获得的多个更新请求递增地发布所获得的规定的递增更新(1022)。
[0228] 例如,所获得的所规定的递增更新可以通过递增地将多个相应增量记录前置于页面存根来递增地发布,其中多个相应增量记录包括规定对记录的相应更新的键更新信息(1024)。
[0229] 例如,可以发起对键值储存库中的键的查找,以经由从存储装置到存储器的读取操作来在逻辑页面的当前状态中获得逻辑页面的至少部分的表示(1026)。
[0230] 例如,所获得的规定的递增更新可以使用前置于页面存根的多个相应增量记录,经由预定义的合并功能来合并(1028)。
[0231] 例如,预定义的合并功能可以包括用户定义的合并功能(1030)。
[0232] 例如,可以将逻辑页面的内容与前置于页面存根的多个相应增量记录递增地冲刷到使用单个写入操作前置于存储装置的冲刷缓冲器存储区(1032)。
[0233] 图11A至图11B是示出了根据示例实施例的图9的系统的示例操作的流程图。在图11A的示例中,可以获取规定对与逻辑页面相关联的键值储存库中的键的递增更新的多个更新请求(1102)。
[0234] 在不经由读取操作访问逻辑页面的情况下,可以使用所获得的多个更新请求递增地更新键(1104)。
[0235] 例如,页面存根到逻辑页面的当前状态的前置可以经由表示页面存根的页面存根增量记录来发起,页面存根包括逻辑页面的当前状态的地址的指示,经由原子操作,通过将表示页面存根的更新增量记录的地址安装在映射表中来发起将页面存根前置于当前状态(1106)。
[0236] 例如,递增地更新键可以包括通过在不通过读取操作访问逻辑页面的情况下递增地向辅助存储装置写出增量更新记录,使用所获得的多个更新请求递增地更新键(1108)。
[0237] 例如,页面存根可以包括与逻辑页面相关联的键边界的值(1110)。
[0238] 例如,在图11B的示例中,递增地更新键可以包括递增地将多个相应增量记录前置于表示页面存根的页面存根增量记录,其中多个相应增量记录包括规定对在相应的多个更新请求中规定的键的相应更新的键更新信息(1112)。
[0239] 例如,可以经由原子操作通过将当前相应的递增增量记录的地址安装在映射表中来发起多个相应增量记录的前置(1114)。
[0240] 例如,可以发起对键的查找,以经由从存储装置到存储器的读取操作,在逻辑页面的当前状态中获得逻辑页面的至少部分的表示(1116)。
[0241] 例如,所获得的递增更新的合并可以使用前置于页面存根的多个相应增量记录,经由预定义的合并功能来发起(1118)。
[0242] 图12是示出了根据示例实施例的图9的系统的示例操作的流程图。在图12的示例中,可以获取规定对与键值储存库相关联的逻辑页面的更新的多个更新请求(1202)。
[0243] 在不经由读取操作访问逻辑页面作为发布对键所获得的更新的一部分的情况下,可以使用所获得的多个更新请求来发布更新(1204)。
[0244] IV.某些实施例的方面
[0245] 本文中讨论的特征被提供作为可以以数据处理领域的技术人员可以理解的很多不同方式实现的示例实施例,而不脱离本文中讨论的精神。这样的特征仅被解释为示例实施例特征,而不旨在被解释为仅限于这些详细描述。
[0246] 例如,一种系统包括一种装置,该装置包括至少一个处理器和存储由所述至少一个处理器可执行的可执行指令的计算机可读存储介质,可执行指令包括页面更新管理器,页面更新管理器包括更新获取模块,更新获取模块获取规定与键值储存库相关联的逻辑页面的更新的多个更新请求。在不经由读取操作访问逻辑页面的情况下,更新发布引擎使用所获得的多个更新请求来发布更新。
[0247] 页面存根管理器经由表示页面存根的页面存根增量记录来发起页面存根到逻辑页面的当前状态的前置,页面存根包括逻辑页面的当前状态的地址的指示以及规定逻辑页面的属性的元数据,经由原子操作,通过将表示页面存根的页面存根增量记录的地址安装在映射表中来发起将页面存根前置于当前状态。
[0248] 更新获取模块获取规定对逻辑页面的记录更新的多个更新请求;并且在不经由读取操作访问逻辑页面的情况下,更新发布引擎使用所获得的多个更新请求来发布所获得的记录更新。
[0249] 更新发布引擎通过将多个相应的增量记录前置于页面存根来发布所获得的记录更新,其中多个相应增量记录包括记录更新信息,记录更新信息规定对在相应多个更新请求中规定的逻辑页面的相应更新。
[0250] 整合引擎使用前置于页面存根的多个相应增量记录,经由预定义的整合功能来整合所获得的记录更新。
[0251] 更新获取模块获取规定对逻辑页面中的记录的递增更新的多个更新请求。在不经由读取操作访问逻辑页面的情况下,更新发布引擎使用所获得的多个更新请求递增地发布所获得的规定的递增更新。
[0252] 更新发布引擎通过递增地将多个相应的增量记录前置于页面存根来递增地发布所获得的所规定的递增更新。多个相应的增量记录包括规定对记录的相应更新的键更新信息。
[0253] 数据检索引擎发起对键值储存库中的键的查找,以在逻辑页面的当前状态中经由从存储装置到存储器的读取操作获得逻辑页面的至少部分的表示。合并引擎使用前置于页面存根的多个相应增量记录,经由预定义的合并功能来合并所获得的所规定的递增更新。
[0254] 预定义的合并功能包括用户定义的合并功能。
[0255] 递增冲刷引擎递增地将逻辑页面的内容与前置于页面存根的多个相应增量记录冲刷到使用单个写入操作前置于存储装置的冲刷缓冲器存储区。
[0256] 键值储存库器包括表示与相应文档相关联的项的键以及表示相应文档标识符的相应值。逻辑页面存储在辅助存储装置上。
[0257] 获取规定对与逻辑页面相关联的键值储存库中的键的递增更新的多个更新请求。
[0258] 使用所获得的多个更新请求递增地更新键,而没有经由读取操作访问逻辑页面。
[0259] 页面存根到逻辑页面的当前状态的前置经由表示页面存根的页面存根增量记录来发起,页面存根包括逻辑页面的当前状态的地址的指示,经由原子操作通过在映射表中安装表示页面存根的更新增量记录的地址来发起页面存根到当前状态的前置。
[0260] 递增地更新键包括递增地将多个相应的增量记录前置于表示页面存根的页面存根增量记录。多个相应增量记录包括键更新信息,键更新信息规定在相应的多个更新请求中规定的对键的相应更新。
[0261] 经由原子操作,通过在映射表中安装当前相应递增增量记录的地址来发起多个相应增量记录的前置。
[0262] 发起键的查找,以通过从存储装置到存储器的读取操作在逻辑页面的当前状态中获取逻辑页面的至少部分的表示。
[0263] 使用前置于页面存根的多个相应增量记录,经由预定义的合并功能来发起所获得的递增更新的合并。
[0264] 递增地更新键包括通过在不经由读取操作访问逻辑页面的情况下递增地向辅助存储装置写出增量更新记录,使用所获得的多个更新请求递增地更新键。
[0265] 页面存根包括与逻辑页面相关联的键边界的值。
[0266] 一种计算机程序产品包括存储可执行指令的计算机可读存储介质,可执行指令引起至少一个数据处理装置获取规定对与键值储存库相关联的逻辑页面的更新的多个更新请求;以及在不经由读取操作来访问逻辑页面作为向键发布所获得的更新的一部分的情况下,使用所获得的多个更新请求来发布更新。
[0267] 数据处理领域的技术人员将理解,在不脱离本文中讨论的精神的情况下,可以有很多使用盲更新来执行数据修改的方式。
[0268] 客户隐私和机密性已经在数据处理环境中持续考虑多年。因此,用于使用盲更新执行数据修改的示例技术可以使用由已经经由一个或多个订阅协议(例如,“服务条款”(TOS)协议)提供了与相关联的应用或者与这样的技术相关联服务的许可的用户提供的用户输入和/数据。例如,尽管可以明确指示(例如,经由用户接受的协议)每个参与方可以控制如何发生传输和/或存储,以及什么级别可以被发送,但是用户可以提供同意将他们的输入/数据发送并存储在设备上或存储的持续时间(如果有的话)。此外,可以例如通过对实际用户信息进行散列来模糊可以用于识别用户使用的设备的标识符。应当理解,可以根据任何相关管辖区的隐私法律和法规来获得任何用户输入/数据。
[0269] 本文中所描述的各种技术的实现可以在数字电子电路中、或者在计算机硬件、固件、软件或它们的组合(例如,被配置成执行指令以执行各种功能的装置)中实现。
[0270] 实现可以被实现为在信号(例如,诸如纯传播信号等纯信号)中实施的计算机程序。这样的实现在本文中将被称为经由“计算机可读传输介质”实现,其在本文中不限定为如下所述的“计算机可读存储介质”或“计算机可读存储设备”。
[0271] 备选地,实现可以经由机器可用或机器可读存储设备(例如,磁或数字介质、诸如通用串行总线(USB)存储设备、磁带、硬盘驱动器、光盘(CD)、数字视频盘(DVD)等)来实现,机器可用或机器可读存储设备存储可执行指令(例如,计算机程序),可执行指令用于由计算装置(例如,数据处理装置)、例如可编程处理器、专用处理器或设备、计算机或多个计算机执行或控制其操作。这样的实现在本文中可以被称为经由“计算机可读存储介质”或“计算机可读存储设备”来实现,并且因此不同于纯信号的实现,诸如纯传播信号(并且因此在这本文中不被限定为如上所述的“计算机可读传输介质”)。因此,如本文中使用的,对“计算机可读存储介质”或“计算机可读存储设备”的引用明确排除信号(例如,传播信号)本身。
[0272] 诸如上述计算机程序等计算机程序可以用任何形式的编程语言来编写,包括编译、解释或机器语言,并且可以以任何形式被部署,包括作为独立的程序或作为模块、部件、子例程、或适于在计算环境中使用其它单元。计算机程序可以有形地体现为在机器可用或机器可读存储设备(例如,计算机可读介质)上的可执行代码(例如,可执行指令)。可以实现上述技术的计算机程序可以被部署为在一个计算机上或者在一个站点处、或分布在多个站点上并且通过通信网络互连的多个计算机上执行。
[0273] 方法步骤可以由执行计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作并生成输出来执行功能。一个或多个可编程处理器可以并行地执行指令,和/或可以以分布式配置来布置以用于分布式处理。本文中讨论的示例功能性还可以由一个或多个硬件逻辑部件来执行,并且装置可以至少部分地被实现为一个或多个硬件逻辑部件。例如但不限于,可以使用的说明性类型的硬件逻辑部件可以包括现场可编程阵列(FPGA)、程序特定的集成电路(ASIC)、程序特定的标准产品(ASSP)、系统级硬件、芯片系统(SOC)、复杂可编程逻辑器件(CPLD)等。
[0274] 适合于执行计算机程序的处理器例如包括通用和专用微处理器、以及任何种类的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或二者接收指令和数据。计算机的元件可以包括用于执行指令的至少一个处理器以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还可以包括用于存储数据的一个或多个大容量存储设备,例如磁盘、磁光盘或光盘,或者可操作地耦合以从其接收数据或向其传送数据。适合于实施计算机程序指令和数据的信息载体包括所有形式的非易失性存储器,包括例如半导体存储器设备,例如EPROM、EEPROM和闪存设备;磁盘,例如内部硬盘或可移动盘;磁光盘;和CD ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路来补充或并入专用逻辑电路中。
[0275] 为了提供与用户的交互,这些实现可以在具有用于向用户显示信息的显示设备(例如,阴极射线管(CRT)、液晶显示器(LCD)或等离子体显示器)、以及键盘和指示设备(例如,鼠标轨迹球)的计算机上实现,用户可以通过键盘和指示设备向计算机提供输入。其他类型的设备也可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈。例如,输出可以经由任何形式的感觉输出提供,包括(但不限于)视觉输出(例如,视觉手势、视频输出)、音频输出(例如,语音、设备声音)、触觉输出(例如,触摸、装置移动)、温度、气味等。
[0276] 此外,可以以任何形式接收来自用户的输入,包括声音、语音或触觉输入。例如,可以经由任何形式的感觉输入收来自用户的输入,包括(但不限于)视觉输入(例如,手势、视频输入)、音频输入(例如,语音、设备声音)、触觉输入(例如,触摸、设备移动)、温度、气味等。
[0277] 此外,自然用户界面(NUI)可以用于与用户交互。在本上下文中,“NUI”可以指待任何接口技术,其使得用户能够以“自然”方式与设备交互,而不受诸如鼠标、键盘、遥控器等输入设备强加的人为约束。
[0278] NUI技术的示例可以包括依赖于以下各项的技术:语音识别、触摸和指示笔识别、屏幕上和与屏幕相邻的姿势识别、空气姿势、头部和眼睛跟踪、语音和语音、视觉、触摸、手势、和机器智能。示例NUI技术可以包括但不限于触敏显示器、语音和语音识别、意图和目标理解、使用深度相机的运动姿势检测(例如,立体相机系统、红外相机系统、RGB(红色,绿色,蓝色)相机系统和这些的组合)、使用加速度计/陀螺仪的运动手势检测、面部识别、3D显示、头部,眼睛和注视跟踪、沉浸式增强现实虚拟现实系统,所有这些可以提供更自然的接口,NUI技术的示例还可以包括使用电场感测电极(例如,脑电图(EEG)和相关技术)感测脑活动的技术。
[0279] 实现可以在包括后端部件(例如,作为数据服务器)或包括中间件部件(例如,应用服务器)或包括前端部件(例如,客户端)的计算系统中实现,例如,具有用户可以通过其与实现交互的图形用户界面或Web浏览器的计算机、或这样的后端、中间件或前端部件的任何组合。部件可以通过任何形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(LAN)和广域网(WAN),例如因特网。
[0280] 尽管已经以特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求中定义的主题不一定限于上述具体特征或动作。相反,上述具体特征和动作被公开作为实现权利要求的示例形式。尽管已经如本文所述示出了所描述的实现的某些特征,但是本领域技术人员现在将想到很多修改、替换、改变和等同物。因此,应当理解,所附权利要求旨在覆盖落入实施例的范围内的所有这样的修改和改变。
相关专利内容
标题 发布/更新时间 阅读量
一种修改中性笔 2020-05-12 880
一种修改纸 2020-05-11 710
修改对象的基层 2020-05-12 643
修改分析流 2020-05-11 489
修改带式胶带 2020-05-13 179
修改素材 2020-05-11 885
路线修改 2020-05-11 239
一种修改液 2020-05-12 886
引导过程修改 2020-05-13 886
修改书写笔 2020-05-12 825
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈