对有时间限制的消息的有效处理的制作方法

文档序号:6567316阅读:175来源:国知局
专利名称:对有时间限制的消息的有效处理的制作方法
技术领域
本发明涉及对有时间限制的消息的有效处理。 背景
垃圾邮件构成了到达并且由电子邮件服务、公司以及因特网服务提供商(ISP) 处理的消息中的一大部分。由于垃圾邮件的出现,电子邮件业务和ISP的一大部分
带宽和硬件资源都被用以加工并处理垃圾邮件。与此同时,由于垃圾邮件通常具有 不同的性质并且处理方法与一般邮件不同,所以有机会通过利用这些具体性质和处 理特性来优化电子邮件服务器和其它硬件的性能。更具体地,垃圾邮件消息趋向于 比一般邮件消息小,它们被读取的可能性比较小,它们趋向于对终端用户不那么重 要或者不那么有价值并由此会被成批删除,而且它们通常在某段时间周期(例如, 几天)之后被自动删除。
在类似的环境中,公司在管理和存储诸如电子邮件的消息通信量时也可能面 对类似的问题。更具体地,这些公司可能不仅受到垃圾邮件的影响,还受到发往在 该公司工作的人员或由这些人员发出的大量非垃圾邮件消息的影响。为了降低由该 公司内电子邮件服务器存储的这种消息的量,管理员可以建立在给定时间周期之后 自动删除某类消息的命令。例如,可以在某些种类或类型的消息已被发送或接收的
30天之后自动删除这些消息,而不考虑它们是否被认为是"垃圾邮件"。在这种 情况下,这类非垃圾邮件消息可能与垃圾邮件共享某些特性,因为两者都会被保留 规定的时间周期并且在该时间周期期满之后会被自动删除。
处理、管理以及删除大量的消息通常需要消息服务器执行大量的输入/输出 (I/O)操作。已知这样的操作相比于实际移动考虑作为I/O操作的有效负载的数 据,会在准备诸如磁盘驱动器之类的硬件的过程中涉及大量额外开销。然而,如果 优化这种消息的处理,那么就可以降低或者合并被调配用以支持这种处理的硬件资 源,从而降低ISP、电子邮件业务提供商、公司等的整体运营成本。此处的教导解 决了本领域中的这些和其它问题。概述
此处描述了对有时间限制的消息的有效处理。
在一个实现方式中,消息被分类为有时间限制的消息或无时间限制的消息。 然后,将有时间限制的消息与无时间限制的消息分开处理。有时间限制的消息的示 例可以包括垃圾邮件或遵循保留策略的其它类型或种类的电子邮件,使得它们仅被 保留某个设定的时间周期。与有时间限制的消息有关的元数据被编译并与该消息分 开存储,由此可以优化该元数据的存储并且与该消息分开处理。有时间限制的消息
在被成批处理之前被累加,由此减少被有时间限制的消息消耗的i/o操作的量,并
且降低支持有时间限制的消息的处理的资源的量和成本。 附图简述
查看附图描述了详细说明。在附图中,参考标记最左边的数字标识该参考标 记首次出现的附图。在不同的附图中使用相同的参考标记表示相同或相似的条目。

