优化数据库去重的制作方法

文档序号:11635244阅读:230来源:国知局
优化数据库去重的制造方法与工艺

本发明涉及由包括去重功能的数据管理系统对存储在物理存储设备的多层级集合上的数据的管理。



背景技术:

诸如数据库管理系统(dbms)之类的用户可更新的数据存储应用可以在多个存储设备上存储数据,每个存储设备与一个存储层级相关联。

dbms应用可以包括将所存储的数据组织为记录的数据库-服务器部件。每条记录标识被组织为块集合的数据。数据库将这样的记录视为“逻辑”块集合,并且每个逻辑块指的是在物理存储设备上对应的“物理”存储块。在一个示例中,如果数据库的第一记录标识第一数据合集,则对应的数据库服务器应用可以将该数据组织为两个逻辑块l100和l200。逻辑块l100反过来可以将物理存储在硬盘上的数据标识为物理块p100,逻辑块l200可以类似地将物理存储在硬盘上的数据标识为物理块p200。

这种将逻辑块映射至物理块的方法是本领域技术人员已知的一种提高存储管理的效率、灵活性或可靠性的方式。在这样的机制中可以改善存储效率的一种方式是通过允许或促进“去重”功能,该功能可以由数据库管理系统的“去重引擎”模块执行。

去重是一种可以通过其消除重复的、冗余的或者以其它方式是非必要的存储块的过程。例如,如果逻辑块l100和逻辑块l101都标识相同的数据值集合,则去重引擎可以确保所标识的数据仅在物理介质上被存储一次。在这种情况下,如果数据存储在物理块p100中,则l100和l101可能都指向相同的物理块p100。

数据库管理系统通过比较针对两个逻辑块中的每一个的内容所计算的“散列值”来确定两个逻辑块指向相同的数据值集合。散列值是通过对数据元素执行数学“散列”函数所计算的数值。散列函数通常是复杂的数学计算(诸如高阶多项式函数)并且被选择为使得没有两个不同的数据元素能够产生相同的散列值。相反,如果对两个不同的数据元素执行适当选择的散列函数产生了两个相同的散列值,则这两个数据元素可以被假定是相同的。

散列值在计算机科学中具有很大的价值,因为与计算机对这些散列值所标识的一对可能冗长的数据元素进行比较相比,它们可以能够更快地存储、读取和比较两个数值。因此,本发明的实施例可以使用散列技术来有效地确定两个逻辑块或两个物理块是否包含相同的内容。

如本领域技术人员已知的,数据库管理系统可以基于包含存储在主存储(诸如计算机存储器)或辅存储(诸如旋转的磁盘驱动器或ssd固态存储设备)中的元素的架构。出于可读性的目的,本文将把主存储部件称为“存储器驻留(memory-resident)”,并将把辅存储部件称为“盘载(on-disk)”结构。但是读者并不应当将这些惯例解释为暗示本发明的实施例将数据专门存储在计算机存储器和磁盘驱动器中。

图1图示了如计算机化数据存储领域的技术人员所知的数据库管理系统的结构。图1包括附图标记1000-1001以及101-111。

图1的数据库应用包括存储器驻留模块1000的集合,它们在正常情况下被存储在计算机的主存储(诸如随机访问存储器或高速缓存)中;以及盘载数据结构1001的集合,它们正常被存储在辅存储(诸如旋转磁盘驱动器、固态存储设备(ssd)或可重写光学存储器)中。

尽管数据库管理系统的确切部件可以变化,典型系统的存储器驻留模块可以包括:

-数据库查询处理引擎101,其对数据库应用处理用户查询进行管理;

-后台树构建器103,该应用在后台运行以确定数据库的内部结构、存储数据或文件系统应当如何被更新、内部识别或者以其他方式地修正以便实施所请求的数据库事务;

-存储器驻留记录存储105,其对最近使用的数据库信息进行缓存,诸如最近检索的数据库记录或者在处理用户查询时最近所访问的数据库索引;

-存储器驻留日志存储107,其在存储器中存储数据库事务的日志直至应用能够将该日志冲刷到盘载日志存储;和

-盘载b树109,其包括数据库的实际结构化的数据。如上所述,该数据可以被组织为记录,记录进而被组织为逻辑块,每个逻辑块各自指向物理存储在对应的物理块中的数据。所存储的数据在逻辑上被组织为“b树”数据结构,这是二叉树的优化版本,其中一个节点可以链接至多于两个的子节点;和

-盘载日志存储111,其在磁盘上存储从存储器驻留日志存储所转发的数据库事务的日志。

这样的应用可能如何工作的一个示例包括以下步骤:

-新的用户查询或事务被接收并且最初由查询或事务处理引擎101进行处理。

-如果查询或事务要求特定的数据库记录,则查询或事务处理引擎101首先检查存储器驻留记录存储105以确定该记录是否足够近期被访问过从而仍然被存储在存储器驻留记录存储105之中。如果是,则查询或事务处理引擎101从存储器驻留记录存储105提取该记录,从而避免了明显更慢地从磁盘获取。在执行这些操作的期间,查询或事务处理引擎101可以一次或多次参考盘载b树109以便更好地标识为了响应用户查询或事务所必需的操作。

