对象关系数据库中分层垃圾收集的方法、存储模块和系统的制作方法

文档序号:6535064阅读:202来源:国知局
对象关系数据库中分层垃圾收集的方法、存储模块和系统的制作方法
【专利摘要】本发明涉及对象关系数据库中分层垃圾收集的方法、存储模块和系统,描述了对象关系数据库系统中的分层垃圾收集技术。当对象关系数据库系统接收到删除对象的请求时,对象关系数据库系统将该对象标记为删除。在后台执行的垃圾收集进程可执行清扫和标记的迭代以删除该对象和该对象的子对象。在每次迭代中,删除一层或“一代”对象。垃圾收集进程可继续迭代,直到该对象和该对象的所有派生对象都被删除为止。采用该种对象关系数据库中分层垃圾收集的方法、存储模块和系统,比常规对象删除操作更简单,可以在后台执行的进程中实现且不需要应用级的或用户级的干预,为了删除对象,应用仅需将该对象标记为删除,而不必管理该对象的子对象的删除。
【专利说明】对象关系数据库中分层垃圾收集的方法、存储模块和系统
【技术领域】
[0001]本发明涉及数据库管理领域,尤其涉及对象关系数据库管理领域,具体是指一种对象关系数据库系统中的分层垃圾收集。
【背景技术】
[0002]对象关系数据库可以是被编程、被扩展或者被定制为存储、查询和检索数据对象的关系数据库系统。在对象关系数据库中,对象、类以及对象之间或者类之间的关系可用定义表格和表格之间的关系的数据库模式表示。与其中数据之间的关系通常是平展的常规关系数据库相比,对象关系数据库中的对象之间的关系可以是分层的。因此,当处理对象的删除时,对象关系数据库可遇到将被删除的对象具有一个或多个子对象的情形。按照惯例,对象关系数据库系统可使用显式递归删除或引用计数来处理删除,以确保当对象被删除时,该对象的派生对象也被删除。

【发明内容】