图1是示出了用于对有时间限制的消息的有效处理的高级数据流程的框图。
图2是示出了与图1中所示的用于处理有时间限制的消息的管理和存储系统 相关联的部件和数据流程的框图。
图3是更详细地示出了与图1和2中所示的管理和存储系统相关联的部件和 数据流程,尤其是给定群集的各部件的框图。
图4是更详细地示出了与以上图3中所示的处理和存储有时间限制的消息的 消息体相关联的部件和数据流程的框图。
图5是示出了如以上图3中所示的元数据存储结构的一种实现的框图。
图6是示出了该元数据存储结构的另一种实现的框图。
图7是示出了执行用以接收并投递有时间限制的消息的过程流程的流程图。
图8是示出了用于管理消息体被写入其中的一个或多个日志文件的过程流程 的流程图。
图9是示出了用于存储与有时间限制的消息相对应的元数据的过程的流程图。 图10是图9中所示过程的时序图。
图11是示出了用于遍历表结构以搜索请求的元数据或标题信息的过程的流程图。
图12是示出了用于按请求检索给定的消息以便能够将其呈现给用户的过程的流程图。
图13是示出了用于将给定的消息标记为已读的过程的流程图。
图14是示出了一计算环境的框图,在该计算环境中,用于对有时间限制的消
息的有效处理的系统和方法以及此处描述的计算、网络和系统体系结构可以被全部
或部分地实现。
详细说明
图1示出了根据此处的教导提供的高级数据流程100。消息105由消息分类器 110接收。消息分类器110将这些消息105划分为至少两类,即包括有时间限制的 消息115的第一类和包括无时间限制的消息120的至少第二类。有时间限制的滑息 115包括遵循规定它们被保留多久的某种规则的那些消息。消息115中不同的各消 息可能遵循一个或多个不同的保留周期。图1示出了消息115的两个样本组,第一 组消息U5(l)遵循5天保留期,而第二组消息U5(2)遵循30天保留期。尽管图中 为了清楚和方便示出了消息115的两个组,但是任意数量的不同保留期都可应用于 不同组的有时间限制的消息115。
消息115被路由给用于有时间限制的消息115的管理和存储系统125,该系统 125会在此处详细描述。为了清楚和方便,示出的两组消息115(1)和115(2)路由给 管理和存储系统125的一个实例。然而,应当注意到,可以为遵循不同保留期的每 一不同组的消息115实现管理和存储系统125的各个实例。
无时间限制的消息120包括不遵循规定它们将被保留多久的任何规则并且因 此被无限期地保留的那些消息120。这些消息120可以被路由给用于无时间限制的 消息120的常规管理和存储系统130。
图1中所示的数据流程IOO可用于多种环境。作为第一个实施例,数据流程 IOO可用于将电子邮件服务提供给多个订户的ISP上下文。在此第一实施例中,消 息105可以采取电子邮件的形式引入订户,而消息分类器110可以采取垃圾邮件过 滤器的形式。有时间限制的消息115可以采取由消息分类器110识别为垃圾邮件的 电子邮件的形式。此ISP可以执行规定被分类为垃圾邮件的消息105将被保留多久 的策略。为了讨论方便而非限制,该持续时间在此被称作"保留期"。例如,被分 类为垃圾邮件的消息105可以遵循5天保留期。在此实施例中,被分类为垃圾邮件 的消息105被路由给管理和存储系统125,该管理和存储系统125管理垃圾邮件并 在保留期期满之后删除该垃圾邮件,这些将在如下进一步描述。作为第二个实施例,数据流程100可用在服务于例如特定公司的电子邮件应 用程序的上下文中。该公司可以执行对由该公司接收到的或从该公司发送的某类电 子邮件指定保留期的策略。作为示例而非限制,特定公司可以为"已发送"电子邮
件形式的消息105指定30天的保留期。在此实施例中,消息分类器110会识别这 些"已发送"电子邮件,并且将它们路由给管理和存储系统125以按此策略的处理。
图2示出了与图1所示用于处理有时间限制的消息115的管理和存储系统125 相关联的部件和数据流程。管理和存储系统125包括接收有时间限制的消息115 的前端205,并且还包括与前端205通信的多个群集210(1)和210(N)(总称为群集 210)。前端205在多个群集210之间进行负载平衡,并且将有时间限制的消息115 中给出的那些消息如虚线215所表示的那样路由给群集210中的一个。
尽管图2中示出了 N个群集210,但是此处所示的这种配置以及其它配置都 仅仅是为了方便和简明而选择的,而没有限制此处的教导。相反,此处的教导可用 任意数量的群集210来实现,其中N是从大于1的整数中选出的一个整数,从而 群集的总数为N。此一般说明应用于此处示出的与整数N有关的任何部件。
图3示出了进一步细化的与图1和图2中所示的管理和存储系统125相关的 部件和数据流程,尤其是群集210的部件。给出的群集210包括多个服务器机器 305(1)和305(N)(总称为服务器机器305),在其上执行运行群集210的软件。服 务器设备305的一个合适的示例是一种被配置用以支持此处所教导功能的微微 (pico)服务器("PServ")网络服务器。
前端205选择给定的群集210来接收给定的有时间限制的消息115。选定群集 210内的给定服务器设备305将给定的有时间限制的消息115的消息体310传递给 一个或多个机器315以供存储,这在如下将结合图4进一步讨论。服务器机器305 还向标题结构内填充与有时间限制的消息115有关的元数据320,并且将此元数据 320路由给元数据存储结构325,所有这些将在如下结合图5作进一步的讨论。
服务器机器305能够把消息体310和元数据320写入各自的存储结构,由此 使得消息体310和元数据320彼此分开存储。消息体310整体被认为是包括与该消 息有关的任何标题数据,但是包含该元数据320的标题结构本身可以与该消息体 310分开存储。与元数据320分开存储消息体310可以使管理和存储系统125彼此 独立地优化对消息体310和元数据320的处理。在此处使用的术语"处理"至少 可以包括接收、处理、存储或检索消息,或者在任何可应用保留期期满之后删除消 息。
7仅为了方便以及简明起见,图3示出了 N个服务器机器305 (分别为服务器 机器305(1)和305(N))以及N个存储机器315 (分别为存储机器315(1)和315(N))。
然而,应当注意到,该举例说明并没有限制此处的教导。相反,此处的教导可以采 用任意数量的服务器机器305和存储机器315来实现。更具体地,单个盒(asingle box)可以运行或者容纳该服务器机器305、存储机器315以及元数据存储325。可 替换地,前述机器中的部分或者全部都可以在其它盒上实现。
图4更详细地示出了与图3所示的处理并存储有时间限制的消息115的消息 体310相关联的部件和数据流程。如以上图3中所讨论的,消息体310和元数据 320是被分开的,并且在分开的结构中对其进行处理和存储。图4解决了管理消息 体310的问题,而图5解决了管理元数据320的问题。
每个服务器机器305都包含在消息体310到达时其内可以存储消息体310数 据结构405。此数据结构405可以驻留在服务器设备305的存储器中。数据结构405 的确切性能并不关键,并且可以假设具有例如,队列、链接表、栈、阵列等的形式。 数据结构405包括用于各个消息体310的响应的字段410(1)和410(N)(总称为字 段410),并且仅为了方便起见,给出的消息体310被示为正载入字段410(N)中。 假设数据结构405被实现为队列,则给出的消息体310可以被追加到该队列。
数据结构405用于累加多个相应的消息体310。当数据结构405变得足够大(例 如,兆字节量级)或者在给定的时间间隔(例如,大约每次100毫秒)期满之后, 数据结构405中的消息体310就被写入主存在相应存储机器315上的一个或多个日 志文件415(1)和415(N)(总称为日志文件415或者日志文件组415)。此处所使用 的术语"组"是指一个或多个中的一些。存储机器315可以使用磁盘驱动器介质以 及相关的存储技术来主存日志文件415。如果适于给出的实现,则可出于冗余和容 错的考虑将给出的消息体310写入日志文件组415。按照此处的教导的一些方面, 日志文件415至少可以部分利用一个或多个数据库而被实现。在此实现中,日志文
件415可以被成批写入一组表格。应当理解,此处的教导的这些方面本质上是示意 性而非限定性的。
服务器机器305可以利用修改的循环复用算法选择存储机器315上的日志文 件组415,这可以有偏差的以便存储机器315之间的负载平衡。例如,当给出的存 储机器315达到其存储容量时,服务器机器305可以降低新消息体310被写入该存 储机器315的速率。在此处教导的示意性实施例中,给出的日志文件415可以仅由 一个服务器机器305写入,由此消除对调整由不同服务器机器305写入给出的日志文件415的任何需要。当存在对该组415中的任何一部分的写入错误时,或者当日
志文件415已经打开一给定的周期(例如,数小时)时,就可关闭日志文件组415, 而这将在如下面结合图6进一步讨论。
与写入高速缓存、缓冲器或者中间数据结构的其它形式相比,可以使用迫使 该写入完全通过磁盘介质的选项来写入日志文件415,并且可以认为直到该写入变 为不变为止,该写入操作是不完全的。当完成对存储机器315的写入时,服务器机 器305就得知存储给定的消息体310的日志文件415名称、包含该日志文件415 的存储机器315、给定的消息体310在日志文件415内的偏移、以及消息体310的 长度。服务器机器305可以为每个消息体310在元数据存储结构325中存储这些参 数来作为元数据320。
与将每个消息体310逐一写入日志文件415相比,通过在将据结构405中的 多个消息体310写入日志文件415之前累加这些消息体310,管理和存储系统125 就实现更高的效率。假设存储机器315包括诸如磁盘驱动器的次级存储机器,并且 从这种驱动器中读取或者写入这种驱动器被称作"I/0操作",则每个I/0操作都 涉及在可以从该存储媒体中读取或者向其写入任何数据"有效负载"之前在该存储 介质内定位合适扇区的大量额外开销。更具体地,这种额外开销包括该驱动器在该 驱动器上查找合适磁道所花费的时间、将读写头径向移动到该磁道的时间、以及旋 转该驱动器以便恰当放置目标扇区位于该读写头之下的时间。通常,除非该有效负 载很大,否则上述额外开销时间实质上超出了将数据传送给存储媒体或从中读取数 据的时间。例如,根据当代标准,在兆字节的有效负载下接近此折衷点。然而随着 技术的发展,此折衷点会改变。
以单独或者逐一的基础上将消息体310写入存储机器315的效率会很低,因 为写入消息体310本身所花费的实际时间相对于上述额外开销可能很小。同样地, 这种额外开销会在管理和存储系统125接收每个消息体310时重复,以致于存储X 个消息体310会导致X次重复该额外开销。相反,管理和存储系统125在数据结 构405中累加多个消息体310,并且然后将这些累加的消息体310成批写入存储机 器315。因为这些消息体310被成批写入,则上述额外开销仅消耗了将消息体310 写入存储机器315的整个I/O操作中的较小比例。同样地,存储X个消息体310 就仅需要一个上述额外开销的示例。上述这两个因素就增加了由管理和存储系统 125执行的I/O操作的整体效率。
. 因为1/0操作中的每一个都移动更多的"有效负载",并且因此更加有效,所
9以按此教导所构造的系统和方法可以采用较少I/O操作来支持常规系统的消息处 理负载。因此,服务该负载所涉及的机器也较少,这意味着在获得并维护该机器所 需的投入也更少。可替换地,如果将具有给定的一组资源的常规系统按照此教导修 改,则它将能够处理更高的消息负载。
图5示出了图3所示元数据存储结构325的实现500。该元数据存储结构325 的另一个实施例将在以下结合图6示出并讨论。
尽管以上讨论的日志文件415可以有效地收集并成批存储消息体310,但是在 用户希望列表或者查看他或她邮箱的内容时,维持第二结构315存储与日志文件 415分开的元数据可能更为有效。这种元数据320可以包括能够让适当的电子邮件 应用程序显示消息标题的信息。
元数据320可以包括相对于终端用户可见的数据以及对该终端用户不可见的 其它数据。可见元数据320可以包括表示消息的目的地和/或始发地址的数据、表 示发送或接收时间的时间或日期标记、主题行、指示消息是否已被阅读的图标等。 次可见的元数据320可以包括涉及给定的消息体310定位的信息,并且可以包括含 有给定的消息体310的日志文件415的名称、包含日志文件415的存储机器315、 该消息体310在日志文件415内的偏移、以及该消息体310的长度。
元数据存储结构325至少可以被实现为图5中所示的实施例500。在该实施例 500中,元数据存储可以被实现为一组数据库表505 (例如,基于SQL的表),并 且在图6中所示的第二实施例中被实现为基于图像的日志。在这两个实施例中,用 于给定邮箱的元数据320可以被存储在给定的存储机器315上。此外,元数据320 还可以通过运行来自接收更新请求的服务器机器305的事务而被更新。在基于表的 实现中,每一更新仅涉及一项事务,而这些更新被追加到适当的表。某些基于图像 的实现可以执行分别读取和写入事务来实现次更新。然而,其它基于图像的实现也 可以通过将写入聚拢到扇区边界或者通过将扇区尾端存储在存储器中来避免该读 取事务。
相反,常规方法对于每个更新可能需要两项事务来考虑将部分写入记述到消 息日志文件中。第一项事务读取该部分消息日志文件写入,而第二项事务则写入各更新。
图5和6中所示的实施例可以允许元数据320在过了保留期之后仍存在。也 就是说, 一些元数据320可以描述已经过期和/或已经被删除的消息体310和/或日 志文件415。由于元数据320与消息体310分开存储和管理,所以可以为元数据320和消息体310规定和优化各自的维护和删除算法。当最有效的是删除给定组的消息
体310和/或日志文件415时,删除对应的元数据320可能就不是最有效的。然而, 如以下将详细讨论的那样,服务器机器305在遍历元数据存储结构325时忽略这种 "已过期"元数据320。在以元数据存储实现成SQL表505为特征的实施例中, 服务器机器305可以写入被设计成不返回有关已删除的/过期的日志文件415和/或 消息体310的元数据的队列。
在数据库表实施例500中,元数据320可以被存储在一组表505中。典型的 表505(1)中的一行510(1)可以对应于由管理和存储系统125所存储的每个消息体 310。当有新消息体310被存储或删除时,可以创建另一行510(N),或者可以删除 或空出现有行510(N)。
表505可以被构造成自然为一代的(generational)。也就是说,给定的表505 可以存储有关所有消息体310的元数据320 —个给定的时间周期,例如,大约半个 保留期。表505可以用邮箱ID515和消息ID 520来索引,并且表505的各列可以 与以上讨论的多种类型的元数据320相对应。对于每个给定的消息体310,列525 可以存储包含存储该消息体310的日志文件415的存储机器315的ID,列530可 以存储该存储机器315内的日志文件415的ID,列535可以存储消息体310在日 志文件415内的偏移,而列540可以存储该消息体310的长度。单独的表可以跟踪 任意表或者重复上述内容的其它结构的位置。
图6示出了元数据存储结构325的一个额外实现600。实施例600可以包括表 605,该表有3行用于给定邮箱的名称的行610,包含世代号(通常是整数)的 行615,以及用于给定邮箱的图像的行620。各列都可以为每个邮箱而被实例化。
在此,图像620被称作日志"bbb"。已知术语"blob"在工业上是是用作"二 进制大型对象(binary large object)"的简写。因此,不是规定每个消息体310用 一行515的表505,而是该实施例600可以包括用于每个非空邮箱的图像或者日志 blob 620。
曰志blob 620可以包含与上述表505中所含的元数据320相类似的元数据 320。当服务器机器305为给定邮箱更新元数据320时,它可以从元数据存储结构 325中检索用于该邮箱的日志blob 620和世代号615。服务器机器305随后就能够 用新的元数据320更新该日志blob 620,递增该世代号615,以及将更新的日志blob 620和递增的世代号615写回到元数据存储结构325。
在将更新的日志blob 620和递增的世代号615写回到元数据存储结构325之
11前,服务器机器305检测自从服务器机器305最初读取该日志blob 620以来当前存 储在元数据存储结构325内的日志blob 565的世代号615是否已经改变。如果该世 代号615自从最初读取以来有所改变,则这就可能指示另一个服务器机器305或者 其它过程已经在该读取和该更新之间的某一时刻更新了该日志blob 620。在这种情 况下,服务器机器305重新读取该日志blob 620,并且重新尝试对元数据存储结构 325的更新。
如果世代号615自从服务器机器305最初读取该日志blob 620以来尚未改变, 该服务器机器305就更新元数据存储结构325。以此方式,世代号615可以避免不 同的服务器机器305或其它过程对同一邮箱执行冲突的更新。
作为以上所述的世代号方案的一个可选替换,并且为了消除更新它的写入事 务,如果当前值仍然是服务器机器305最初读取的值,则服务器机器305可以通过 将日志blob 620更新为新值的增强更新事务而使用更新的日志blob 620来更新该 元数据存储结构325。这种替换方法为了管理少一个的参数作为交换涉及为每一事 务移动更多的数据,但是这种折衷在某些情况下是有利的。
另一可选替换组合了世代号方法和增强更新事务方法。这种可选替换可以将 世代号615预挂起(pre-pend)或追加到日志blob 620的开头或末尾。在更新过程 中,服务器机器305可以引用该世代号615来确保产生看上去相同的中间结果的一 组更新会被适当地串行化。
当为给定邮箱更新日志blob 620时,服务器机器305在重写该日志blob 620 之前,可以为该邮箱删除元数据320中任何陈旧项。陈旧项例如可以包括与比可用 保留期还要老旧的有时间限制的消息115相对应的项。如果该邮箱中不再有消息体 310,则递增世代号615并且删除日志blob 620。删除日志blob 620的一种方法是 将其作为零长度文件写入。
非空日志blob 620可以具有一最小尺寸,该最小尺寸大到仅有很小百分比的 邮箱可能需要比这个尺寸更大的尺寸。如果大量的相邻页被分配在有关该日志blob 620的表605中,则日志blob 620在其增大或者收縮时就无需重新分配。例如,假 设给定的实现中,每天每个邮箱有八(8)个消息到达。如果用于给定的有时间限 制的消息115的元数据320大约是500个字节,并且保留期是5天,那么日志blob 565的平均使用部分会是约20K。这样,64K的最小blob尺寸应当会使几乎所有日 志blob 620不再需要扩大。这种方法比起其它方法可能会在整体上使用更多的空 间,但是其使用的总空间则仍可能是相对较小的。每个存储机器315的邮箱的平均
12数量是大约IOO,OOO,所以配置64K/邮箱会使支持日志blob 620的每个存储机器315 存储6.4G。
如果给定的邮箱根本没有活动(既没有消息达到,也没被所有者访问),那 么其日志blob 620会无限地维持,即使它可能仅描述了过期的消息体310。在管理 和存储系统125的某些实施例中,代理进程(daemon)可以遍历该邮箱,并且移 动与过期消息体310有关的任何元数据320。然而,如果管理和存储系统125在某 个时间周期之后完全移除了不活动的邮件账户,则该类的代理进程可能并无意义。
图7示出了被执行用以接收和存储有时间限制的消息115的过程700。在框 705,处理700等待给定的有时间限制的消息115的到达或者与数据结构405 (可 以采取缓冲器的形式)相关联的超时参数期满的发生。例如,给定的有时间限制的 消息115可以由管理和存储系统125接收,并且被路由给服务器机器305。当这些 事件中的任一事件发生时,过程700进行到框710,在其中确定与该数据结构405 相关联的超时参数是否已经期满。如果超时参数尚未期满,则过程700就就如框 715所示把有时间限制的消息115载入数据结构405。然后,过程700进行至框720 以评估数据结构405是否已满。如果数据结构405未满,则过程700返回框705 以等待下-一个事件,该事件可以是超时条件或者下一个有时间限制的消息310的到 达。从框720,如果数据结构405已满,这过程700进行到框725。图7包括页面 上的标号A,以便方便和清楚的表示过程700。然而,包括页面上的标号A并非以 任何方式限制此处的教导。
返回到框710,如果超时参数已经期满,过程700随后进行到框725。同样地, 包括页面上的A并非以任何方式限制此处的教导。在框725,过程700确定是否已 经超过了用于写入一个或多个当前日志文件415的时间限制。正如在别处更详细讨 论的那样,可以在一个有限的时间周期内写入给定的日志文件415。如果已经超过 了用于一个或多个当前日志文件415的时间限制,过程700则进行到框730以关闭 一个或多个当前日志文件415。然后,过程700进行到框735以打开一个或多个新 的日志文件415。然后,过程700返回到判定框725。
从框725,如果尚未超过有关一个或多个当前日志文件415的时间限制,则过 程700进行到框740,在其中数据结构405的内容(S卩,多个有时间限制的消息115 的消息体)被写入一个或多个日志文件。为了便于对有关有时间限制的消息115 的元数据320的后续处理,就对每个消息115进行时间标记。这种时间标记可以在 消息115被载入数据结构405中时发生,或者可以在数据结构405的内容被写入一个或多个日志文件415时发生。
框745随后检验对一个或多个日志文件415的写入是否成功。假设消息115 出于冗余的目的被写入两个或更多的日志文件415,如果对任何日志文件415的写 入失败,随后过程700就进行到框730以关闭一个或多个当前日志文件415中的每 一个。其后,过程700进行到框735以打开一个或多个新的日志文件415。其后, 过程700进行到判定框725以检测是否已经超过了用于写入一个或多个当前日志文 件415的时间限制。由于一个或多个当前日志文件415刚被创建,该过程700随后 将进行到框740以重新尝试写入操作。
在某些实施例中,过程700可以打开存储机器315上的一个或多个新日志文 件415,而不是打开先前向其写入失败的主存日志文件415的机器存储315。过程 700的这个方面会导致消息115被写入日志文件组415中的一个日志文件415 ,而 不是一个或多个其它日志文件415。然而,由于对日志文件组415的组合写入失败, 所以没有元数据320引用日志文件415的非复制部分,因此日志文件415的非复制 部分将来也不会被访问。由于在写入日志文件组415 —半失败的情况下日志文件 415被关闭并且没有被再次写入,所以日志文件415的尾部可能并不相同。然而, 由于没有元数据320引用这些日志文件415的不同尾部,并且这些不同的尾部将来 也不会被访问,所以这些文件的尾部可能不同的事实上无关紧要。
日志文件415可以使用全局唯一标识符(GUID)名称,其中日志文件组415 的两个部分具有相同的名称。GUID允许服务器机器305在无需与管理和存储系统 125的其它部件协调的情况下,为日志文件415创建不会冲突的名称。
基于消息115达到的时间的低位字节,有时间限制的消息115可以被分配给 存储机器315上的日志文件415 。作为将消息115分配给存储机器315上的日志文 件415的这种方法的结果,用于特定邮箱的消息115被分布给不同的存储机器315。 这意味着不均匀的邮箱尺寸和负载不太可能会造成管理和存储系统125中负载热 点(hotspot)或者过载。基于各存储机器315上可用的空闲空间的循环复用算法的 偏差可以进一步降低管理和存储系统125中出现存储热点或过载的可能性。
从判定框745,如果写入成功,则过程700进行到框750以创建与所存储的消 息115相对应的元数据320。写入日志文件415的各消息115可以被寻址到多个不 同的用户,并由此可以与多个不同的邮箱相关联。结果是每个用户的邮箱都可以包 括被存储在多个日志文件415中的相应的消息,而上述多个日志文件415被存储在 多个不同的存储机器上。元数据320能够为每个邮箱在随后定位和收集这些多个消息115。因此,每个用户的邮箱通常都与元数据存储结构325相关联。在框755, 过程700遍历被写入一个或多个当前日志文件415的每个消息115,识别每个消息 115所寻址的邮箱,并且为每个这种邮箱定位主存该元数据320的元数据存储结构 325。在框760,过程700用在框745中创建的元数据320为每个这种邮箱更新元 数据存储结构325中的项。
假设用图5中所示的数据库表实施例500来实践该过程700,则该过程700 通过将新行510添加到描述新消息体310的最新的世代表,就可以创建用于为新消 息体310所创建的元数据320的项。
假设用图6中所示的日志blob实施例来实践过程700,该过程700可以读取 该blob图像620以及世代号615,从blob图像620中清除任何过期项,将用于该 新消息体310的项添加给blob图像620,并且启动对元数据存储结构325的事务以 更新blob图像620并且在世代号615尚未改变的情况下更新世代号615。如果世代 号615己经改变,则过程700在其从元数据存储结构325中读取的那一点重新启动。
图8示出了用于监视消息体310正写入其中的一个或多个日志文件415的状 态的过程流程800。在框805,建立了此处所讨论的保留期参数。在上述的电子邮 件的垃圾邮件实施例中,有关垃圾邮件的保留期可以被设置为5天。在上述企业电 子邮件管理实施例中,用于"已发送"消息的保留期可以被设置为30天。在框810, 过程800选择消息体310被写入的日志文件415中最旧的一个。例如,过程800 可以访问与一个或多个日志文件415相关联的写入时间标记。如果出于某种原因, 写入时间标记不可用或者不可访问,则假设消息体310按照达到的顺序被写入到日 志文件415,就使用最新的消息体310被写入到日志文件415的时间开确定日志文 件415的年龄。在框815,过程800确定日志文件415是否已经比保留期还要旧。 如果日志文件415不比保留期旧,则过程800进行到框820,在其中过程800等待 曰志文件415中的一个变得比可用的保留期还要旧。 一旦这种事件发生,则过程 800返回到框810,在其中就选择该给定的日志文件415作为最旧的当前日志文件 415。过程800随后进行到前面讨论的框815。如果选出的日志文件415比保留期 还要旧,那么过程800进行到框825,在其中将选定的日志文件415删除。
图8中所示的过程800可以作为代理进程与图7中所示的过程700并排运行, 或者与此处所教导的其它过程并排运行。可替换地,过程800可以并入过程700 或者此处所教导的其它过程。过程800仅为了示意性和讨论的方便目的而在图8 中单独示出,但是并不限制对此处的教导的应用。
15图9更详细地示出了用于更新与有时间限制的消息115相对应的元数据320 的过程755。在框805,过程900建立如以上结合图8所讨论的保留期参数。如果 保留期参数己被创建,则框805无需重新创建它。在这种情况下,过程900可以引 用先前存在的保留期参数。
在框910,过程卯0建立元数据320将在该过程900的不同步骤中写入其中的 至少两个表,这在如下将进一步讨论。在框915,过程900选择在框910创建的表 中的第一个,该表是有关被存储在日志文件415中的消息体310的元数据320写入 其中的表。在框920,过程卯0将元数据320写入在框915中选出的表。
在框925,过程900检验第一表中最旧的消息体310是否比可应用于消息体 310的保留期还要旧。如果不是,则过程900就返回到框920以继续将元数据320 写入所选定的表,并且返回给判定框925。然而,当第一表中的最旧的消息体310 比该保留期要旧时,则过程900进行到框930,在其中关闭第一表。在框935,过 程900删除第二表,并且然后进行到框940,在框940,过程900选择在框910创 建的第二表用于写入。在框945,过程900将元数据320写入该第二表。
在框950,过程900检验保留期的另一示例是否已经期满。如果不是,过程 900返回到框945以继续将元数据320写入第二表,并且返回判定框950。当保留 期的下一示例期满时,过程900进行到框955,在其中删除元数据320写入其中的 第---表。在框960,过程900关闭用于写入的第二表,并且在框965,过程900重 新创建第一表。过程900随后返回框915并且用第一表重复该过程。
图IO给出了图9中所示的过程900的时序图1000。时间线1005从由线1010 表示的时刻to开始,并且如用箭头1015—般指示沿着水平时间轴无限延伸。线1020 在假设保留期从时刻to开始运行的情况下,表示第一保留期期满时刻。在由线1010 和1020表示的时刻之间,图9的过程900如框920所示写入第一表。通常在时刻 to或在to之前,如用参考标记915所示那样选择第一表。
通常在由垂线1020指示的第一保留期期满处或在其后不久,过程900根据框 925选取"是"分支,停止向第一表的写入,并且如图10中呈现的参考标号935 所示的那样开始将元数据320写入第二表。在由线1020所标记的时刻,保留期的 第二示例开始并运行,直到由垂线1025所标记的时刻为止。
在由线1020和1025所标记的时刻之间,过程900如参考标号940所示将元 数据320写入第二表。当保留期的第二示例期满时,过程卯0停止向第二表的写入, 这对应于图7中框945的"是"分支。因此,参考标号945如同它出现在图10中的那样出现在框940的结尾或者结尾附近处。
当过程900达到由线1025所标记的时刻时,过程900认识到被写入第一表(框 920)的任何元数据320现在都已经太旧而不应保留了,因为现在保留期的整个第 二示例都已期满。由于整个第一表现在含有的都是与已经过期的日志文件415相对 应的元数据320,因而现在可以删除第一表。在由线1025标记的时刻之前,被写 入第一表(框920)的元数据320中的一些可能仍然是活动的,因为这些元数据320 的保留期还没有到。因此,直到由线1025标记的时间为止,在对这个元数据320 的任何请求到达的情况下,都可以保持第一表中的元数据320可访问。
如图9和10中所示,过程卯0可以将元数据320交替地写入两个表,其中每 个表轮流地被写入、在一个保留期之后关闭、并在第二个保留期之后删除。为了清 楚和方便起见,图9和10示出了这个过程900的一次重复。然而,应当注意到, 该过程卯0可以被无限制地重复,其中两个表中的每一个被轮流写入和删除。还应 当注意到,过程900可以用多于两个的表来实现,并且此处所示出并讨论的两个表 的实施例仅仅是为了方便而示出的。通常,过程900可以创建N个表,其中N是 比其间可以写入表的时间周期划分成的消息保留期大一的整数。
图11示出了用于遍历表结构以搜索所请求的元数据320或标题信息的过程 1100。在框1105,过程1100接收对给定的消息标题信息的请求。在上述实施例中, 该请求可以针对遵循保留期的釆取垃圾邮件消息或者"已发送"消息形式的给定电 子邮件。例如,用户可以请求检索给定的消息,或者可以请求与被检索的给定邮箱 相关联的所有消息中的一些或全部。过程1100适于兑现(honor)该请求或者确定 该请求是否能够被根本兑现。
在框1110,过程1100搜索可以采用表格形式的第一标题结构以定位有关响应 于在框1105所接收请求的任何消息的元数据320。在框1115,过程1100确定在第 一标题表中是否发现了响应于该请求的任何项。如果在该标题表中发现了响应于该 i青求的项,则过程1100进行到框1120。在框1120'过程1100引用与该项相关联 的时间标记,并且确定该项是否是在一个"保留期"之前做出的。例如,如果该项 的保留期是30天,则框1120确定给定项是否比30天要旧。当消息体310以及有 关的元数据320被存储在日志文件415和/或元数据存储结构325中时,再调用在 图7所示过程700期间被时间标记的上述消息体310以及有关的元数据320。
如果给定项不比保留期旧,则过程1100进行到框1125,在其中过程1100响 应于框1105中接收的请求返回该项。过程1100随后进行到框1130,在其中过程1100确定在框1105接收的请求是否已被完全满足。例如,如果在框1105接收的请求是针对单个消息的,并且那个单个消息被定位并且在框1125返回,则过程1100已经完全满足该请求。在这种情况下,过程1100进行到框1135并且完成。然而,如果该请求是检索多个消息,或者是检索给定的邮箱中的一些或全部,则过程1100可以搜索并检索更多的消息。在这种情况下,过程1100进行到框1110以搜索这些项。
返回到框1115,如果所请求的项没有在第一标题表中发现,过程1100就进行到框1140,在其中它在第二标题表中搜索在框1105请求的标题信息。在框1145,过程IIOO确定是否在第二标题表中发现所请求的标题信息。如果发现了所请求的标题信息,则过程1100进行到框1120以检验定位的标题信息是否比可用保留期要旧。如果定位的标题信息比可用保留期旧,过程1100随后进行到框1150,在其中报告失败。回到框1145,如果没有发现所请求的标题信息,过程1100随后进行到框1150以报告失败,因为在第一或第二标题表中都没有发现所请求的标题信息。
假设过程1100采用图5中所示的表实现500来实施,则过程1100可以做一个队列来联结所有的世代表505,使得所有的行510都与给定的邮箱中的消息相对应,排除超过可用保留期的任何消息。假设过程1100采用图6中所示的日志blob实现600来实施,过程1100可以读取用于给定的邮箱的日志blob图像620,忽略比可用保留期旧的任何消息,并且将剩余消息返回。
图12示出了依请求检索给定消息以便能够将其呈现给用户的过程1200。在框1205,过程12.00接收将给定的消息呈现给用户的请求。在框1210,过程1200以与图11中所述用于读取消息标题的过程1100相类似的方式来找出包含用于给定消息的元数据的标题。在框1215,过程1200处理从该标题中拉出的元数据320以找出包含该给定消息的日志文件415的名称、包含该日志文件415的存储机器315、该消息在日志文件415中的偏移、以及该消息的长度。
在框1220,假设给定的消息被存储在日志文件组415中,过程1200从日志文件组415中选择一个日志文件415,并且尝试从选出的日志文件415中读取请求的消息。如果该读取没有足够快地完成和/或没有成功完成,则过程1200可以尝试从日志文件组415内的第二日志文件415中读取请求的消息。在框1225,当请求的消息被成功读取时,过程1200返回该请求的消息。
图13示出了用于将给定消息标记为已读过程1300。在框1305,过程1300接收将给定消息标记为己读的请求。在框1310,过程1300对应于该给定消息修改数据结构中的项以指示该消息应被标记为已读。这种修改可以包括将标识符写入特定 日志记录以指示给定的消息己经被读取。
在框1315,过程1300很可能连同多个其它消息一起,将给定的消息写入一个 或多个日志文件415。过程1300可以等待,直到数据结构项的写入以与消息投递 相同的方式被提交给一个或多个日志文件415为止。日志文件415中的这种记录只 有在数据库丢失并且从日志文件415中重建的情况下才需要。在框1320, 一旦完 成了向一个或多个日志文件415的写入,过程1300就以类似于传递新消息的方式 更新元数据存储结构325中的元数据320。
过程1200和1300例如可以在服务器机器305上运行。为了将给定的消息标 记为删除,服务器机器305可以执行与将给定的消息标记为已读的过程1300相类 似的过程,这一过程包括将特定的日志记录写入日志文件415。在日志blob实施例 600中,在删除给定的消息使得该消息以前所驻留的邮箱为空时,可以删除整个曰 志blob 620。
为了把给定邮箱中的所有消息标记为删除,服务器机器305能够以与以上执 行的过程1300相类似的方式做出数据结构405中的项。在日志blob实施例600中, 服务器机器305可以进行一单项数据库事务,以整个删除日志blob 620,并且由此 可以跳过更新的读取部分。
在元数据存储结构325崩溃或变得不能访问或者不可用的情况下,可以使用 日志文件415中的用于重构元数据存储结构325的数据。然而,用于任何特定元数 据存储结构325的日志文件415可以分布在给定群集210中的多个日志文件415 中。重建元数据存储结构325的一种方法是读取该群集210中的所有日志文件415 。 如果这个任务被专门分配给单个机器,则完成这个任务的时间就会受到移动所有日 志文件415经过执行该重构的机器的网络接口的时间的限制。在具体的实现中,这 种方法可能是有吸引力或者可行的,也可能不是。
另一种方法是基于仅有大约1%被读取的消息实际影响了被重构的元数据存 储结构325的这一观察结果,因为每个群集通常有大约100个存储设备具有相同尺 寸的元数据存储结构325。此外,仅关心元数据320而不是消息体310的重构,这 就进一步降低了在重构中必须处理的数据量。
最后,如果元数据存储结构325或者一个或多个存储机器315失败,就可以 根据预定程序以周期为基础对这些部件的内容进行存档或者备份。在这些情况下, 元数据存储结构325或者存储机器315中的一部分或者可能是大部分内容都可以从
19最近存档或备份的文件中恢复,而只有错过最新备份的那些内容才不得不按照上述 方法中的一种来恢复。
图14示出了一种用于有效处理有时间限制的消息的并且用于完全或部分地实
现在此所述的计算、网络和系统体系结构的计算环境1400。更具体地,计算环境 1400适于实现在此所述的各个部件,包括但并不限于消息分类器110、管理系统 125和130、前端205、服务器机器305、存储机器315以及元数据存储结构325。 示例性计算环境1400仅仅是计算系统的一个示例,并不旨在对该体系结构的 使用或功能范围做出任何限定的暗示。计算环境1400既不应被解释为对在示例性 计算环境1400中示出的部件中的任何一个或组合有任何依赖,也不应被解释为其 有任何要求。
计算环境1400中的计算机和网络体系结构可以用许多其它通用或专用计算系 统环境或结构来实现。适于使用的公知的计算系统、环境和/或结构的示例包括但 并不限于个人计算机、服务器计算机、客户机设备、便携式或膝上型设备、基于 微处理器的系统、多处理器系统、机顶盒、可编程消费电子设备、网络PC、小型
计算机、大型计算机、游戏控制台、包括任何以上的系统或设备的分布式计算环境等。
计算环境1400包括采用计算设备1402的形式的通用计算系统。计算设备1402 的部件可以包括但并不限于, 一个或多个处理器1404 (例如,任何微处理器、控 制器等)、系统存储器1406以及耦合各个系统部件的系统总线1408。 一个或多个 处理器1404处理各种计算机可执行指令以控制计算设备1402的操作并与其它电子 和计算设备通信。系统总线1408表示任意数量的多种类型的总线结构,包括存储 器总线或存储器控制器、外围总线、加速图形端口以及使用多种总线结构中的任意 一种的处理器或局部总线。
计算环境1400包括可以是能被计算设备1402访问的任何介质的多个计算机 可读介质,并且包括易失性和非易失性介质、可移动和不可移动介质。系统存储器 1406包括采用易失性存储器的形式的诸如随机存取存储器(RAM) 1410的计算机 可读介质和/或采用非易失性存储器的形式的诸如只读存储器(ROM) 1412的计算 机可读介质。基本输入/输出系统(BIOS) 1414维护便于在计算设备1402内的部 件之间诸如在启动时进行信息传递的基本例程,并且被存储在ROM 1412中。RAM 1410通常包含由一个或多个处理器1404立即可以访问和/或由其当前操作的数据 和/或程序模块。计算设备1402可以包括其它可移动/不可移动、易失性的/非易失性的计算机 存储介质。以示例的方式,硬盘驱动器1416可以从不可移动的、非易失性的磁性
介质(未示出)中读取以及向其写入,磁盘驱动器1418从可移动的、非易失性的 磁盘1420 (例如,"软盘")中读取以及向其写入,而光盘驱动器1422从诸如 CD-ROM、数字视频光盘(DVD)或其它任何类型的光介质的可移动的、非易失 性的光盘1424中读取和/或向其写入。在此示例中,硬盘驱动器1416、磁盘驱动器 1418以及光盘驱动器1422的每一个都通过一个或多个数据介质接口 1426连接至 系统总线1408。磁盘驱动器以及关联计算机可读介质提供了对计算机可读指令、 数据结构、程序模块以及用于计算设备1402的其它数据的非易失性存储。
任意数量的程序模块都可以被存储在RAM 1410、 ROM 1412、硬盘1416、磁 盘1420和/或光盘1424上,这些程序模块作为示例包括操作系统1428、 一个或多 个应用程序1430、其它程序模块1432以及程序数据1434。此操作系统1428、 一 个或多个应用程序1430、其它程序模块1432、程序数据1434中的每一个或其任意 组合都可以包括在此描述的系统和方法中的一个或多个实施例。
计算设备1402可以包括标识为通信介质的多个计算机可读介质。通信介质通 常具体化为计算机可读指令、数据结构、程序模块、或者已调制数据信号中(诸如 载波、或者其它传送机制中)的其它数据,并且包括任何信息传递介质。术语"己 调制数据信号"指的是这样一种信号,其一个或多个特征以在信号中编码信息的方 式被设定或更改。以示例而非限定的方式,通信介质包括诸如有线网络或直接有线 连接的有线介质,以及诸如声音、RF、红外线、其它无线介质的无线介质和/或其 任何组合。
用户可以通过任意数量的诸如键盘1436的不同输入设备和定点设备1438(例 如,"鼠标")来与计算设备1402进行交互。其它输入设备1440 (没有专门示出) 可以包括麦克风、操纵杆、游戏垫、控制器、圆盘式卫星天线、串行端口、扫描仪 和/或类似设备。这些以及其它输入设备通过与系统总线1408相耦合的输入/输出 接口 1442,都可以连接至处理器1404,但也可以通过诸如并行端口、游戏端口和/ 或通用串行总线(USB)的其它接口和总线结构连接。
显示设备1444 (或其它类型的监视器)可以通过诸如视频适配器1446的接口 连接到系统总线1408。除了显示设备1444之外,其它输出外围设备可以包括经由 输入/输出接口 1442连接到计算设备1402的诸如扬声器(未示出)和打印机1448 之类的部件。
21计算设备1402利用到诸如远程计算机1450的一个或多个远程计算机逻辑连 接,就可以在网络化环境中进行操作。例如,远程计算设备1450可以是个人计算 机、便携式计算机、服务器、路由器、网络计算机、对等设备或其它公共网络结点 等。远程计算设备1450被示为便携式计算机,该便携式计算机可以包括此处相对 于计算设备1402所描述的任意数量不同部件、元件和特征及其组合。
计算设备1402和远程计算设备1450之间的逻辑连接被描述为局域网(LAN) 1452和一般的广域网(WAN) 1454。这种网络化环境在办公室、公司范围的计算 机网络、以太网以及因特网中十分常见。当在LAN网络环境中实现时,计算设备 1402通常经由网络接口或适配器1456连接至该局域网1452。当在WAN网络环境 中实现时,计算设备1402通常包括调制解调器1458或其它装置而在广域网1454 上建立通信。调制解调器1458可以在计算设备1402的内部或外部,并且可以经由 输入/输出接口 1442或其它适当机制连接至系统总线1408。所示的网络连接仅仅是 示例性的,并且可以利用其它装置在计算设备1402和550之间建立一个或多个通 信链路。
在网络化环境中,诸如示出的计算环境1400中,相对于计算设备1402或其 部分描述的程序模块可以被存储在远程存储器存储设备中。以示例的方式,远程应 用程序1460可由远程计算设备1450的存储器设备来保存。出于示意性的目的,诸 如操作系统1428的应用程序和其它可执行程序组件此处被示为分离的块,然而应 当认识到,这些程序和组件可以在不同的时间驻留在计算设备1402的不同存储部 件中,并且可以由计算设备1402的一个或多个处理器1404来执行。
尽管已经用特定的结构特征和/或方法的语言描述了用于有时间限制的消息的 有效处理的实施例,但是应当理解,所附权利要求的主题并未受到所述的特定特征 或方法的限制。相反,这些特定的特征和方法被公开作为有时间限制的消息的有效 处理的示例性实现。
权利要求
1.一种方法,包括将多个消息分类为有时间限制的消息和无时间限制的消息之一;以及将所述有时间限制的消息与所述无时间限制的消息分开处理。
2. 如权利要求l所述的方法,其特征在于,还包括编译与所述有时间限制的 消息有关的元数据。
3. 如权利要求2所述的方法,其特征在于,还包括将所述元数据与对应于所 述有时间限制的消息的消息体分开存储。
4. 如权利要求2所述的方法,其特征在于,编译元数据包括确定包含一日志 文件的存储设备,其中在所述日志文件中存储了与所述元数据的至少一部分相对应 的有时间限制的消息。
5. 如权利要求l所述的方法,其特征在于,还包括在数据结构中累加多个所 述有时间限制的消息。
6. 如权利要求5所述的方法,其特征在于,还包括把来自所述数据结构的所 述多个有时间限制的消息成批写入至少一个日志文件。
7. 如权利要求l所述的方法,其特征在于,分类所述消息包括把消息中的至 少一部分分类为垃圾邮件。
8. 如权利要求l所述的方法,其特征在于,分类所述消息包括把消息中的至 少一部分分类为遵循预定保留策略的电子邮件。
9. 如权利要求1所述的方法,其特征在于,还包括响应于可用于所述有时间 限制的消息的保留期参数期满,删除所述有时间限制的消息。
10. 如权利要求1所述的方法,其特征在于,还包括从数据存储中读取所述 有时间限制的消息。
11. 一种设备,包括用于将多个消息分类为有时间限制的消息和无时间限制的消息之一的装置;以及用于将所述有时间限制的消息与所述无时间限制的消息分开处理的装置。
12.根据权利要求11所述的设备,其特征在于,还包括用于编译与有时间限制 的消息有关的元数据的装置。
13.如权利要求12所述的设备,其特征在于,还包括用于将所述元数据与对应于所述有时间限制的消息的消息体分开存储的装置。
14. 如权利要求12所述的设备,其特征在于,用于编译元数据的装置包括用 于确定包含一日志文件的存储设备的装置,其中所述日志文件中存储了与所述元数 据的至少一部分相对应的有时间限制的消息。
15. 如权利要求ll所述的设备,其特征在于,用于分类所述消息的装置包括用于把消息中的至少一部分分类为垃圾邮件的装置。
16. 如权利要求ll所述的设备,其特征在于,用于分类所述消息的装置包括用于把消息中的至少一部分分类为遵循预定保留策略的电子邮件的装置。
17. —种或多种包括计算机可执行指令的计算机可读介质,当所述计算机可执行指令被执行时会导致计算设备将多个消息分类为有时间限制的消息和无时间限制的消息中的一个;以及 将所述有时间限制的消息与所述无时间限制的消息分开处理。
18. 如权利要求17所述的一种或多种计算机可读介质,其特征在于,还包括 当被执行时会导致所述计算设备编译与所述有时间限制的消息有关的元数据的计 算机可执行指令。
19. 如权利要求18所述的一种或多种计算机可读介质,其特征在于,还包括 当被执行时会导致所述计算设备将所述元数据与对应于所述有时间限制的消息的 消息体分开存储的计算机可执行指令。
20. 如权利要求19所述的一种或多种计算机可读介质,其特征在于,还包括 当被执行时会导致所述计算设备在数据结构中累加多个所述有时间限制的消息并 且把来自所述数据结构的所述多个有时间消息成批写入至少一个日志文件的计算 机可执行指令。
全文摘要
此处描述了对有时间限制的消息的有效处理(100)。在一个实施例中,消息被分类为有时间限制的消息(125)或者无时间限制的消息(130)。然后,将有时间限制的消息与无时间限制的消息分开处理(115(1),115(2))(120)。有时间限制的消息的示例可以包括垃圾邮件或者遵循保留策略的其它类型或种类的电子邮件,使得它们仅被保留一段设置期限的时间。与有时间限制的消息有关的元数据被编译并且与该消息分开存储,由此能够优化元数据存储并与该消息分开处理。在成批处理之前累加有时间限制的消息,由此减少由有时间限制的消息消耗的I/O操作的数量,并且减少用以支持有时间限制的消息的处理的资源的量和成本。
文档编号G06F21/24GK101636742SQ200680014731
公开日2010年1月27日 申请日期2006年4月21日 优先权日2005年5月27日
发明者A·阿达雅, M·J·加格, R·I·查科恩, W·J·波洛斯基 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1