-如果该记录未处于存储器驻留记录存储105中,则查询或事务处理引擎101从盘载数据库109获取该记录并且将其保存在存储器驻留记录存储105中。当存储器驻留记录存储105已满时,根据先入先出(fifo)程序,存储105中最旧的记录被删除而为更近期取得的记录腾出空间。

-查询或事务处理引擎101还在存储器驻留日志存储107中保存查询或事务所必要的任何数据库更新的日志。这些日志记录的更新将定期从存储器驻留日志存储107被冲刷到盘载日志存储111。

-后台树构建器103确定如何实施用户查询或事务所请求的数据库更新。该确定可以包括从存储器驻留日志存储107或盘载日志存储111读取条目,其中该条目标识与用户查询或事务相关联的一个或多个数据库事务。实施该查询或事务通常通过对盘载b树109中的元素进行修正来执行,诸如更新存储在记录中的数据、更新指针、索引或键值的数值、向数据库添加新的记录、移动记录或者从数据库删除已有记录。

-在后台树构建器103从存储器驻留日志存储107或盘载日志存储111读取条目读取日志条目之后,该条目就不再被需要并且从其存储107或111中删除。

-一旦后台树构建器103已经确定在存储器中盘载b树109应当如何响应于用户查询或事务被改变,则对盘载b树109实际执行那些改变。

在这样的操作的过程期间,如在两个或更多逻辑块被发现各自标识与相同散列值相关联的数据时所指示的,盘载b树109的两个或更多逻辑块可以标识相同的数据。可以通过消除这样的冗余而使得数据库的存储和管理更为高效。如本领域技术人员所知的,一种这样做的方式是将该两个或更多逻辑块中的每一个与相同的物理存储块相关联,而不是为每个逻辑块分配不同的重复物理块。

以这种方式消除冗余的物理存储可以由被称作去重引擎的软件应用来执行。这样的引擎可以检测所存储数据的重复副本并且删除除一个以外的所有相关联的相同的物理块。该引擎然后将每个逻辑块指向剩余的单个物理块。

被配置在数据库应用服务器和物理存储设备之间的去重引擎可以检测数据库应用在新的逻辑块中存储冗余数据的每次尝试,其中该数据与已有逻辑块中的数据相同。如果没有去重功能存在,数据库应用将分配新的物理块来存储与已有物理块中所存储的相同的数据。但是在这里,去重引擎替代地通过将新的逻辑块与已经与已有逻辑块相关联的物理块相关联而节省了存储空间。

在一个示例中,考虑包含两条记录r100和r200的数据库。r100存储由逻辑块l100和l101所标识的数据,逻辑块l100和l101相应地在物理块p100和p101中存储数据;同时r200存储由逻辑块l200和l201所标识的数据,逻辑块l200和l201相应地在物理块p200和p201中存储数据。

如果用户事务更新了记录r100而使得其逻辑块l100被更新以标识与记录r200的逻辑块l200所标识的数据相同的数据,那么就不再需要在两个不同的物理块中存储逻辑块l100和逻辑块l200的内容。通过计算并比较每个逻辑块的散列值,去重引擎确定l100和l200的内容是相同的,并且因此不同于向l200分配不同的物理块,替代地对l100进行更新以指向物理块p200。以这种方式,逻辑块(l100和l200)的内容可以被存储在单个物理块中。

数据库管理应用可以将数据存储在多个存储设备上,并且这些设备可以基于诸如访问频率、更新频率、访问时间要求、临界性、安全级别或数据恢复要求之类的标准而被组织为多个层级。例如,被要求快速响应时间的应用所频繁访问的数据可能被存储在一个或多个“一层”高速固态驱动器中。不太频繁被访问或者专门由更能容忍更长访问时间的应用所访问的其它数据则可以另外被存储在成本较低、容量更高的“二层”旋转硬盘驱动器上。很少访问、并不预期要更新或者非常旧的数据则可以被存储在归档的“三层”存储上,诸如光盘。

选择哪一类型的存储设备与各自层级相关联可以是依赖于实施方式的,并且在一些实施例中,数据库系统可以将数据存储在多于三个或少于三个的层级中。

选择数据的物理块被存储于其中的层级具有针对去重引擎的操作的暗示。例如,考虑正常将与存储在不同层级中的数据相关联的两个逻辑块。如果那两个逻辑块标识相同的数据,则对冗余的物理存储进行去重—并且因此强制两个逻辑块标识相同层级中的数据—这对于系统性能、效率或可靠性可能具有不利影响。

层级以及物理块到具体层级的分配可以由“重定位器(relocator)”模块进行管理,其确定哪些物理块应当被存储在各自存储层级中。例如,重定位器可以将标识“热”数据(以超过阈值的频率被访问或修正的数据)的物理块存储在快速ssd存储设备的第一层级中,同时将其它物理块归于较慢存储设备的第二层级。

在另一个示例中,如果重定位器模块检测到存储在快速ssd层级中的物理块不再被频繁访问,则其可以将该物理块移至较慢层级。在一些数据库实施方式中,数据库管理应用或者存储管理应用或平台的重定位器模块持续工作以扫描所存储数据的物理块并且在必要情况下对它们进行重定位从而提高性能。在一些实施例中,重定位器可能在背景树构建器103对b树109进行重新组织之后确定该重新组织是否导致了物理块应当被移动至不同层级的存储设备的条件。

