带有去重复和排序的可缩放记帐的制作方法

文档序号:6425283阅读:113来源:国知局
专利名称:带有去重复和排序的可缩放记帐的制作方法
技术领域
本发明涉及帐户事件处理,由其涉及可缩放记账。
背景技术
当消费者和提供者参与到商品和/或服务的合同中时,提供者通常在提供者和该消费者之间的关系的持续期间创建与特定消费者相关联的帐户。在不必在接收商品或呈现服务的时候进行支付的情况下(诸如在提前支付或延后支付的情况下),帐户尤其有用。在递送商品或呈现服务时,帐户的结余发生改变来反映合约之下消费者向提供者进行支付的义务。进行中的帐户通常周期性地经受记帐周期,其中通知消费者帐户的结余并且如果还欠某些钱的话则给出一段时间来进行支付。典型的记帐周期是按月(例如,在信用卡、抵押支付、公共事业账单的情况下),但记帐循环也可以是按季度、按周、按年的或者可能是不定时的且不可预测的。记帐周期还可由累积的资源使用或金额结余或其他事件来触发。Web 服务可以被广义地解释为通过因特网提供的任何服务,虽然Web服务还可通过其他网络或递送机制来提供。在某些情况下,Web服务也可以是收费的。为消费者维护准确的帐户结余的过程可能是提供者的操作复杂度的一个主要部分。单个提供者可以对成千或甚至成百万的消费者建立帐户,这取决于提供者的业务的成功。因此,单个提供者通常跟踪每一消费者的帐户结余。另外,对于每一个体帐户,可能存在导致帐户结余变化的特定事件。即使对于单个帐户,也可能存在各自导致帐户结余改变或需要被跟踪的成百甚至上千的事件从而使得可以在记帐周期结束时计算最终的帐户结余。

发明内容
此处描述的至少一个实施例涉及对影响一个或多个帐户的事件的处理。计算系统接收事件消息形式的多个事件,这些事件中的每一个都可能对一个或多个帐户有某些影响。计算系统在接收这些消息时将它们划分到多个信道中的一个中。例如,每一信道可被分配特定范围的帐户标识符。在该情况下,与由信道管理的帐户范围中的特定帐户有关的所有事件都将被转发至该信道。信道接收事件,并对事件执行去重复来帮助降低双倍记帐的风险。信道随后向事件分配信道专用的序列号。信道专用序列号的使用帮助简化了在处理流水线中进一步检查副本来的过程。在一个实施例中,一个或多个信道的经排序的事件由在逐帐户基础上聚集事件的聚集器接收。所聚集的数据是更好地适于为与每一帐户相关联的消费者构建记帐报表的数据。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。