[0003]本发明的目的是克服了上述现有技术的缺点,提供了一种能够实现比常规对象删除操作更简单、可以在后台执行的进程中实现且不需要应用级的或用户级的干预、为了删除对象,应用仅需将该对象标记为删除,而不必管理该对象的子对象的删除的对象关系数据库中分层垃圾收集的方法、存储模块和系统。
[0004]为了实现上述目的,本发明的对象关系数据库系统中的分层垃圾收集具有如下构成:
[0005]该对象关系数据库中分层垃圾收集的方法,其主要特点是,所述的方法包括以下步骤:
[0006]由一个或多个计算机接收删除数据对象的请求,所述数据对象用数据表格中的记录表示,其中,所述记录的对象标识符数据字段存储所述数据对象的表示,并且所述记录的父标识符数据字段存储所述数据对象的父对象的表示;
[0007]从所述数据表格将所述记录标记为删除;和
[0008]在一次或多次迭代中清扫所述数据表格,包括在每次清扫迭代中:
[0009]从所述数据表格删除被标记为删除的每个记录;
[0010]删除被删记录的对象标识符字段中表示的每个数据对象;以及然后
[0011]从所述数据表格将其父标识符数据字段存储所述被删数据对象的表示的每个记录标记为删除;
[0012]其中,所述一个或多个计算机执行所述一次或多次迭代,直到满足退出条件为止。
[0013]较佳地,所述的数据对象的父对象是引用所述数据对象的对象。
[0014]较佳地,从所述数据表格将所述记录标记为删除包括:将删除标记存储在所述记录的状态数据字段中并且将所述记录的对象标识符数据字段中表示的数据对象指定为根对象。[0015]更佳地,将所述记录的对象标识符数据字段中表示的数据对象指定为根对象包括:清除所述记录的父标识符数据字段。
[0016]更佳地,当所述数据表格中的记录中表示的所有根对象都被删除时,或者当被检验为删除的记录的数量达到或超过定义的限制时,满足所述退出条件。
[0017]较佳地,所述的方法还包括以下步骤:
[0018]在从所述数据表格将所述记录标记为删除之后并且在所述数据对象被删除之前,阻止查询访问所述数据对象。
[0019]较佳地,所述一个或多个计算机与接收所述请求无关地将所述一次或多次清扫迭代作为后台进程执行。
[0020]本发明还涉及一种对象关系数据库中分层垃圾收集的非暂时性存储模块,其主要特点是,所述非暂时性存储模块用以使一个或多个计算机执行包括以下的操作的计算机指令:
[0021]接收删除数据对象的请求,所述数据对象用数据表格中的记录表示,其中,所述记录的对象标识符数据字段存储所述数据对象的表示,并且所述记录的父标识符数据字段存储所述数据对象的父对象的表示;
[0022]从所述数据表格将所述记录标记为删除;和
[0023]在一次或多次迭代中清扫所述数据表格,包括在每次清扫迭代中:
[0024]从所述数据表格删除被标记为删除的每个记录;
[0025]删除被删记录的对象标识符字段中表示的每个数据对象;以及然后
[0026]从所述数据表格将其父标识符数据字段存储所述被删数据对象的表示的每个记录标记为删除;
[0027]其中,所述一个或多个计算机执行所述一次或多次迭代,直到满足退出条件为止。
[0028]较佳地,所述数据对象的父对象是引用所述数据对象的对象。
[0029]较佳地,从所述数据表格将记录标记为删除包括:将删除标记存储在所述记录的状态数据字段中并且将所述记录的对象标识符数据字段中表示的数据对象指定为根对象。
[0030]更佳地,将所述记录的对象标识符数据字段中表示的数据对象指定为根对象包括:清除所述记录的父标识符数据字段。
[0031]更佳地,当所述数据表格中的记录中表示的所有根对象都被删除时,或者当被检验为删除的记录的数量超过定义的限制时,满足所述退出条件。
[0032]较佳地,所述操作还包括:
[0033]在从所述数据表格将所述记录标记为删除之后并且在所述数据对象被删除之前,阻止查询访问所述数据对象。
[0034]较佳地,所述指令使所述一个或多个计算机与接收所述请求无关地将所述一次或多次清扫迭代作为后台进程执行。
[0035]本发明还涉及一种对象关系数据库中分层垃圾收集的系统,其主要特点是,所述的系统包括:
[0036]一个或多个计算机,所述一个或多个计算机被编程为接收删除数据对象的请求,所述数据对象用数据表格中的记录表示,其中,所述记录的对象标识符数据字段存储所述数据对象的表示,并且所述记录的父标识符数据字段存储所述数据对象的父对象的表示;[0037]非暂时性存储模块,所述非暂时性存储模块用以使所述一个或多个计算机执行包括以下的操作的计算机指令:
[0038]从所述数据表格将所述记录标记为删除;和
[0039]在一次或多次迭代中清扫所述数据表格,包括在每次清扫迭代中:
[0040]从所述数据表格删除被标记为删除的每个记录;
[0041]删除被删记录的对象标识符字段中表示的每个数据对象;以及然后
[0042]从所述数据表格将其父标识符数据字段存储所述被删数据对象的表示的每个记录标记为删除;
[0043]其中,所述一个或多个计算机被编程为执行所述一次或多次迭代,直到满足退出条件为止。
[0044]较佳地,所述数据对象的父对象是引用所述数据对象的对象。
[0045]较佳地,从所述数据表格将记录标记为删除包括:将删除标记存储在所述记录的状态数据字段中并且将所述记录的对象标识符数据字段中表示的数据对象指定为根对象。
[0046]更佳地,将所述记录的对象标识符数据字段中表示的数据对象指定为根对象包括:清除所述记录的父标识符数据字段。
[0047]更佳地,当所述数据表格中的记录中表示的所有根对象都被删除时,或者当被检验为删除的记录的数量超过定义的限制时,满足所述退出条件。
[0048]较佳地,所述操作包括:
[0049]在从所述数据表格将所述记录标记为删除之后并且在所述数据对象被删除之前,阻止查询访问所述数据对象。
[0050]较佳地,所述一个或多个计算机响应于接收到所述请求来执行所述一次或多次清扫迭代或者与接收所述请求无关地将所述一次或多次清扫迭代作为后台进程执行。
[0051]本发明还涉及一种对象关系数据库中分层垃圾收集的系统,其主要特点是,所述的系统包括:
[0052]非暂时性存储装置,所述非暂时性存储装置存储数据对象和数据表格,所述数据对象用数据表格中的记录表示,其中,所述记录的对象标识符数据字段存储所述数据对象的表示,并且所述记录的父标识符数据字段存储所述数据对象的父对象的表示;
[0053]应用接口,所述应用接口被编程为接收删除数据对象的请求;
[0054]对象标记器,所述对象标记器被编程为从所述数据表格将所述数据记录标记为删除;和
[0055]对象清扫器,所述对象清扫器被编程为在直到满足退出条件为止的一次或多次迭代中执行对象清扫操作,其中,所述对象清扫操作的每次迭代包括:
[0056]从所述数据表格删除被标记为删除的每个记录;
[0057]从所述存储装置删除被删记录的对象标识符字段中表示的每个数据对象;以及然后
[0058]从所述数据表格将其父标识符数据字段存储所述被删数据对象的表示的每个记录标记为删除。
[0059]采用了该发明中的对象关系数据库系统中的分层垃圾收集,具有如下有益效果:
[0060]可实现本说明书中描述的特征来实现一个或多个优点。例如,在一些实现中,分层垃圾收集可以是执行映射到关系数据库系统的任意复杂对象的深层次递归删除的、系统的、递增的机制。与常规对象删除操作相比,分层垃圾收集可以更有效率。
[0061]与常规实现相比,分层垃圾收集可以更有扩展性。可使用定制的进度表、阈值和检查点来实现分层垃圾收集,以使得能够处理具有任意深层次配置的大量(例如,数百万个)对象和子对象的企业规模的数据库。
[0062]与常规实现相比,分层垃圾收集可得到响应性更高的应用体验。分层垃圾收集可被实现为使得请求删除对象的行动者(通常,终端用户应用)仅需将该对象标记为删除并且立即将控制返回给该应用,而不等待子对象的全面的完整的清理。相反,常规方法在删除操作被同步地执行的同时可能阻止该应用继续执行。
[0063]在一些实现中,与常规对象删除操作相比,分层垃圾收集可以更简单。分层垃圾收集可使用在后台执行的进程来实现,并且不需要应用级的或用户级的干预。为了删除对象,应用仅需将该对象标记为删除,而不必管理该对象的子对象的删除。
【专利附图】