在一个示例中,去重模块可能通过类似于以下所列出的步骤对所请求的数据库事务做出响应。这里,已有数据库记录r100可能在存储器驻留日志存储107中被标识为包括逻辑块l100和l101,同时该记录的新的、经更新的副本则将包括逻辑块l200和l201。假设l100和l101与同l200和l201相同的存储层级相关联,数据库更新/去重程序可能包括以下步骤:

i)从存储器驻留日志存储107标识当前由盘载b树109中的记录r100所标识的数据由逻辑块l100和l101所标识。

ii)分配未使用的块l200和l201以存储经更新的记录的数据。在该示例中,如以上所提到的,从与块l100和l101相同的存储层级中选择l200和l201。

iii)读取由已有记录的逻辑块l100和l101所标识的物理块p100和p101中所存储的数据。

iv)在存储器中将从p100和p101所读取的已有数据复制到新分配的逻辑块l200和l201。

v)将与逻辑块l200和l201相关联的数据冲刷到物理块p200和p201。

vi)去重器模块确定逻辑块l100和l200现在与具有相同散列值的数据元素相关联,并且逻辑块l101和l201现在与具有相同散列值的数据元素相关联。

vii)去重器从这些散列值推断出分别与逻辑块l100和l200相关联的物理块p100和p200存储相同的数据,并且分别与逻辑块l101和l201相关联的物理块p101和p201存储相同的数据。去重器通过将逻辑块l100和l200指向相同的p100物理块,并且将逻辑块l101和l201指向相同的p101物理块而消除冗余存储。物理块p200和p201现在是空闲的从而可用于其它存储用途。

在实践中,该程序有效地降低了数据库的存储要求,但是也由于需要存储器以及与物理存储中不必要的数据传输而引入了低效率和开销。这样的低效率和开销尤其可能在背景树构建器103响应于所请求的数据库事务而尝试确定如何最佳地更新盘载b树109时使得其性能出现退化。

在之前的过程中,例如:

-从物理存储读取数据库记录的逻辑块的内容是一项高延时操作,其即使作为后台操作执行可能也会明显降低性能。在物理存储设备是共享资源的情况下尤其如此。

-一些去重程序可以要求从盘载日志存储111读取经更新的记录,这又要求了另一个高开销的物理存储访问。

-即使在存储器中完成在逻辑块之间数据复制也浪费了处理器能力和存储器容量。

-复杂的散列值计算和比较增加了开销,该开销在数据库管理应用已经知道新的逻辑块(诸如上述示例中的l200)包括与它从其进行复制的块(诸如l100)相同的数据的情况下是不必要的。换言之,即使数据库管理应用已经知道就是这样,常规的去重过程也迫使去重模块执行不必要的、更高开销的操作以便确定两个逻辑块或两个物理块是否包含相同数据。

本发明的实施例通过消除对于这样的传输的需要简化了这些程序,并且因此明显提高了去重程序的效率。

本文描述了本发明的实施例以及相关联的示例,其包括对可能与同相同的层级相关联的两个或更多逻辑块相关联的物理存储块进行去重的步骤。这种简化的存在仅是为了提高可读性而并不应当被解释为将本发明的实施例限制为相同的层级内的操作。在以其它方式与这里所描述的那些相似的实施例中,本发明的方法可以被用来增强对存储在不同存储层级中的冗余块进行去重的系统。



技术实现要素:

本发明的第一实施例提供了一种数据库去重优化器,其包括一个或多个处理器,耦合至该一个或多个处理器的一个或多个存储器,以及耦合至该一个或多个处理器中的一个或多个计算机可读硬件存储设备,其中该计算机可读硬件存储设备中的一个或多个包含程序代码,其被配置为由处理器中的一个或多个经由该存储器的一个或多个来运行从而实施一种用于优化数据库的去重的方法,该数据库存储在被组织为两个或更多层级的数据库存储设备集合上,该方法包括:

该数据库去重优化器从数据库日志获取事务请求,其中该时区请求标识:该数据库中所存储的已有记录;要对该已有技术执行的事务类型;以及要被写入该已有记录的经更新数据值;

该数据库去重优化器响应于该获取而标识第一逻辑块,其对应于第一物理块并且存储该事务请求标识的所述经更新数据值;

该数据库去重优化器进一步标识第二逻辑块,其在该数据库存储设备集合中的存储设备上存储由该已有记录所包括的已有数据值;以及

该数据库去重优化器指示去重模块以将该第一逻辑块和第二逻辑块与相同的物理块相关联。

本发明的第二实施例提供了一种用于优化数据库的去重的方法,该数据库存储在被组织为两个或更多层个级的数据库存储设备集合上,该方法包括:

数据库去重优化器从数据库日志获取事务请求,其中该事物请求标识:存储于该数据库中所的已有记录;对该已有记录执行的事务的类型;以及被写入该已有记录的经更新的数据值;

该数据库去重优化器响应于该获取而标识第一逻辑块,其对应于第一物理块并且存储该由事务请求标识的经更新的数据值;

该数据库去重优化器进一步标识第二逻辑块,其在该数据库存储设备集合中的存储设备上存储由该已有记录所包括的已有数据值;以及

该数据库去重优化器指示去重模块以将该第一逻辑块和第二逻辑块与相同的物理块相关联。