为了描述可以获得本发明的上文所列举的及其他优点和特征的方式,下面将通过参考附图来呈现对各实施例的更具体的描述。可以理解,这些附图只描绘了样本实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加属性和细节来描述和解释各实施例,在附图中图1示出了可用于采用此处所描述的实施例的示例计算系统;图2示出一示例事件数据结构;图3示出其中可以生成事件的环境;图4示出用于处理事件的方法的流程图;图5示出其中可以处理事件的环境;图6示出可用来执行去重复的布隆(Bloom)过滤环境;以及图7示出使用时间排序的标识符索引的计算环境。
具体实施例方式根据此处描述的各实施例,描述了对影响一个或多个帐户的事件的处理。计算系统可能按帐户标识符将所接收的事件划分到多个信道中。信道接收事件,执行事件的去重复来帮助降低双倍记帐的风险。信道然后向事件分配信道专用序列号。被定序的事件有可能按帐户聚集以更容易地进行帐单的计算。首先,关于计算系统的某些介绍性讨论将参考图1来描述。随后,可缩放记帐的各实施例将参考图2至7来描述。首先,在权利要求书中使用的术语“第一”、“第二”等仅用于区分项,而不应被解释为隐含任何顺序或位置排序。例如,在权利要求书中,“第一事件”不应被解释为意味着该事件是系统曾经处理的第一个事件。根据标准的权利要求语言解释,术语“第一事件”仅用来将该事件与被称为“第二事件”的另一事件区分开来。计算系统现在越来越多地采用各种形式。计算系统可以例如是手持式设备、电器、 膝上型计算机、台式计算机、大型机、分布式计算系统,或者甚至通常不被视为计算系统的设备。在本说明书以及权利要求书中,术语“计算系统”被广义地定义为包括包含至少一个处理器以及其上能含有可由处理器执行的计算机可执行指令的存储器的任何设备或系统 (或其组合)。存储器可以采取任何形式,并可以取决于计算系统的特性和形式。计算系统可以分布在网络环境中,并可包括多个组成计算系统。如图1所示,在其最基本的配置中,计算系统100通常包括至少一个处理单元102 和存储器104。存储器104可以是物理系统存储器,可以是易失性、非易失性、或两者的某种组合。术语“存储器”在此也可用来指诸如物理存储介质等非易失性大容量存储。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。如此处所使用的, 术语“模块”或“组件”可以指在计算系统上执行的软件对象或例程。此处所描述的不同组件、模块、引擎,以及服务可以实现为在计算系统上执行的对象或进程(例如,作为分开的线程)。在随后的描述中,参考由一个或多个计算系统执行的动作描述了各实施例。如果这样的动作是以软件实现的,则执行动作的相关联计算系统的一个或多个处理器响应于已经执行了计算机可执行指令,引导计算系统的操作。这样的操作的示例涉及对数据的操纵。 计算机可执行指令(以及被操纵的数据)可以存储在计算系统100的存储器104中。计算系统100还可包含允许计算系统100例如通过网络110与其他消息处理器通信的通信信道 108。本发明的各实施例可以包括或利用诸如,一个或多个处理器和系统存储器等包括计算机硬件的专用或通用计算机,这将在以下做出进一步讨论。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。 这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同的计算机可读介质计算机存储介质和传输介质。计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线、或硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动转移到计算机存储介质(或者相反)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传送到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。由此,应当理解,计算机存储介质可被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言等中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解的是,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可以在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。此处描述的原理提供了一种用于处理对记帐帐户具有影响的事件的高效机制。在描述事件的处理之前,将参考图2来描述事件的内容,图2示出了示例事件数据结构200。 接着,将参考图3的事件生成环境300来描述其中可以生成事件的环境。然后,将参考图4和5来描述根据示例实施例的对事件的处理。图2示出示例事件数据结构200。数据结构只是一个示例,并且提供数据结构主要是来说明可能出现在影响消费者可记帐的帐户的事件中的信息的类型。事件数据结构200可包括唯一事件标识符201,该唯一事件标识符可能跨所有事件是唯一的,或者至少跨进行重复检查的事件子集是唯一的。将重复检查的描述延迟到本说明书中参考图6和7的部分。事件数据结构200还可包括这样的信息,诸如帐户标识符202、顾客标识符203、提供者标识符204、事件时间205、事件描述206和辅助信息207。基于顾客和提供者之间输入的合同义务来制定帐户。根据典型的合同,顾客有义务支付某一金额来交换提供者提供特定商品或服务。随着要支付的义务累积,更改帐户结余来增量式地反映该义务。帐户结余还可能按合同规定根据合同以及根据非合同的商业惯例而受到例如滞纳金、退款、存款、折扣等的影响。帐户标识符202可以是由顾客和提供者识别的帐户标识符,或者可以是由此处描述的记帐系统识别的某一其他标识符。顾客标识符203标识帐户的顾客。然而,事件本身不必包含顾客标识符203,因为它稍后可以基于例如帐户标识符202来推断。提供者标识符204标识商品或服务的提供者。再一次,事件本身不必包含提供者标识符204,因为它稍后可以基于例如帐户标识符202来推断。事件时间205可以指定构成事件的基础的动作发生的时间,和/或生成事件的时间。事件的时间可能对记帐具有影响。例如,在特定时刻进行的电话呼叫取决于进行该呼叫的时间而可能较昂贵或较便宜。事件时间还可以帮助如下所述地对事件进行定序。事件描述可以描述动作描述206,动作描述206描述了构成事件的基础并且可能对记帐具有某些影响的动作。例如,电子邮件服务可能对每一接收到的电子邮件收取特定费用。电话服务可能对每一接收到的呼叫收取特定费用。因特网服务可能对每分钟的在线活动,或对通过因特网服务通信的每一单位数据收取特定费用。可能对记帐具有影响的任何动作因此可以生成事件。对于持续一段时间(例如,电话呼叫)的动作,可能只在动作完成之后才生成事件并可指定持续时间。例如,动作描述可以指示“电话呼叫分钟”。事件还可以在持续时间开始时以及持续时间结束时生成,将事件进行相关并一起解释从而可以从中推断持续时间。持续时间还可以基于诸如在存储服务的情况下对某一数量的存储的消耗之类的事件。辅助信息207可包括在确定相对应的帐户的记帐信息时可能有帮助的任何其他
fn息ο图3示出其中可以生成事件并将事件递送到参考图4和5来说明和描述的记帐系统的环境300。此处描述的原理不限于用于生成记帐事件并将该记帐事件递送到记帐系统的任何特定环境300。然而,环境300只是作为一个示例来提供的。环境300包括仅作为示例示出的两个服务301和302。此处提供的原理可以在只有一个服务或者有许多服务的情况下操作。作为示例,服务301可能是基于IP的电话服务。 服务302可能是电子邮件服务。然而,此处提供的原理不限于服务的类型。例如,各原理可以与股票和共有基金经纪服务、房地产交易服务、因特网访问服务、在线存储服务、公共事业提供者或提供商品或服务的任何其他服务一起操作。服务可具有物理组件(例如,景观设计者服务可对顾客的房产执行景观设计),但所示服务表示服务的电子表示(例如,在完成草坪服务之后,草坪服务提供者可将所执行的服务报告给软件模块)。每一服务可具有监视可能影响记帐的特定活动的服务的一个或多个使用源。每一使用源可独立于彼此操作。例如,服务301包括单个使用源311,而服务302包括多个使用源321、322和323。对于可被分配给特定服务的使用源的数量没有限制。该数量将取决于设计者的偏好以及服务的本质。例如,如果服务301是基于IP的电话服务,则可能只使用仅仅跟踪电话呼叫的一个使用源。如果服务302是电子邮件服务,则可能存在可以影响记帐的多个活动。例如,服务321可以跟踪何时发送电子邮件,服务322可以跟踪何时接收电子邮件,而服务323可以跟踪何时传送特定单位大小的数据。这在记帐取决于接收到的电子邮件数量、发送的电子邮件数量以及传送的总数据的情形中可能是有帮助的。当每一使用源311、321、322和323检测到其被配置成要检测的活动时,使用源生成并分派描述该活动的事件。另选地或另外地,使用源可以在生成事件时缓冲事件从而可以批量地分派事件。记帐系统可以对由于批量处理而导致延迟的事件的数量或时间段施加约束。该事件的结构和内容的示例已经参考图2进行了描述。事件通过网络330来分派, 网络330的一个示例是因特网,在其上在图5的各个路由组件501、502和503处接收事件。 在一个实施例中,路由组件501、502、503各自是同一路由组件类的实例。图4示出用于处理事件的方法400的流程图。该方法的某些动作可以由图5的路由系统(在标题“路由器”下列出)执行,注意“路由系统”可以是分布式的并且包括多个独立的路由器。某些动作可由图5的路由器501、502和503执行。某些动作可由图5的聚集器530(在标题“聚集器”下列出)执行。可以对每一接收到的事件执行方法400,并且将参考图3的事件处理环境500来描述。参考图4和5,并且如先前所述的,在路由组件501、502或503中的一个处接收事件(动作411)。虽然可能存在单个路由组件,但示出了多个路由组件因为正被接收且要被路由的事件可能是非常大量的。路由组件501、502、503可能是无状态的,并且可以例如确认到各个使用源的事件的接收。在一个实施例中,可以从使用源将多个事件作为集体消息来分派,每一事件可能与不同帐户相关联。在该情况下,路由组件也从消息中提取每一事件并且通过全网网络510来分派每一个单独的事件。每一个路由器在接收事件时将它们划分到多个信道520中的一个中(动作412)。 换言之,路由器决定将哪个事件分派到哪个信道。此处描述的原理不限于划分事件的准则。 然而,可以如何对其进行划分的一个示例是按照地理位置。例如,信道可以负责其底层触发动作在某些地理边界内发生的所有事件。或者,信道可以负责其顾客或提供者位于特定地理边界内的所有事件。在一个实施例中,事件按照试图跨各个信道应用负载的均勻分布的方式来划分。然而,一种用于划分的机制在与事件相关联的帐户标识符的基础上执行划分。例如,信道520中的每一个可以负责处理其帐户标识符落在相应范围内的所有事件。因此,在接收到事件之后,路由器510可以读取帐户标识符,标识标识符落在哪个范围内,标识要处理该事件的相应信道,并将该事件分派给该信道以供进一步处理。参考图5,信道520包括七个信道521到527。然而,此处提供的原理不限于信道的数量。可能存在少至一个,但也可能多至上千或甚至上百万个信道,这取决于计算系统能够处理多少以及从设计角度而言多少最有意义。在一个实施例中,使用较多的数量来允许跨物理硬件重新分配负载的更大的灵活性。在该示例中,假设信道523接收事件。回头参考图4,信道检查该事件不是由该信道接收的另一事件的副本(动作421)。如果它是副本,则丢弃该事件或至少不再进一步处理该事件。可能记录副本从而使得可以评估去重复过程的有效性或者检测系统其他部分的故障,但不准许重复事件影响记帐因为这么做将导致顾客可能会为同一动作而被双倍记帐。此处描述的原理不限于执行去重复的方式。在一个实施例中,去重复通过对照已经接收的事件标识符列表来检查事件标识符来执行。为了保持该列表不会增长地过大,事件标识符列表可能按某种时间界限基础(诸如每天)来保存,并且当该列表变成特定年龄 (可能一周大小)时,丢弃该列表或不再进一步检查该列表。存在将在接收到原始事件之后很短的时间内接收任何副本的假定。重复消息收发的一个主要原因可能是事件的发送者由于瞬时网络问题而未接收到确认的情况下重新发送该事件。但事件的接收者可能的确接收到了事件,而仅仅是在将确认传回事件发送者时丢失了确认。一旦执行了去重复,则信道将只处理原始事件而不处理副本。在这个阶段,信道可以用信道专用序列号来对事件定序(动作42 。信道还可以将其信道标识符追加到事件数据结构从而使得随后处理消息的组件(诸如以下进一步描述的聚集器)可以理解什么信道处理了该事件以及该信道专用序列号与哪个信道相关。随后将事件分派到该信道的相应的
聚集器。参考图5,事件处理环境500包括聚集器530。在所示情况下,有两个聚集器531 和532。然而,此处描述的原理不限于聚集器的数量。聚集器的目的是聚集从事件接收的每一帐户的记帐数据,并且以较佳的形式呈现所聚集的数据以供记帐算法消费,该记帐算法确定所聚集的数据应该如何影响每一帐户的帐户结余。在该实施例中,将一个或多个信道分配给每一聚集器。例如,信道521和522将它们的事件提供给聚集器531,而信道523到 527将它们的事件提供给聚集器532。信道520和聚集器530虽然执行不同的功能,但可以 (但不必)在同一物理或虚拟机上实现。然而在接收到事件时,聚集器可以进行另一次去重复,因为可能存在在信道和聚集器之间可能造成副本的重新生成的情况。例如,在信道和聚集器之间可能存在可靠的消息收发。在该情况下,如果信道或信道和聚集器之间的另一中介未接收到确认,则它可能生成副本,即使可能已经发送了确认。然而,假定将信道专用序列号分配给了事件,则去重复是较高效的任务。因此,聚集器通过跟踪相应信道的序列号中的水印来执行去重复(动作431),水印按照与序列号分配相同的移动方向来移动。例如,信道可以按升序来分配序列号,在这种情况下水印只会增加,并且低于高水印的任何接收到的事件都可被假定为副本。例如,如果信道将序列号15 分配给在先事件,则信道会将序列号16分配给后续事件。聚集器接收事件并跟踪每一信道的序列号的高水印(在序列号按升序来分配的情况下)。当聚集器接收到后续事件时,聚集器读取该事件的信道专用序列号,读取处理该事件的信道的信道标识符,并且将该序列号对照该信道的信道专用水印进行比较。如果信道专用序列号低于高水印,则该事件被作为副本来对待,并且不将其考虑在聚集和记帐过程之内。如果信道专用序列号高于高水印,并且信道专用序列只比该信道的前一高水印高 1,则信道的高水印递增1,并且该事件作为原始事件而非另一事件的副本来接受。如果信道专用序列号高于高水印,并且信道专用序列号高于该信道的前一高水印超过1,则处理可以取决于那些居间事件对记帐过程有多重要。例如,假设在接收到信道专用序列号为18的事件时,信道专用高水印是15。这将意味着尚未接收到被分配信道专用序列号16和17的两个事件。如果这些事件对记帐过程是重要的,则可能延迟对序列号为18 的事件的处理片刻以期待居间的两个事件。如果这些事件被预期为对记帐过程不重要,则可能将高水印调整至18,在接收到其他居间事件(具有序列号16和17)时,那些事件将作为假定副本被丢弃,即使它们实际上不是聚集器所接收的另一事件的副本。如果信道向事件分配降序序列号或任何其他的标识符排序,则可以执行类似的过程。例如,在降序序列号排序的情况下,对照低水印来比较信道专用序列号,该水印在从信道接收到新的事件时向下调整。一旦聚集器确信所接收的事件不是另一先前接收的事件的副本,则聚集器聚集从信道接收的事件(动作43幻。聚集涉及接收帐户的多个事件,并且将多个事件解释成所制定的聚集数据表示了多个事件的评估结果。经聚集的数据随后可以更容易地被记帐算法消费。作为示例,聚集器可以对来自给定帐户的多个事件的参数求和。例如,聚集器可以每周对在主要呼叫时间段期间发生的所有电话呼叫分钟数进行求和,并且分开地对在主要呼叫时间段之外发生的所有电话呼叫分钟数进行求和。随后这两个和可作为经聚集的数据每周呈现给记帐算法。其它类型的求和可涉及从指示发送了电子邮件或指示接收到电子邮件的事件中对发送和接收的电子邮件的数量的计数。聚集可不仅仅涉及递增或求和,还可以应用对记帐过程有用的任何类型的聚集。 例如,聚集器可以对来自帐户的多个事件的参数求平均,或者可能从帐户的多个事件寻找参数的最小值或最大值。记帐功能随后可以基于经聚集的数据来计算帐户的账单。例如, 对所使用的某一数量的单位可能存在统一费用安排,可能之后对每一所使用的单位收取费用。记帐功能还可以将所提供的折扣考虑在内,其中折扣取决于满足一个或多个先决条件。 还可以有将用于给定时间段的最大单位数量等考虑在内的功能。在一替换实施例中,在信道不必在先前执行基于信道的定序的情况下在聚集器处执行去重复。在该情况下,聚集器将不依赖任何基于信道的定序,而改为可以按不依赖任何这样的定序的方式来执行去重复。在另一实施例中,可能存在执行定序的某些信道和不执行定序的某些信道。在该情况下,聚集器可以选择在基于信道的定序的基础上(如果可用) 执行去重复,或者在不依赖定序的情况下(当这样的定序不可用时)执行去重复。现在将进一步描述用于在缺少信道专用序列号的情况下执行去重复的示例过程。 这样的去重复可以在信道处或者可能在聚集器处执行。在一个实施例中,使用布隆(Bloom) 过滤器来确定事件是否是另一已经接收的事件的副本。虽然出于该目的可使用单个布隆过滤器,但也可将布隆过滤器用于给定的时间段。例如,假设对照在过去的七天里接收到的先前事件来检查事件。在该情况下,每天建立布隆过滤器可能更高效。那么,随着时间的推移
10布隆过滤器不再相关,因为过滤器对应于落在窗口外部的特定日子(例如,不在最近的7天之内)接收到的事件,可以简单地丢弃该布隆过滤器。图6示出包括传入事件604、布隆过滤器610、布隆过滤器检查器611和布隆过滤器更新器612的布隆过滤器环境600。如先前所述,传入事件601将包括按至少在信道内是唯一的,并且优选地是全局唯一的方式来唯一地标识事件的唯一标识符。最初,在特定日子开始的时候建立布隆过滤器时,布隆过滤器仅仅是所有位被重置为二进制零的位序列。在接收到每一事件(诸如事件601)时,事件标识符被输入到布隆过滤器检查器中的一个或多个散列算法。结果将是应该在布隆过滤器中被置为1的相应的位地址集。布隆过滤器检查器611验证布隆过滤器610中相应的位是否已经被置为1。如果未将所有相应的位置为1,则这意味着布隆过滤器更新器612未处理过带有相同唯一标识符的事件。则该事件可以肯定地被确定为不是在先事件的副本。在该情况下, 布隆过滤器更新器612将布隆过滤器中相应的位设为1,表明接收到该事件。另一方面,如果所有相应的位都被置为1,则这意味着布隆过滤器更新器612已经处理过带有相同唯一标识符的事件。然而,这无法确凿地确定。毕竟,有可能是带有不同的唯一标识符的事件组合恰巧将相应的位都置为1而非带有相同唯一标识符的在先事件使得相应的位被置为1。在这一阶段,如果所有的相应的位都被置为1,则去重复过程可以执行多个过程, 该多个过程可能取决于不抛弃非重复事件的重要性。例如,对于对记帐具有较少影响的事件(例如,几便士的订单),可能不值得执行进一步的处理来确凿地确定该事件是副本。相反,布隆过滤器检查可能足以(如果相应的位被置为1)在合理的可能性内估计该事件可能是另一事件的副本,而这足以保证抛弃该事件。然而对于更有价值的事件,可能要执行进一步的处理来作出关于该事件是否是另一事件的副本的更佳的估计。例如,可能在此时,如果布隆过滤器提供了相应的位的肯定匹配,则去重复机制实际上对照在给定时间段内(例如,可能七天)信道已经接收的在先事件的唯一标识符来比较当前事件的唯一标识符。虽然去重复机制可以按随机的方式对照在先标识符来执行这种检查,但去重复通过使这种检查过程具有提高可以更快找到标识符匹配的机会的某种结构来受益。图7示出使用时间排序的标识符索引710的计算环境700。时间排序的标识符索引710首先按时间其次按标识符来对事件排序。当重复事件具有在时间上邻近地接收的趋势时,时间排序的标识符索引710的使用可以更快地得到标识符的匹配。例如,重复事件可能在接收到原始事件的几秒之后接收。这可能是由于发送事件的消息收发信道中的可靠性机制而引起的。如果事件的源或信道的中间节点未接收到信道中下一节点的接收确认,则该节点可以重新发送事件的副本直到接收到确认。有时候,这种重新发送可能只在几秒或几分之一秒的时间内发生。因此,可能在原始事件的几秒内接收到重复事件。在时间排序索引环境700中,在接收到事件701时,检查该事件的日期/时间字段。很可能,事件701是最近的事件,而来自索引710的对应于该时间的事件标识符的部分 711可能已经在存储器中。如果否,则可以将时间排序的索引710中对应于该时间的部分 710加载到存储器中。如果事件是重复事件,则很有可能在对应于该时间的部分711中找到标识符。如果否,则可以加载下一个最近的部分,以此类推。因为索引710是时间排序的,所以通过简单地按顺序一次加载一个索引部分直到找到副本可能更容易实现。因此,通过简单地随机检查在过去七天内接收到的所有事件的事件标识符的方法可能更快地找到事件副本。如果事件不是副本,即使布隆过滤器返回了错误的肯定匹配,则该机制将导致检查全部七天的时间排序的索引。给定事件的价值,这可能太过耗时了。因此,检查时间排序的索引所花费的时间量可取决于事件的价值。例如,对于较少价值的某些事件,即使有理由进行布隆过滤器以外的进一步检查,该事件可能仍然没有足够的价值来有理由检查超过一个小时的时间排序的索引。较高价值的事件可以有理由检查一天或两天的时间排序的索引。最大价值的事件可以有理由检查所有七天的可用的时间排序的索引。如果在七天的完整检查之后在时间排序的索引中什么都没找到,则该事件可被确定为不是副本,并且被进一步处理。如果在时间排序的索引的较短时间段的检查之后在时间排序的索引中什么都没找到,则该事件可被假定是副本(因为没有对在先原始事件的可能接收时间的所有实质的可能性执行完整的检查)。可以使用对时间排序的索引的使用来对布隆过滤器得到肯定的副本估计进行进一步的检查来寻找副本。这得到对时间排序的索引的较少次数的读取,因为1)布隆过滤器的使用将消除对大部分(可能是绝大多数)接收到的事件使用时间排序的索引的需要,以及2)即使当布隆过滤器指示重复的肯定判断时,时间排序的索引的使用可能使用已经在存储器中的索引部分而很可能导致较早地找到副本。因此,在布隆过滤器检查之后使用时间排序的索引提升了读操作的效率。为提升写操作的效率,可以批量处理布隆过滤器的更新和时间排序的索引的更新。例如,对于布隆过滤器的更新,如果事件被确定为不是另一事件的副本,代替使用相应的位来立即更新布隆过滤器,而改为等待其他事件的相应的位。一旦多个事件(例如,一百个)的相应的位被排队,则该系统随后可保存布隆过滤器中的位变更。为了提供针对非预期系统故障的某种安全,该系统可以使用版本化从而能够区分响应于已经保存在布隆过滤器中的在先事件而被设置的那些位以及响应于尚未保存在布隆过滤器中的在先事件而被设置的那些位之间的区别。因此,在故障之后重启系统时,可以用相应的位来重新填充队列。在使用队列的情况下,不仅要检查布隆过滤器的保存版本,还要检查排队要被设置的相应的位来确定是否设置了该事件的所有相应的位。对于时间排序的索引,再一次,多个时间排序的标识符写操作可被排队。一旦队列达到某一大小(例如,在一百个标识符写操作被排队之后),该队列可被写入时间排序的索引从而保存事件接收。再一次,可以使用版本化来在系统关闭之后确定哪些时间排序的标识符已经保存在时间排序的索引中以及哪些时间排序的标识符正等待被保存。通过这样的写操作的批量操作,可以极大地降低写操作的数量从而提升系统效率。也可批量处理删除操作。例如,可能如果存在每日布隆过滤器,则在该布隆过滤器变为陈旧(例如,变为大于七天)时的一天期间的某一时间点处删除该布隆过滤器。同样,时间排序的索引可以按时间来划分,从而使得可以在一个批量中容易地删除较老的划分而非一次删除一个标识符。读操作、写操作和删除操作的减少对于缩放去重复从而能够处理大量的事件是重要的。布隆过滤器的使用同样是有益处的,因为它将大量的事件从需要进行进一步的去重复中移除,因为大部分事件将快速地被确定为不是另一事件的副本。在某些情况下,可能布隆过滤器检查是所作的所有事情,从而使得通过该布隆过滤器检查被肯定地估计为副本的任何事件(即使是错误的肯定估计)将作为副本来对待。这将导致某种可能的丢失记帐的几率,但将消除双倍记帐的几率。该去重复可以在相应的信道中执行,或者在替换实施例中可以在聚集时在聚集器处执行。因此,描述了一种用于处理对记帐具有影响的事件的高效机制。本发明可被具体化为其他具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变被权利要求书的范围所涵盖。
权利要求
1.一种计算机实现的用于处理多个事件(200)的方法(400),所述方法包括计算系统(100)接收(411)事件消息(200)形式的多个事件的动作,至少某些所述事件中的每一个影响多个帐户中的一个或多个;所述计算系统将所述多个事件中的每一个划分(412)到多个信道(520)中的动作,所述多个信道中的每一个接收所述多个事件的子集;以及对于所述多个信道中的至少一个,以及对于由相应信道所接收的事件子集中的至少某些事件的每一个,执行以下动作检查(421)所述事件不是由相应信道所接收的另一事件的副本的动作;以及在所述检查动作之后,将信道专用序列号分配(422)给所述事件的动作。
2.如权利要求1所述的计算机实现的方法,其特征在于,还包括对于所述多个信道中的至少一个执行以下动作聚集器聚集从相应信道接收的经排序的事件的动作。
3.如权利要求2所述的计算机实现的方法,其特征在于,所述聚集器还通过跟踪所述相应信道的序列号上的水印来执行后续去重复,所述水印按照与所述序列号相同的移动方向来移动,其中如果从所述相应信道接收带有水印的在与所述移动方向相反的一侧的序列号的经排序的事件,则所述经排序的事件被确定为副本并且被丢弃。
4.如权利要求3所述的计算机实现的方法,其特征在于,如果从所述相应信道接收带有在所述移动方向上比所述水印的一侧大超过一个序列号的序列号的经排序的事件,从而使得在所述水印和所述经排序的事件的序列号之间存在至少一个居间序列号,则所述水印被调整为所述经排序的事件从而使得如果接收到带有所述居间序列号的事件,则将所述事件作为副本来对待,即使带有所述居间序列号的事件尚未被接收。
5.如权利要求3所述的计算机实现的方法,其特征在于,如果从所述相应信道接收带有在所述移动方向上比所述水印的一侧大超过一个序列号的序列号的所述经排序的事件, 从而使得在所述水印和所述经排序的事件的序列号之间存在至少一个居间序列号,则保存所述事件直到接收到与所述至少一个居间序列号相对应的一个或多个事件。
6.如权利要求3所述的计算机实现的方法,其特征在于,所述移动方向是向上的方向从而使得所述水印是高水印。
7.如权利要求1所述的计算机实现的方法,其特征在于,所述划分事件的动作基于与所述事件相关联的帐户标识符来确定。
8.如权利要求1所述的计算机实现的方法,其特征在于,所述划分事件的动作基于所述事件发生的地理位置来确定,地理位置与要为所述事件付费的消费者相关联,或者地理位置与要向其对所述事件付费的提供者相关联。
9.如权利要求1所述的计算机实现的方法,其特征在于,所述多个事件中的每一个具有唯一标识符,其中检查所述事件不是另一事件的副本的动作包括将所述事件的唯一标识符与先前接收的事件的唯一标识符进行比较的动作。
10.一种包括其上含有计算机可执行指令的一个或多个计算机可读介质(104)的计算机程序产品,当所述指令由计算系统(100)的一个或多个处理器(102)执行时,使所述计算系统执行一种用于处理以事件消息的形式接收的多个事件(200)的方法(400),至少某些所述事件中的每一个影响多个帐户中的一个或多个,所述方法包括所述计算系统(100)将至少某些所接收的多个事件中的每一个划分(412)到多个信道 (520)中的动作,所述多个信道中的每一个接收所述多个事件的子集;以及对于所述多个信道中的至少一个,以及对于由相应信道所接收的事件子集中的至少某些事件的每一个,执行以下动作检查(421)所述事件不是由相应信道所接收的另一事件的副本的动作;以及在所述检查动作之后,将信道专用序列号分配(422)给所述事件的动作。
全文摘要
描述了带有去重复和排序的可缩放记帐。对影响一个或多个帐户的记帐事件的可缩放处理。计算系统可能按帐户标识符将所接收的事件划分到多个信道中。信道接收事件,并执行事件的去重复来帮助降低双倍记帐的风险。信道然后向事件分配信道专用序列号。随后可能按帐户来聚集经排序的事件以允许更容易的账单计算。
文档编号G06Q20/00GK102254260SQ20111014409
公开日2011年11月23日 申请日期2011年5月20日 优先权日2010年5月21日
发明者M·C·塞策, M·E·皮尔森 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1