【附图说明】
[0064]图1为本发明的提供对象关系数据库的分层垃圾收集的系统应用于具体实施例的概览的框图。
[0065]图2为示出图1的对象关系数据库中的对象结构的例子的示图。
[0066]图3为示出与图2的对象结构对应的示例性表格结构的示图。
[0067]图4为示出本发明的对象关系数据库中分层垃圾收集的系统中的标记操作的例子的不图。
[0068]图5为示出本发明的对象关系数据库中分层垃圾收集的系统中的清扫操作的例子的不图。
[0069]图6为示出本发明的对象关系数据库中分层垃圾收集器的例子的组件的示图。
[0070]图7为示出本发明的对象关系数据库中分层垃圾收集的方法中将对象标记为删除的进程的例子的流程图。
[0071]图8为示出本发明的对象关系数据库中分层垃圾收集的方法中清扫删除对象的进程的例子的流程图。
[0072]图9为示出本发明的对象关系数据库中分层垃圾收集的方法应用于具体实施例的流程图。
[0073]图10为本发明的用于实现图1-9的特征和操作的系统架构应用于具体实施例的框图。
[0074]各个图中的相似标号指示相似的元件。
【具体实施方式】
[0075]为了能够更清楚地描述本发明的技术内容,下面结合具体实施例来进行进一步的描述。
[0076]本发明描述了对象关系数据库系统中的分层垃圾收集技术。当对象关系数据库系统接收到删除对象的请求时,对象关系数据库系统将该对象标记为删除。在后台执行的垃圾收集进程可执行清扫和标记的迭代以删除对象和该对象的子对象。在每次迭代中,删除一层或“一代”对象。垃圾收集进程可继续迭代,直到对象和该对象的所有派生对象都被删除为止。
[0077]分层垃圾收集系统的例子。
[0078]图1是提供对象关系数据库102的分层垃圾收集的概览的框图。对象关系数据库102被编程为存储、查询和检索对象104。对象(Objects) 104可包括具有用对象图表示的相互依赖性的多个数据对象。对象104可包括父对象和被该父对象引用的子对象。以下参照图2描述对象104的更多细节。
[0079]对象关系数据库102包括对象映射(Object map) 106。对象映射106是对象关系数据库102的将对象104映射到关系模型中的组件。对象映射106可将对象104之间的内在分层关系转换为在关系数据库上下文下使用的等同的平展的关系模型。以下参照图3描述对象映射106的更多细节。
[0080]对象关系数据库102包括应用接口(Application interface)108。应用接口 108是对象关系数据库102的组件,该组件被构造为从应用进程110接收从对象104查询、修改、尤其是删除数据对象的请求。应用进程(Application procedure) 110可以是存储在对象关系数据库102内的进程、对象关系数据库102外部的应用、或者用户键入的查询或进程。删除请求(Request for deletion)可包括将被删除的对象的对象标识符(例如,对象名称)。
[0081]当接收到删除对象的请求时,应用接口 108将对象标识符提供给对象标记器(Object marker) 112。对象标记器112是对象关系数据库102的组件,该组件被构造为接收对象标识符、然后在对象映射106中将接收的对象标识符所标识的对象标记为删除。
[0082]对象关系数据库102包括垃圾收集器(Garbage collector) 114。在一些实现中,垃圾收集器114是对象关系数据库102的在后台与应用接口 108接收的请求无关地执行进程(例如,自动地并且周期性地)的组件。垃圾收集器114读取对象映射106以识别对象标记器112标记的对象。当垃圾收集器114检测到对象标记器112标记的对象时,垃圾收集器114从对象104删除对应的对象。
[0083]另外,垃圾收集器114可执行分层对象删除操作。在分层对象删除操作中,垃圾收集器114遍历对象映射106进行迭代。每次迭代可以是后台进程的单独激活。在每次迭代中,垃圾收集器114可从对象104删除对象标记器112标记的对象。另外,垃圾收集器可从对象映射106识别对象标记器112标记的对象的直接(例如,第一代)子对象。在迭代中,垃圾收集器114可将第一代子对象的对象标识符提供给对象标记器112。继而,对象标记器112可在对象映射106中标记每个第一代子对象。
[0084]在下一次迭代中,垃圾收集器114可删除将被删除的原始对象的第一代子对象,这些第一代子对象现在被对象标记器112标记。垃圾收集器114然后可识别并标记原始对象的第二代子对象。垃圾收集器114可继续执行迭代,其中,在每次迭代中,删除原始对象的一代子对象,并且标记原始对象的下一代子对象。垃圾收集器114可重复后台处理,直到被请求删除的对象的所有派生对象都被从对象104删除为止。
[0085]图2是示出对象关系数据库102中的对象结构的示图。存储在对象关系数据库102中的对象104可包括例如对象A、B、C和D。
[0086]对象A、B、C和D均可以例如是存储在存储装置上(例如,存储在计算机存储器中或者硬盘上)的数据集合。对象A、B、C和D均可被作为具有单个存储地址(例如,计算机存储器中的地址)的单独的不同的数据单元进行处理。对象A、B、C和D均可引用另一个对象。例如,对象A、B、C和D均可包括指向其他对象的一个或多个指针(可被重新分配并且可以为空的地址)或者其他对象的引用(不能被重新分配并且不能为空的地址)。指针和引用可创建两个对象之间的依赖关系。
[0087]例如,在图2中,对象A通过包括指向对象B的指针或者对象B的引用来引用对象B。因此,对象B依赖于对象A。对象A是对象B的父对象(或第一代祖先对象)。对象B是对象A的子对象(或第一代派生对象)。另外,引用对象C的对象A是C的父对象,C又是对象D的父对象。在对象A与对象D之间存在两个依赖层次。因此,对象A是对象D的第二代祖先对象,对象D是对象A的第二代派生对象。
[0088]对象之间的依赖关系可被表示为具有多个节点和连接这些节点的多个边的对象图。每个节点可表示对象。两个节点之间的每个边可表示这两个节点所表示的对象之间的父子关系。对象树202是表示对象A、B、C和D之间的分层父子关系的对象图。对象树202是正则树,在该正则树中,每个对象最多可具有一个父对象。对象树202可具有一个或多个根对象,其中,每个根对象是没有父对象的对象。在对象树202中,不依赖于其他对象的对象A是根对象。
[0089]对象之间的交叉引用可发生在对象关系数据库102中。例如,对象关系数据库102的对象104可包括如对象树204中所表示的那样彼此相关的对象X、Y和Z。作为对象树204中的对象X的子对象的对象Y可包括指向对象C的指针或者对象C的引用。为了保持对象树202和204的规律性,可以在应用级,例如通过在对象Y中使用指向对象C的指针或者对象C的引用的应用或进程来管理对象C与对象Y之间的关系206。该关系可以是软链接,在该软链接中,对象C与对象Y之间的交叉引用既不用对象树202,也不用对象树204表示。应用或进程负责基于应用定义的启发法来清理关系206。
[0090]图3是示出与图2的对象结构2对应的对象表格300的示图。对象表格300可以是图1的对象映射106的一部分。
[0091]对象关系数据库102可具有关系|旲型,在该关系|旲型中,信息被存储在表格中。这些表格具有类型化的(例如,整数、日期或字符串)并且命名的(例如,“id”或“名称”)的列和行,每行包含数据的实例。表格的每行可具有多个数据字段,每个数据字段对应于该表格的一列。对象关系数据库102中的关系可以是创建表格中的数据行与同一表格或另一表格中的另一数据行之间的I对0、1对I或I对多的关系的函数。
[0092]对象树202的对象用对象表格300表示,对象表格300将对象数据映射到对象关系数据库102的关系模型中。对象表格300可将如对象树202中所指示的对象A、B、C和D之间的内在分层关系映射到关系数据库系统中的与这些分层关系等同的平展关系模型中。映射可以基于父(Parent)子关系或路径表达。为了说明的目的,基于父子关系的转换被提供为图3中所示的例子。在一些实现中,可使用基于路径表达的转换。
[0093]对象表格300包含对象标识符列302和用于描述图2的对象A、B、C和D之间的父子关系的父对象列304。对象标识符列302是用于存储对象的标识符的列。父对象列304是用于存储对象的父对象的标识符的列。例如,对象表格300的行306存储与对象树202的对象A对应的数据记录。行306的与对象标识符列302对应的数据字段(对象标识符数据字段)存储对象A的标识符(例如,“ I ”)。对象A是对象树202中的根对象,指示没有其他对象包含指向对象A的指针或者对象A的引用。因此,行306的与父列304对应的数据字段(父对象数据字段)可存储“空”(null)值。
[0094]同样地,对象表格300的行308可存储行308的对象标识符数据字段中的对象B的标识符(例如,“2”)、以及行308的父对象数据字段中的对象A的标识符,该对象A的标识符指示对象A是对象B的父对象。行310和312可分别表示对象C和对象D、以及它们与对象A的关系和它们彼此的关系。
[0095]可查询具有行306、308、310和312的对象表格300来发现给定对象的祖先对象和派生对象。例如,为了检索对象C的父对象,查询可检索在行310的父对象数据字段中标识的与对象C对应的对象。为了检索对象C的子对象,查询可检索在其父对象数据字段存储对象C的标识符(在这个例子中,“3”)的行(在这个例子中,行312)的对象标识符数据字段中标识的对象。
[0096]对象表格300可具有用于存储每个对象的名称例如,“A”、“B”、“C”和“D”)的对象名称(Name)(列314和用于存储对象的状态的对象状态(Status)列316。与状态列316对应的数据字段(状态数据字段)可存储指示对应的对象是否准备好被删除的状态。以下参照图4和5描述关于在分层垃圾收集中利用对象状态列316的更多细节。
[0097]图4是示出分层垃圾收集中的标记操作402的示图。标记(Mark)操作402可由(图1的)对象标记器112对对象表格300执行。标记操作402可系统地、递增地将指定的对象标记为删除。对象标记器112可基于来自(图1的)应用接口 108的请求跟随被选择删除的对象。在所示的例子中,应用接口 108请求删除对象C,对象C用对象表格300的行310表示。
[0098]标记操作402包括将对象C指定为根对象并且通过对象清扫器(以下参照图5进行描述)将对象C指定为删除。将对象C指定为根对象包括切断对象C与其父对象(在这个例子中,对象A)之间的关系404。切断关系404可包括将行310中的父对象数据字段设置为空(或者指示对象C没有父对象的任何值,例如,无穷大)。将对象C指定为删除包括将删除标记插入在行310的状态数据字段中。对象表格300中的对象状态列316中的每个记录可具有指示该对象没有被标记为删除的初始值(例如,“0K”)。行310的状态数据字段中插入的删除标记(例如,“DEL”)可指示对象C已准备好被删除。基于行310中插入的删除标记,清扫器可删除行310和行310所表示的对象C。
[0099]图5是示出分层垃圾收集中的清扫操作的示图。对象关系数据库102的对象清扫器可周期性地对(图1的)对象表格300和(图1的)对象104执行清扫操作。清扫操作可包括删除操作502和标记操作504。在删除操作502中,对象清扫器可识别对象表格300中的被标记为删除的行,删除这些行,并且删除这些行所表示的数据对象。例如,对象清扫器可基于存储在行310的状态数据字段中的删除标记来识别行310。对象清扫器然后可删除行310,并且删除行310的对象标识符数据字段中标识的对象C。
[0100]在标记操作504中,对象清扫器识别每个被删对象的子对象(第一代派生对象),并请求(图1的)对象标记器112将每个子对象标记为删除。例如,对象清扫器可在对象表格300中搜索其中父对象数据字段存储被删对象的标识符的行。对象清扫器基于存储在行312的父对象数据字段中的标识符(“3”)来将行312识别为表示对象C的子对象。对象清扫器然后请求对象标记器112标记每个被识别行。作为响应,对象标记器112可通过将行312的父对象数据字段设置为空并且将删除标记存储在行312的状态数据字段中来将行312标记为删除(包括切断行312与被删行310之间的关系506)。在下一次清扫迭代中,对象清扫器可删除行312和行312所表示的对象D。在多次迭代中,可以以类似的方式删除对象任意深度的父子分层结构。
[0101]图6是示出分层垃圾收集器的组件的示图。分层垃圾收集器可以是图1的垃圾收集器114。分层垃圾收集器包括对象清扫器602,对象清扫器602是对象关系数据库102的被构造为执行如以上参照图5描述的清扫操作的组件。分层垃圾收集器包括对象标记器接口 604。对象标记器接口(Object marker interface)604是对象关系数据库102的组件,该组件被构造为从对象清扫器(Object sweeper>602接收对象表格300中的表示被对象清扫器602删除的对象的子对象的行的标识符,并且请求对象标记器112将识别的行标记为删除。
[0102]垃圾收集器114可包括清扫器控制器(Sweeper controller)606。清扫器控制器606是对象关系数据库102的被构造为指定用于对象清扫器602的操作的执行参数的组件。执行参数可包括这些操作的执行频率(例如,每秒钟或每分钟X次)ο执行参数可包括清扫操作的退出条件。清扫操作是迭代的,并且当满足退出条件时可终止。在一些实现中,当不再存在要跟随的根对象或者不再存在被标记为删除的对象时,清扫操作可终止。在一些实现中,当满足系统定义的限制时,清扫操作可终止。所述限制可包括对于被检验的行的数量或者预定义的垃圾收集持续时间的限制。当对象清扫器602已至少检验了指定数量的行时,或者当自从清扫操作开始以后过去的时间到达或超过预定义的垃圾收集持续时间时,迭代操作可终止。
[0103]在一些实现中,清扫器控制器606指定的执行参数可包括用于启动对象清扫器602的触发条件。触发条件可包括时间触发(例如,对象清扫器602在每分钟或每小时开始时开始清扫)或事件触发(例如,对象清扫器602在从(图1的)应用接口 108接收到请求时开始清扫)。
[0104]示例性进程。
[0105]图7是示出将对象标记为删除的进程700的流程图。进程700可由图1的对象标记器112执行。
[0106](702)从应用接口或清扫器接收删除对象的请求;
[0107](704)解除对象的链接;
[0108](706 )更新对象的状态
[0109]对象标记器112从应用接口 108或者从对象清扫器602接收删除对象的请求。该请求可包括对象的名称或其他标识符。对象标记器112然后使用该名称或其他标识符在对象表格300中搜索该对象。如果对象标记器112找到表示该对象的行,则对象标记器112解除该对象的链接(704)。解除对象的链接可包括将该行的父对象数据字段设置为空。对象标记器112更新(706)该对象的状态。更新该对象的状态可包括将删除标记存储在该行中的状态数据字段中,指示对象清扫器602可在下一次清扫中删除该行和该行中表示的对象。
[0110]图8是清扫删除对象的进程800的流程图。[0111](802)接收执行调度的清扫的命令;
[0112](804)要删除的对象?
[0113](806)退出;
[0114](808)将子对象标示为删除;
[0115](810)删除对象。
[0116]进程800可由图6的对象清扫器602执行。对象清扫器602接收(802)执行对象清扫操作的一个或多个指令。这些指令可由系统基于触发时间(例如,清扫器控制器606设置的开始清扫的时间)或触发事件(例如,当应用接口 108接收到删除对象的请求时)来提供。
[0117]对象清扫器602确定(804)是否存在要删除的对象。对象清扫器602可通过在对象表格300中搜索表示根对象并且被标记为删除的行来进行该确定。如果对象清扫器602识别没有对象要删除,或者当满足退出条件时,对象清扫器602可退出(806)。
[0118]如果对象清扫器602识别有一个或多个对象要删除,则对象清扫器602将每个被识别对象的每个子对象标示为删除(808)。将子对象标示为删除可包括使对象标记器112将删除标记存储在对象表格300中的表示子对象的行的状态数据字段中。对象清扫器602可从存储装置(例如,存储器)删除(810)识别的对象,并从对象表格300删除对应的行。对象清扫器602然后可返回到阶段804,以执行下一次迭代。
[0119]图9是示出分层垃圾收集的进程900的流程图。进程900可由实现对象关系数据库102的系统执行。该系统可包括一个或多个独立的或联网的计算机。该系统可以是企业规模的数据库系统。
[0120](902)计算装置接收删除数据对象的请求,该数据对象用数据表格中的记录表示;
[0121](904)从数据表格将记录标记为删除;
[0122](906)在一次或多次迭代中清扫数据表格。
[0123]该系统可接收(902)删除数据对象(例如,图2的对象C)的请求。数据对象用数据表格中的记录表示。该记录可以是对象表格300中的行(例如,行310)。该记录的对象标识符数据字段存储该数据对象的表示。该记录的父标识符数据字段存储该数据对象的父对象的表示。该数据对象的父对象是通过包含指向该数据对象的指针或者该数据对象的引用来引用该数据对象的对象。该系统可从该系统的组件或者从该系统外部的计算机接收该请求。
[0124]该系统从数据表将记录标记(904)为删除。将记录标记为删除可包括将删除标记存储在该记录的状态数据字段中并且将该记录的对象标识符数据字段中表示的数据对象指定为根对象。将该记录的对象标识符数据字段中表示的数据对象指定为根对象可包括消除该记录的父标识符数据字段。
[0125]该系统在一次或多次迭代中清扫(906)数据表格。在每次迭代中,该系统可从数据表格删除被标记为删除的每个记录。该系统删除被删记录的对象标识符字段中表示的每个数据对象。该系统然后在下一次迭代中从数据表将其父标识符数据字段存储被删数据对象的表示的每个记录标记为删除。该系统执行一次或多次迭代,直到满足退出条件为止。当数据表格中的记录中表示的所有根对象都被删除时,或者当被检验为删除的记录的数量超过定义的限制时,满足退出条件。在一些实现中,该系统可与接收请求无关地将一次或多次清扫迭代作为后台进程执行。在一些实现中,删除对象的请求可触发该系统执行一次或多次清扫迭代。
[0126]在一些实现中,在从数据表格将记录标记为删除之后并且在数据对象被删除之前,该系统可阻止查询访问该数据对象。因此,在等待下一次清扫的删除时,数据对象对于应用或进程可以表现为被删除。
[0127]示例性系统架构
[0128]图10是用于实现图1-9的特征和操作的系统架构(System architecture)1000的框图。其他架构(包括具有更多或更少组件的架构)是可能的。在一些实现中,架构1000包括一个或多个处理器(Processor)1002 (例如,双核Inter? Xconi?处理器)、一个或多个输出装置1004 (Output device)(例如,与IXD监视器的接口)、一个或多个网络接口(Networkinterface)1006、一个或多个输入装置(Input device)1008 (Input device)(例如,鼠标、键盘、触摸敏感显示器或远程控制器)、以及一个或多个计算机可读模块1012 (例如,RAM、R0MSDRAM、硬盘、光学盘、闪存等)。这些组件可通过一个或多个通信信道1010 (例如,总线)交换通信和数据,这些通信信道1010可利用用于便利于组件之间的数据和控制信号的传送的各种硬件和软件。
[0129]术语“计算机可读模块”是指参与将指令提供给处理器1002以用于执行的任何模块,包括,但不限于,非易失性模块(例如,光学盘或磁盘)、易失性模块(例如,存储器)和传输模块。传输模块的例子包括,但不限于,同轴电缆、铜线和光纤。
[0130]计算机可读模块1012还可包括操作系统(Operating system) 1014 (例如,Mac OS?.服务器、Windows Server?、UNIX?、Linux?或 i〇SK.)、网络通信模块(Networkcommunication module) 1016、对象标记器指令(0bject marking instructions) 1020、对象清扫指令(0b ject sweeping instructions) 1030和对象清扫配置指令(0b jectsweeping configuration instructions) 1040。操作系统 1014 可以是多用户的、多处理的、多任务的、多线程的、实时的、等等。操作系统1014执行基本任务,包括,但不限于:辨识来自装置1006、1008的输入并且将输出提供给装置1006、1008 ;保持跟踪计算机可读模块1012 (例如,存储器或存储装置)上的文件和目录,并且管理这些文件和目录;控制外设装置;并且管理一个或多个通信信道1010上的流量。网络通信模块1016包括用于建立和维护网络连接的各种组件(例如,用于实现通信协议(比如,TCP/IP、HTTP等)的软件)。对象标记指令1020可包括当被执行时使处理器1002执行对象标记器112的操作的计算机指令。对象清扫指令1030可包括当被执行时使处理器1002执行对象清扫器602和对象标记器接口 604的操作的计算机指令。对象清扫配置指令1040可包括当被执行时使处理器1002执行清扫器控制器606的操作的计算机指令。
[0131]架构1000可以例如在并行处理或对等基础设施中或者在具有一个或多个处理器的单个装置上实现。软件可包括多个软件组件,或者可以是单个代码主体。
[0132]所描述的特征可以·有利地用可在可编程系统上执行的一个或多个计算机程序实现,该可编程系统包括被耦合以从数据存储系统接收数据和指令并且将数据和指令发送到数据存储系统的至少一个可编程处理器、至少一个输入装置和至少一个输出装置。计算机程序是可在计算机中直接地或间接地用于执行某一活动或者引起某一结果的指令集。计算机程序可以用任何形式的编程语言(例如,C、SQL或Java)(包括编译语言或解释语言)编写,并且它可被以任何形式(包括作为独立程序或者作为模块、组件、子例行程序、基于浏览器的web应用、或者适用于计算机环境下的其他单元)部署。
[0133]适用于执行指令程序的处理器举例来说包括通用微处理器和专用微处理器两者、以及任何类型的计算机的单个处理器或者多个处理器或内核之一。通常,处理器将从只读存储器或随机存取存储器或者这两者接收指令和数据。计算机的基本元件是用于执行指令的处理器和用于存储指令和数据的一个或多个存储器。通常,计算机还将包括用于存储数据文件的一个或多个大容量存储装置,或者与这些大容量存储装置可操作地耦合以与它们进行通信;这样的装置包括磁盘(比如,内部硬盘和可移动盘);磁光盘;以及光学盘。适合于有形地实施计算机程序指令和数据的存储装置包括所有形式的非易失性存储器,举例来说包括半导体存储器器件(比如,EPROM、EEPROM和闪存装置);磁盘(比如,内部硬盘和可移动盘);磁光盘;以及⑶-ROM和DVD-ROM盘。处理器和存储器可被辅以ASIC (专用集成电路)或者被并入ASIC中。
[0134]为了提供与用户的交互,这些特征可在计算机上实现,该计算机具有用于向用户显示信息的显示装置(比如,CRT (阴极射线管)或IXD (液晶显示器)监视器)、用户可通过其将输入提供给计算机的键盘和定点装置(比如,鼠标或轨迹球)。
[0135]这些特征可在计算机系统中实现,该计算机系统包括后端组件(比如,数据服务器),或者包括中间件组件(比如,应用服务器或互联网服务器),或者包括前端组件(比如,具有图形用户界面或互联网浏览器的客户端计算机)、或者它们的任何组合。该系统的组件可通过任何形式或模块的数字数据通信(比如,通信网络)连接。通信网络的例子包括例如LAN、WAN、PAN以及形成互联网的计算机和网络。
[0136]计算机系统可包括客户端和服务器。客户端和服务器通常彼此远离,并且通常通过网络进行交互。客户端和服务器的关系由于在各个计算机上运行并且彼此具有客户端-服务器关系的计算机程序而引起。
[0137]采用了该发明中的对象关系数据库系统中的分层垃圾收集,具有如下有益效果:
[0138]可实现本说明书中描述的特征来实现一个或多个优点。例如,在一些实现中,分层垃圾收集可以是执行映射到关系数据库系统的任意复杂对象的深层次递归删除的、系统的、递增的机制。与常规对象删除操作相比,分层垃圾收集可以更有效率。
[0139]与常规实现相比,分层垃圾收集可以更有扩展性。可使用定制的进度表、阈值和检查点来实现分层垃圾收集,以使得能够处理具有任意深层次配置的大量(例如,数百万个)对象和子对象的企业规模的数据库。
[0140]与常规实现相比,分层垃圾收集可得到响应性更高的应用体验。分层垃圾收集可被实现为使得请求删除对象的行动者(通常,终端用户应用)仅需将该对象标记为删除并且立即将控制返回给该应用,而不等待子对象的全面的完整的清理。相反,常规方法在删除操作被同步地执行的同时可能阻止该应用继续执行。
[0141]在一些实现中,与常规对象删除操作相比,分层垃圾收集可以更简单。分层垃圾收集可使用在后台执行的进程来实现,并且不需要应用级的或用户级的干预。为了删除对象,应用仅需将该对象标记为删除,而不必管理该对象的子对象的删除。
[0142]在此说明书中,本发明已参照其特定的实施例作了描述。但是,很显然仍可以作出各种修改和变换而不背离本发明的精神和范围。因此,说明书和附图应被认为是说明性的而非限制性的。
【权利要求】
1.一种对象关系数据库中分层垃圾收集的方法,其特征在于,所述的方法包括以下步骤: 由一个或多个计算机接收删除数据对象的请求,所述数据对象用数据表格中的记录表示,其中,所述记录的对象标识符数据字段存储所述数据对象的表示,并且所述记录的父标识符数据字段存储所述数据对象的父对象的表示; 从所述数据表格将所述记录标记为删除;和 在一次或多次迭代中清扫所述数据表格,包括在每次清扫迭代中: 从所述数据表格删除被标记为删除的每个记录; 删除被删记录的对象标识符字段中表示的每个数据对象;以及然后从所述数据表格将其父标识符数据字段存储所述被删数据对象的表示的每个记录标记为删除; 其中,所述一个或多个计算机执行所述一次或多次迭代,直到满足退出条件为止。
2.根据权利要求1所述的对象关系数据库中分层垃圾收集的方法,其特征在于,所述的数据对象的父对象是引用所述数据对象的对象。
3.根据权利要求1所述的对象关系数据库中分层垃圾收集的方法,其特征在于,从所述数据表格将所述记录标记为删除包括:将删除标记存储在所述记录的状态数据字段中并且将所述记录的对象标识符数据字段中表示的数据对象指定为根对象。
4.根据权利要求3所述的对象关系数据库中分层垃圾收集的方法,其特征在于,将所述记录的对象标识符数据字段中表示的数据对象指定为根对象包括:清除所述记录的父标识符数据字段。`
5.根据权利要求3所述的对象关系数据库中分层垃圾收集的方法,其特征在于,当所述数据表格中的记录中表示的所有根对象都被删除时,或者当被检验为删除的记录的数量达到或超过定义的限制时,满足所述退出条件。
6.根据权利要求1所述的对象关系数据库中分层垃圾收集的方法,其特征在于,所述的方法还包括以下步骤: 在从所述数据表格将所述记录标记为删除之后并且在所述数据对象被删除之前,阻止查询访问所述数据对象。
7.根据权利要求1所述的对象关系数据库中分层垃圾收集的方法,其特征在于,所述一个或多个计算机与接收所述请求无关地将所述一次或多次清扫迭代作为后台进程执行。
8.一种对象关系数据库中分层垃圾收集的非暂时性存储模块,其特征在于,所述非暂时性存储模块用以使一个或多个计算机执行包括以下的操作的计算机指令: 接收删除数据对象的请求,所述数据对象用数据表格中的记录表示,其中,所述记录的对象标识符数据字段存储所述数据对象的表示,并且所述记录的父标识符数据字段存储所述数据对象的父对象的表示; 从所述数据表格将所述记录标记为删除;和 在一次或多次迭代中清扫所述数据表格,包括在每次清扫迭代中: 从所述数据表格删除被标记为删除的每个记录; 删除被删记录的对象标识符字段中表示的每个数据对象;以及然后 从所述数据表格将其父标识符数据字段存储所述被删数据对象的表示的每个记录标记为删除; 其中,所述一个或多个计算机执行所述一次或多次迭代,直到满足退出条件为止。
9.根据权利要求8所述的对象关系数据库中分层垃圾收集的非暂时性存储模块,其特征在于,所述数据对象的父对象是引用所述数据对象的对象。
10.根据权利要求8所述的对象关系数据库中分层垃圾收集的非暂时性存储模块,其特征在于,从所述数据表格将记录标记为删除包括:将删除标记存储在所述记录的状态数据字段中并且将所述记录的对象标识符数据字段中表示的数据对象指定为根对象。
11.根据权利要求10所述的对象关系数据库中分层垃圾收集的非暂时性存储模块,其特征在于,将所述记录的对象标识符数据字段中表示的数据对象指定为根对象包括:清除所述记录的父标识符数据字段。
12.根据权利要求10所述的对象关系数据库中分层垃圾收集的非暂时性存储模块,其特征在于,当所述数据表格中的记录中表示的所有根对象都被删除时,或者当被检验为删除的记录的数量超过定义的限制时,满足所述退出条件。
13.根据权利要求8所述的对象关系数据库中分层垃圾收集的非暂时性存储模块,其特征在于,所述操作还包括: 在从所述数据表格将所述记录标记为删除之后并且在所述数据对象被删除之前,阻止查询访问所述数据对象。
14.根据权利要求8所述的对象关系数据库中分层垃圾收集的非暂时性存储模块,其特征在于,所述指令使所述一个或多个计算机与接收所述请求无关地将所述一次或多次清扫迭代作为后台进程执行。`
15.一种对象关系数据库中分层垃圾收集的系统,其特征在于,所述的系统包括: 一个或多个计算机,所述一个或多个计算机被编程为接收删除数据对象的请求,所述数据对象用数据表格中的记录表示,其中,所述记录的对象标识符数据字段存储所述数据对象的表示,并且所述记录的父标识符数据字段存储所述数据对象的父对象的表示; 非暂时性存储模块,所述非暂时性存储模块用以使所述一个或多个计算机执行包括以下的操作的计算机指令: 从所述数据表格将所述记录标记为删除;和 在一次或多次迭代中清扫所述数据表格,包括在每次清扫迭代中: 从所述数据表格删除被标记为删除的每个记录; 删除被删记录的对象标识符字段中表示的每个数据对象;以及然后从所述数据表格将其父标识符数据字段存储所述被删数据对象的表示的每个记录标记为删除; 其中,所述一个或多个计算机被编程为执行所述一次或多次迭代,直到满足退出条件为止。
16.根据权利要求15所述的对象关系数据库中分层垃圾收集的系统,其特征在于,所述数据对象的父对象是引用所述数据对象的对象。
17.根据权利要求15所述的对象关系数据库中分层垃圾收集的系统,其特征在于,从所述数据表格将记录标记为删除包括:将删除标记存储在所述记录的状态数据字段中并且将所述记录的对象标识符数据字段中表示的数据对象指定为根对象。
18.根据权利要求17所述的对象关系数据库中分层垃圾收集的系统,其特征在于,将所述记录的对象标识符数据字段中表示的数据对象指定为根对象包括:清除所述记录的父标识符数据字段。
19.根据权利要求17所述的对象关系数据库中分层垃圾收集的系统,其特征在于,当所述数据表格中的记录中表示的所有根对象都被删除时,或者当被检验为删除的记录的数量超过定义的限制时,满足所述退出条件。
20.根据权利要求15所述的对象关系数据库中分层垃圾收集的系统,其特征在于,所述操作包括: 在从所述数据表格将所述记录标记为删除之后并且在所述数据对象被删除之前,阻止查询访问所述数据对象。
21.根据权利要求15所述的对象关系数据库中分层垃圾收集的系统,其特征在于,所述一个或多个计算机响应于接收到所述请求来执行所述一次或多次清扫迭代或者与接收所述请求无关地将所述一次或多次清扫迭代作为后台进程执行。
22.—种对象关系数据库中分层垃圾收集的系统,其特征在于,所述的系统包括: 非暂时性存储装置,所述非暂时性存储装置存储数据对象和数据表格,所述数据对象用数据表格中的记录表示,其中,所述记录的对象标识符数据字段存储所述数据对象的表示,并且所述记录的父标识符数据字段存储所述数据对象的父对象的表示; 应用接口,所述应用接口被编程为接收删除数据对象的请求; 对象标记器,所述对象标记器被编程为从所述数据表格将所述数据记录标记为删除;和` 对象清扫器,所述对象清扫器被编程为在直到满足退出条件为止的一次或多次迭代中执行对象清扫操作,其中,所述对象清扫操作的每次迭代包括: 从所述数据表格删除被标记为删除的每个记录; 从所述存储装置删除被删记录的对象标识符字段中表示的每个数据对象;以及然后从所述数据表格将其父标识符数据字段存储所述被删数据对象的表示的每个记录标记为删除。
【文档编号】G06F17/30GK103678725SQ201410005207
【公开日】2014年3月26日 申请日期:2014年1月6日 优先权日:2013年9月11日
【发明者】道格拉斯·艾伦·沃尔特 申请人:云巅(上海)网络科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1