本发明的第三实施例提供了一种计算机程序产品,其包括计算机可读硬件设备,该计算机可读硬件设备具有存储于其中的计算机可读程序代码的计算机可读硬件存储设备,该程序代码被配置为由计算机系统的处理器所执行以实施一种用于优化数据库的去重的方法,该数据库存储在被组织为两个或更多个层级的数据库存储设备集合上,该方法包括:

该数据库去重优化器从数据库日志获取事务请求,其中该事物请求标识:存储与该数据库中的已有记录;对该已有记录执行的事务的类型;以及被写入该已有记录的经更新的数据值;

该数据库去重优化器响应于该获取而标识第一逻辑块,其对应于第一物理块并且存储由该事务请求所标识的经更新的数据值;

该数据库去重优化器进一步标识第二逻辑块,其在该数据库存储设备集合中的存储设备上存储由该已有记录所包括的已有数据值;以及

该数据库去重优化器指引导去重模块以将该第一逻辑块和第二逻辑块第一物理块相关联。

附图说明

现在将参考附图仅以示例的方式对本发明的实施例进行描述,其中:

图1图示了如计算机化数据存储领域的技术人员所知的数据库管理系统的结构。

图2示出了根据本发明实施例的可以被用以实施用于优化数据库去重的方法的计算机化数据库去重系统的结构。

图3是图示根据本发明实施例的用于优化数据库去重的方法的流程图。

图4示出了根据本发明实施例的图3中执行优化去重程序的步骤的细节。

图5示出了可以被本发明的实施例用来对数据库或其它类型的信息库的去重进行优化的数据表的示例。

具体实施方式

本发明的实施例解决了对数据库系统或其它类型的信息库中所存储的数据进行去重的已知方法的低效以及不必要开销的问题。在包括以下所描述的那些的一些实施例中,这些优势仅在对与相同存储层级相关联的物理存储块进行去重时获得。然而,在其它实施例中,这些优势甚至可以在实施例包括对与物理存储设备的不同层级相关联的所存储数据的块进行去重的程序时获得。

如上所述,已知去重方法包括与不必要或冗余的物理存储i/o、存储器驻留数据处理、将数据从日志存储复制至b树以及逻辑或物理块所标识数据的散列值的计算和比较相关联的低效率。如下图将要描述的,本发明的实施例消除了对于这些高开销步骤中的一些或全部的需要。

特别地,本发明的实施例利用了以下事实:在实施诸如以上示例中所描述的那些的某些数据库事务时,数据库管理应用知晓新创建的或分配的逻辑块标识与已有块标识的相同的数据。在这样的情况下,不同于要求一系列散列操作、存储器中的数据处理过程以及高开销的存储访问,去重器从数据库管理应用的其它部件接收应当采取去重步骤的通知。在这样的情况下,去重模块能够立即进行—甚至可能在背景树构造器103仍然在标识经修正的b树的同时—以在不执行不必要的磁盘i/o或散列操作的情况下消除冗余物理块的可能创建。

在该方法的各种变型中,如果背景树构建器103在响应于数据库更新请求而修正b树的程序期间确定两个逻辑块标识相同的数据,则背景树构建器103可以通知数据库管理应用的其它部件这两个逻辑块可能指向相同的物理存储块。这种情况下,可能无需要求标准去重模块进行分析。

其它的变型是可能的,其中数据库管理系统的各个模块在标识到两个逻辑块标识相同的数据时开始导致两个逻辑块指向相同的物理块的步骤。无论细节如何,这些实施例共享以下特征:去重过程在不要求如上所述去重模块的散列或i/o操作的情况下进行。

在一个简单示例中,本发明的实施例可以利用以下步骤来开始去重过程:

i)用户将数据库记录“user1”所存储的数据从值“xyz”更新为值“pqr”。

ii)数据库管理系统通过将数据库事务记录在存储器驻留日志存储107中而做出响应。这样的事务可能生成类似于以下的事务日志条目:

<update,user1,"pqr">

iii)虽然该事务已经被记录在日志中,但是其还没有被实施。数据库109仍然在磁盘上存储“已有的”值“xyz”直至数据库管理器的背景树构建器103模块将所存储的磁盘值更新为“经更新的”的值“pqr”。

iv)一旦更新发生,则两个不同的逻辑块集合—一个集合被日志的事务记录所包括而另一个则被数据库109中基于磁盘的记录所包括—都标识相同的数据“pqr”。每个逻辑块集合标识不同的物理存储块,这导致数据“pqr”在磁盘上被存储两次。

v)在传统去重方法中,去重引擎在进行扫描的同时将标识该冗余并且会将两个逻辑块都指向单个物理块。但是该程序要求资源密集型磁盘i/o、数据比较以及执行复杂的散列功能。然而,本发明的实施例利用了数据库管理系统的其它模块在执行它们的正常操作的同时已经能够将冗余块标识为去重候选这一事实。本发明因此提供了这些其它模块可以向去重引擎标识冗余数据的机制,这允许其在没有显著开销的情况下消除冗余存储。

以下的附图和描述对本发明的各个实施例进行了更为详细的描述,上述实施例实施该方法以允许数据库管理系统或其它类型的信息库更为有效地运行。特别地,某些实施例进一步合并了将这些方法扩展至基于所存储数据的使用模式和其它特性而将存储介质组织为不同层级的信息管理系统的步骤。

图2示出了根据本发明实施例的可以被用来实施用于优化数据库去重的方法的计算机化数据库去重系统的结构。图2引用了对象1000、1001以及201-215。

本发明的多个方面可以采用完全硬件实施例、完全软件实施例(包括固件、驻留软件、微代码等),或者将软件和硬件方面相结合的实施例的形式,在本文中它们全部都可以被一般地称之为“电路”、“模块”或“系统”。

本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

在图2中,计算机系统201包括处理器203,其通过一个或多个i/o接口209耦合到一个或多个硬件数据存储设备211和一个或多个i/o设备213和215。在本发明的实施例中,数据存储设备211包括数据存储设备的多层级集合。如上所述,这样的多层级设备211可以根据存储在每个这样的设备上的数据的特性或者根据访问每个所存储数据元素的方式的特性被组织为(多个)层级。

在一个示例中,数据存储设备211的多层级集合可能包括:

-包括高速存储(诸如固态设备、缓冲高速旋转磁盘或高速缓存)的“一层”设备的第一集合,用于存储必须快速检索或频繁修正的数据;

-用于不太关键或不太动态的数据的“二层”设备的第二集合,其可以包括较慢的旋转磁盘、可重写光学媒体,或者其它中速存储设备;和

-存储静态或不频繁访问的数据的“三层”设备的第三集合,诸如只读介质或归档存储库。

如以上和图1中所描述的,在本发明的实施例中,多层级数据存储设备211的集合可以存储数据库的物理副本,如图1中被描述为包括盘载数据结构1001。在一个或多个处理器203以及存储器驻留dbms模块1000的所包括的程序代码的控制下的这些结构1001可以包括数据库的物理副本,如图1中所描述的盘载b树109和盘载日志存储111所表示的。

因此,硬件数据存储设备211可以包括但不限于磁带驱动器、固定或可移动硬盘、光盘、配备存储的移动设备以及固态随机存取或只读存储设备。i/o设备可以包括但不限于:输入设备213(诸如键盘、扫描仪、手持通信设备、触敏显示器、平板电脑、生物标识读取器、操纵杆、轨迹球或计算机鼠标);以及输出设备215,其可以包括但不限于打印机、绘图仪、平板电脑、移动电话、显示器或声音产生设备。数据存储设备211、输入设备213和输出设备215可以位于本地或远程站点,它们通过网络接口从本地或远程站点连接至i/o接口209。

处理器203还可以连接到一个或多个存储设备205,存储设备205可以包括但不限于动态随机存取存储器(dram)、静态随机存取存储器(sram)、可编程只读存储器(prom)、现场可编程门阵列(fpga)、安全数字存储卡、sim卡或者其它类型的存储器设备。

至少一个存储器设备205包含所存储的包括计算机可执行指令的计算机程序代码。所存储的计算机程序代码包括实施根据本发明实施例的用于优化数据库去重的方法,并且可以实施本说明书中所描述的包括图1-5所图示的方法的其它实施例的程序。

特别地,所存储的程序代码包括图1中描述的存储器驻留模块1000。这些模块1000包括接收、分析以及处理用户查询和其他请求的功能以实施数据库事务。在一些实施例中,存储器驻留模块1000还可以包括如上所述的去重模块。

存储器驻留模块1000以及被加载到一个或多个存储器设备205中的其它计算机程序代码被配置为由处理器203经由存储器设备205来执行。

因此,本发明公开了一种用于支持计算机基础设施,将计算机可读代码集成、托管、维护和部署到计算机系统201至中的过程,其中与计算机系统201相结合的代码能够执行用于优化数据库去重的方法。

本发明的任意部件能够由提供促进用于优化数据库去重的方法的服务提供方创建、集成、托管、维护、部署、管理、服务、支持等。因此,本发明公开了一种用于部署或集成计算基础设施的过程,包括将计算机可读代码集成到计算机系统201中,其中与计算机系统201组合的代码能够执行用于优化数据库去重的方法。

一个或多个数据存储单元211(或者图2中未示出的一个或多个附加存储器设备)可以被使用作为具有体现于其中的计算机可读程序和/或具有其它数据的计算机可读硬件存储设备,其中该计算机可读程序包括所存储的计算机程序代码1000。通常,计算机系统201的计算机程序产品(或可替代地,制造品)可以包括所述计算机可读硬件存储设备211。

尽管所理解的是,可以通过将程序代码1000加载到计算机可读存储介质(例如,计算机数据存储设备211)中以将程序代码1000直接手动加载到客户端、服务器和代理计算机(未示出)中来部署用于优化数据库去重的程序代码1000,程序代码1000也可以通过将程序代码1000发送到中央服务器(例如,计算机系统201)或中央服务器组而被自动或半自动地部署到计算机系统201中。然后程序代码1000可以被下载到将执行程序代码1000的客户端计算机(未示出)中。

备选地,程序代码1000可以经由电子邮件被直接发送至客户端计算机。程序代码1000然后可以被通过选择将程序代码1000分派到目录中的程序的电子邮件选项而被分派至客户端计算机上的目录或者被加载到客户端计算机上的目录。

另一种备选是将程序代码1000直接发送至客户端计算机硬盘驱动器上的目录。如果代理服务器被配置,则过程选择代理服务器代码,确定将代理服务器的代码放在哪个计算机上,传送代理服务器代码,并且然后将代理服务器代码安装在代理计算机上。接着程序代码1000被传送至代理服务器并存储在该代理服务器上。

在一个实施例中,用于优化数据库去重的程序代码1000通过提供程序代码1000以与软件应用(未示出)、操作系统(未示出)和网络操作系统软件(未显示)共存,并且然后将程序代码1000安装在程序代码将在其中工作的环境中的客户端和服务器上而被集成到客户端、服务器和网络环境中。

以上所提到的集成程序代码1000中所包括的代码的第一步骤是标识客户端和服务器上的将在其中部署程序代码1000的任何软件(包括网络操作系统(未示出)),该软件是程序代码1000所要求的或者结合程序代码1000一起进行工作。该被标识的软件包括网络操作系统,其中网络操作系统包括通过添加网络特征来增强基本操作系统的软件。接下来,标识软件应用和版本号并且将其与已经过测试以与程序代码1000一起工作的软件应用和正确版本号的列表进行比较。缺失或不匹配正确版本号的软件应用被升级到正确版本。

检查从程序代码1000向软件应用传递参数的程序指令,以确保指令的参数列表与程序代码1000所需的参数列表相匹配。相反,对软件应用传递至程序代码1000的参数进行检查以确保该参数匹配程序代码1000所需的参数。客户端和服务器操作系统(包括网络操作系统)被标识并且与已经过测试以与程序代码1000一起工作的操作系统、版本号和网络软件程序的列表进行比较。与经测试的操作系统和版本号列表中的条目不匹配的操作系统、版本号或网络软件程序被升级为客户端计算机上所列出的级别以及被升级为服务器计算机上所列出的级别。

在确保要部署程序代码1000的软件为已经过测试以与程序代码1000一起工作的正确版本级别之后,通过在客户端和服务器上安装程序代码1000而完成集成。

本发明的实施例可以被实施为由计算机系统的处理器所执行的方法、计算机程序产品、计算机系统,或者被实施为处理器执行的用于支持计算机基础设施的过程或服务。

图3-5图示了根据本发明的用于优化数据库去重的方法,并且论证了本发明相比已有技术的技术优势。

图3是图示根据本发明实施例的用于优化数据库去重的方法的流程图。图3包括步骤301-317。

图4示出了根据本发明实施例的图3中响应于图3的步骤317而执行优化去重程序的步骤的细节。图4包括步骤401-417。

图5示出了根据本发明实施例的可以被数据库管理系统用来对数据库去重进行优化的数据表的示例。图5包括步骤5001和5002。

图3的方法被作为数据库管理系统在两个存储管理表中所存储数据的函数来执行。图5示出了这些表格的示例,它们被标记为表i5001和表ii5002。

在这里也被称作多层级信息表的表i5001标识与数据库管理系统所使用的每个逻辑块相关联的存储层级。例如,在图5中,表i标识了逻辑块l100标识存储在层级i(高速固态)存储设备上的数据,并且逻辑块l202标识了存储在层级ii(较低速硬盘驱动器)存储设备上的数据。

将存储设备组织为多个层级以及逻辑块与特定层级进行关联的标准可以是依赖于实施方式的。但是在所有情况下,数据库管理系统的部件无论其何时需要确定哪个存储层级与具体逻辑块相关联都会参考类似于表i5001的表格。

在一些实施例中,表i可以进一步标识如特定实施方式所要求的每个逻辑块的其它属性。例如,在图5中,表i还包括“访问计数”列,其标识与每个逻辑块相关联的值,该值标识块被访问或更新的相对频率。在其中多个块根据该块有多频繁地被访问或更新而被分配至(多个)层级的实施方式中,这样的值可以与相对应逻辑块的存储层级相关联。特别地,在确定要被去重的块的对是否占据相同层级时,背景树构建器将在图3的步骤315中参考该表格。

在这里也被称作去重表的表ii5002包含每个物理磁盘块的条目,其标识块的特性。在图5的示例中,去重表5002标识每个块是否空闲以与逻辑块相关联或者已经被分配至一个或多个逻辑块。如果已经被分配,则表5002进一步列出与该物理块相关联的逻辑块。

在一些实施例中,去重表5002可以进一步列出相对应物理块中所存储数据的散列值。如上所述,散列值是唯一标识数据值并且通过对数据值执行复杂数学运算所生成的数字实体。如果两个不同物理块的内容生成了相同的散列值,则数据库管理系统假定这两个块存储相同的数据。在一些实施例中,表i5000和表ii5002中的任一个或其二者可以进一步包括其它信息。

如下文将更详细描述的,如果数据库管理系统尝试更新逻辑块l100,则该系统的去重模块或其它部件将为要被写入块的经更新的值计算散列值。如果所计算的散列值与表ii5002中已经列举的物理块p100的散列值相匹配,则逻辑块l100可以被添加至表ii针对p100的条目,并且没有新的物理块将与逻辑块l100相关联。

然而,如果去重器确定表ii中并没有标识与经更新的逻辑块l100相匹配的散列值的已有条目,则l100将被添加至表ii中针对尚未分配的物理块的条目。在后一种情况下,系统然后可以将逻辑块l100的经更新的数据存储在新分配的物理块中。

类似地,如果数据库管理系统接收到读取逻辑块l101的内容的请求,则系统将参照去重表5002以便标识存储与逻辑块l101相关联的数据的物理块。系统然后引导物理存储设备控制器返回相关联的物理块中所存储的数据。

图3的方法还参照由数据库管理系统维护的两个逻辑块列表以对数据库中所存储的数据进行组织、访问或更新:

-日志块(logblock)列表列举与已经响应于用户请求或其它事务而被更新的数据库记录的经更新的值相关联的每个逻辑块。这些所列举的逻辑块均与经更新的记录相关联,如其被存储在存储器驻留日志存储107中那样,直至该记录的经更新的值被背景树构建器103物理写入数据库b树109;和

-已有块(existingblock)列表标识将存储经更新的记录在其被存储在b树109中时所包括的数据的逻辑块。

图3和图4的示例性实施例还取决于某些依赖于实施方式的假设,但是这些依赖并不应当被解释为将本发明的所有实施例都限制于这样的假设。例如,图3和图4的实施例假定数据库记录的存储容量或大小决不会小于单个逻辑块。它们还依赖于每个数据库记录的边界与逻辑块的边界对齐的假设—也就是说,每个数据库记录包括一个或多个完整的逻辑块。

在其它变型中,实施例可以包括包含多于一个完整逻辑块的数据库记录;或者,如果实施例允许记录包括部分逻辑块,则在与图3或图4相似的方法中可以需要附加步骤以便确保记录、逻辑块和物理块被适当对齐从而实现本发明的目标。

图3的方法在步骤301以数据库管理系统的部件读取存储器驻留日志存储107的条目开始。每个条目标识数据库事务(诸如更新数据库记录的值的请求、或者添加、删除或复制记录的请求)。在本文所描述的示例中,系统读取标识数据库记录r100的经更新的值的日志条目。

在一些实施例中,系统可以替代地从盘载日志存储111读取条目,或者可以从日志存储107和111二者读取条目。

步骤303开始步骤303-317的迭代过程,其针对由步骤301中所读取的日志条目更新的每条记录重复一次。出于教导的目的,我们将正在被迭代程序的当前迭代所处理的记录称为记录“r100”,但是这并不应当被解释为暗示不同的记录r100被处理多于一次。例如,如果三条记录被步骤301中读取的日志条目所更新,则步骤303-317的迭代程序将针对那三条记录中的每一条执行一次。

在步骤305,在经更新的值在日志存储107(或111)中被表示时,系统标识当前记录r100的经更新的值所包括的那些逻辑块。该逻辑块列表可以从以上所描述的由数据库管理系统所保存的日志块列表读取。

在一些实施例中,数据库管理系统在该步骤中还将确保经更新的记录r100的边界与从日志块列表读取的逻辑块的边界适当对齐。例如,如果逻辑块集合包括2048kb的数据,但是记录r100的大小无法超过1024个kb,则系统可能在该步骤返回错误并且停止图3的方法或者步骤303-317的当前迭代的进一步处理。

在步骤307,系统获取并评估与存储在盘载b树数据库109中的记录r100的已有版本相关联的“已有”逻辑块的列表。在一些实施例中,该已有逻辑块的列表可以从以上所描述的已有块列表读取。由于已有块列表存储在存储器中,所以步骤307的该部件可以在没有要求访问辅存储的方法的开销的情况下被执行。

然而,在包括该图中所描述的那些的其它实施例中,该已有块的列表替代地从盘载b树109的文件系统、索引或其它数据结构的表格读取。因为这些逻辑块列表可能被频繁访问,所以在许多实施方式中,它们被存储在诸如磁盘高速缓存或固态存储设备的高速介质中。因此,即使实施例为了完成该步骤而必须执行磁盘i/o操作,该i/o操作也可以不会造成数量无法接受的开销。

如果这些已有逻辑块—之前已经被分配给b树数据库109中所存储的记录r100的已有的、预先更新版本的那些块—能够被背景树构建器103在更新b树109中的记录r100时重用,则图3的方法以步骤309-317继续进行。如果逻辑块不能以这种方式重用,则图3的方法替代地以步骤311继续进行,其执行常规的、更高开销的记录更新过程。

数据库管理系统在步骤307通过将那些逻辑块(在该步骤中从盘载b树109或者存储器驻留已有块列表所获取)同与记录r100经更新的版本相关联的逻辑块(在步骤305中从存储器驻留日志块列表所获取)进行比较以确定已有逻辑块是否可以被重用。如果已有块的大小或存储容量未至少等于经更新的块的大小或存储容量,则日志存储107(或111)所标识的记录r100的经更新的数据不能被存储在已有块中,并且步骤303-317的本次迭代以步骤311中常规的更高开销的记录更新程序结束。

如果系统在步骤307确定块足够大以存储经更新的记录r100的数据,并且满足重用的任何其它实施方式相关的条件,则该系统继续进行到步骤309。

在步骤309,该系统将步骤307中所标识的已有逻辑块的列表添加至已有块列表的条目。该条目(在其尚未这样做的情况下)现在标识当前被用来在b树数据库109中存储记录r100的逻辑块。

在步骤313,数据库管理系统将多层级信息表5000中的条目进行比较以确定记录r100的经更新的值的每个逻辑块(现在在日志块列表中列出)是否驻留在与记录r100的已有版本的对应的逻辑块(在步骤309中被添加至已有块列表)相同的存储层级中。

如果该比较显示对应的更新日志块逻辑块和已有的已有块逻辑块的相对应的对占据相同的存储层级,则日志块逻辑块被更新,并且考虑利用步骤315以及图4的方法进行去重。

然而,如果该比较揭露对应的经更新的和已有逻辑块的对占据不同的存储层级,则该逻辑块被更新,并且可能在稍后考虑在步骤317中通过常规手段进行去重。

在实施例中,步骤313-317顺序地对逻辑块的每个经更新的/已有的对进行评估。在这样的情况下,记录r100的一些逻辑块可以被更新,并且可能利用步骤315以及图4的方法进行去重,而其它逻辑块则可以被更新并且可能利用如以上所描述以及如步骤317所执行的常规手段进行去重。

在其它实施方式中,r100的所有逻辑块按照定义都可以被存储在相同层级中,这是因为对逻辑块的存储层级的选择可能是整个记录的特性的函数。也就是说,在这样的实施方式中,在确定逻辑块的存储层级时可能无法超出记录级别的粒度。

在这样的情况下,步骤313的确定将针对记录100的整体执行一次,并且该记录的所有逻辑块将通过相同的程序被更新。如上所述,该程序可以包括步骤314以及图4的方法,或者可以包括步骤317的常规程序。

在步骤315,在确定了与记录r100相关联的对应的经更新的和已有逻辑块的对能够通过本发明的方法进行去重的情况下,数据库管理系统向去重器模块标识该逻辑块对以利用图4的方法进行处理。

在一些实施例中,所有对应的逻辑块对在步骤315作为形式为<日志块[],已有块[]>的有序对的列表被转发至去重器,其中每个有序对标识在步骤305从日志存储所挑选的经更新的记录r100的逻辑块以及在步骤307中所标识的b树109中的r100的对应的已有块。在这样的情况下,去重器将在图4的步骤401接收到这样的经更新的块/已有块的对的列表。

逻辑块的经更新的/已有的对应当被转发至去重器的确定可以是依赖于实施方式的因素的函数。这些因素可以包括但并不限制于:

-已有块具有充分存储容量来存储步骤301中读取的日志条目所标识的经更新的数据元素的确定;

-由与记录r100相关联的已有块列表的多个条目整体上标识的所有已有块具有足够的存储容量来存储步骤301中读取的日志条目所标识的经更新的r100的数据的确定;或者

-r100逻辑块的经更新的/已有的对的两个逻辑块与相同存储层级相关联或者标识驻留在相同存储层级中的物理存储块的确定。

在图4的步骤401,根据本发明的实施例,去重模块接收数据库管理系统在图3的步骤315所生成的逻辑块的一个或多个有序对。这些有序对中的每一个标识被调度以根据存储器驻留日志存储107(或盘载日志111)被更新的数据库记录的逻辑块以及盘载b树数据库109中所存储的相同数据库记录的当前已有版本所对应的逻辑块。

不同于常规的去重方法,按照本发明的方法,该有序对已经被数据库管理系统中去重模块以外的模块所标识。如上所述,该标识在这里被完成而不需要逻辑块之间的冗余数据复制或者不必要的辅存储i/o,替代地利用了数据库管理系统已经记录了足以确定逻辑块的有序对是去重候选的信息的事实。

步骤403开始步骤403-407的迭代程序。该程序针对步骤401中所接收的每个有序对重复一次。在该迭代程序的描述中,当前被处理的有序对将被标识为包括经更新的逻辑块“日志块”(最初由步骤305中的日志条目所标识)以及对应的相同记录的已有块“已有块”(最初在步骤307中从已有块列表中被标识)。

在步骤405,去重模块在表ii5002(去重表)中搜索与经更新的块日志块相关联的条目。该条目标识存储由逻辑块标识为将被写入包括逻辑块日志块的经更新的数据库记录的数据的物理存储块。如图5所示,这样的记录可能在“物理块”字段中列出物理块的地址,并且在“引用逻辑块”字段中列出日志块的地址。

在步骤407,去重模块将已有块的地址添加至在步骤405中所获取的去重表5002的引用逻辑块字段。该添加指示日志块和已有块现在都与相同的物理块相关联。b树109中之前已经与逻辑块已有块相关联的物理块现在与逻辑块已有块解除关联并且之前相关联的块现在可以被释放从而被用于其它用途。

在一些实施例中,可以执行该方法的变型,其中日志块和已有块都与b树109中之前已经与逻辑块已有块相关联的物理块以外的物理块相关联。虽然并未提供本文所描述的其它实施例的一些技术优势,但是这种变型在某些情形中提供了依赖于实施方式的益处。

以这种方式,去重模块已经执行了允许日志块和已有块逻辑块都指向单个共同物理块的去重。此外,不同于常规的去重方法,该去重是在没有额外的散列运算、磁盘i/o或冗余数据复制的情况下实现的,这是因为所要去重的逻辑块对已经被其它数据库管理模块(诸如背景树构建器103)作为它们的正常操作程序的一部分所标识并量化。

在步骤403-407的迭代程序的最终迭代结束时,所有的日志块/已有块对都已经被去重并且图4的方法结束。此时,与记录的数据库事务相关的并且能够利用去重过程被释放的所有逻辑块都已经被去重。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1