在线计算数据处理方法及系统
技术领域
本公开通常涉及数据处理领域,更具体地,涉及用于在线计算数据处理的系统及方法。
背景技术
在互联网科技领域,所应用的业务场景非常多且复杂,并且用户群体庞大,从而导致会产生海量数据,并且需要对海量数据进行实时计算(也称为在线计算)处理,以向用户提供实时响应。
在大数据计算发展过程中提出了很多大数据计算框架,比如面向批计算的Hadoop,面向流计算的Storm,以及能够实现批流计算一体化的Flink等。然而,现有大数据计算框架所解决的都是对异步数据进行计算的问题,它们所对接的数据源基本上都是数据库或者是消息队列等,并不具备通过同步远程过程调用(Remote Procedure Call,RPC)请求进行在线计算的能力。因此,需要提供一种能够实现在线计算的在线计算框架。
对于在线计算框架而言,最基本的能力是数据写入和数据查询,如何提供一种能够确保数据写入和数据查询的正确性以及高效性的在线计算框架成为亟待解决的问题。
发明内容
鉴于上述,本公开提供了一种用于在线计算数据处理的方法、装置及系统。利用该方法、装置及系统,能够确保在线计算数据写入和在线计算数据查询的正确性和高效性。
根据本公开的一个方面,提供了一种用于在线计算数据写入处理的方法,包括:在获取到针对至少一个在线计算数据的数据写入请求后,基于所述至少一个在线计算数据的时间戳信息,按照给定时间粒度来对所述至少一个在线计算数据进行聚类,每个数据聚类对应于数据库的一个数据行,所述数据库具有行锁能力;以及采用乐观锁机制来将各个数据聚类的在线计算数据写入到所述数据库的对应数据行中。
可选地,在上述方面的一个示例中,每个数据行具有版本号信息,采用乐观锁机制来将各个数据聚类写入到所述数据库的对应数据行中包括:针对每个数据聚类,获取对应数据行的第一版本号信息;对该数据聚类中的在线计算数据进行实时汇总计算;获取对应数据行的第二版本号信息;以及在所述第一版本号信息与所述第二版本号信息一致时,将该数据聚类的经过实时汇总计算后的在线计算数据写入到所述数据库的对应数据行中,其中,所述第一版本号信息是在进行实时汇总计算之前获取的版本号信息,以及所述第二版本号信息是在进行实时汇总计算之后获取的版本号信息。
可选地,在上述方面的一个示例中,所述给定时间粒度是基于在线计算的应用场景确定的。
可选地,在上述方面的一个示例中,所述给定时间粒度包括下述中的至少一种:小时粒度,日粒度,周粒度、月粒度和年粒度。
可选地,在上述方面的一个示例中,所述数据库包括至少一个数据表,以及所述至少一个数据表中的各个数据表对应于不同的给定时间粒度,其中,采用乐观锁机制来将各个数据聚类的在线计算数据写入到所述数据库的对应数据行中包括:采用乐观锁机制来将各个数据聚类的在线计算数据写入到所述数据库的对应数据表的对应数据行中。
可选地,在上述方面的一个示例中,所述数据库是按照列式存储方式来进行存储的。
可选地,在上述方面的一个示例中,所述在线计算数据具有唯一数据标识信息,以及基于所述至少一个在线计算数据的时间戳信息,按照给定时间粒度来对所述至少一个在线计算数据进行聚类包括:基于所述至少一个在线计算数据的时间戳信息和唯一数据标识信息,按照给定时间粒度来对所述至少一个在线计算数据进行聚类。
可选地,在上述方面的一个示例中,所述数据库包括下述数据中的一种数据库:Hbase数据库、OceanBase数据库、Vertica数据库和Greenplum数据库。
根据本公开的另一方面,提供一种用于在线计算数据查询处理的方法,包括:在获取到数据查询请求后,按照给定时间粒度对所述数据查询请求中的指定查询时间跨度进行解析,以确定数据库的查询数据行;以及从所述数据库中读取所确定出的查询数据行内的在线计算数据,其中,所述数据库具有行锁能力,并且所述数据库中的各个数据行的数据是按照上述用于在线计算数据写入处理的方法写入的。
可选地,在上述方面的一个示例中,所述给定时间粒度包括下述中的至少一种:小时粒度,日粒度,周粒度、月粒度和年粒度,所述数据库包括至少一个数据表,以及所述至少一个数据表中的各个数据表对应于不同的给定时间粒度,其中,按照给定时间粒度对所述数据查询请求中的指定查询时间跨度进行解析,以确定数据库的查询数据行包括:按照所述给定时间粒度来对所述指定查询时间跨度进行解析,以确定所述数据库的查询数据表以及对应的查询数据行。
可选地,在上述方面的一个示例中,所述数据查询请求包括目标查询字段,所述方法还可以包括:基于所述目标查询字段来对所读取的在线计算数据进行整合处理,以得到目标查询数据。
根据本公开的另一方面,提供一种用于在线计算数据写入处理的装置,包括:数据聚类单元,被配置为在获取到针对至少一个在线计算数据的数据写入请求后,基于所述至少一个在线计算数据的时间戳信息,按照给定时间粒度来对所述至少一个在线计算数据进行聚类,每个数据聚类对应于数据库的一个数据行,所述数据库具有行锁能力;以及数据写入单元,被配置为采用乐观锁机制来将各个数据聚类的在线计算数据写入到所述数据库的对应数据行中。
可选地,在上述方面的一个示例中,每个数据行具有版本号信息,所述数据写入单元包括:数据获取模块,被配置为获取各个数据聚类的对应数据行在实时汇总计算之前的第一版本号信息以及对应的在线计算数据,以及获取各个数据聚类的对应数据行在实时汇总计算之后的第二版本号信息;实时计算模块,被配置为对各个数据聚类中的在线计算数据进行实时汇总计算;一致性确认模块,被配置为针对每个数据聚类,确认所述第一版本号信息与所述第二版本号信息是否一致;以及数据写入模块,被配置为针对每个数据聚类,在所述第一版本号信息与所述第二版本号信息一致时,将该数据聚类的经过实时汇总计算后的在线计算数据写入到所述数据库的对应数据行中。
可选地,在上述方面的一个示例中,所述给定时间粒度是基于在线计算的应用场景确定的。
可选地,在上述方面的一个示例中,所述给定时间粒度包括下述中的至少一种:小时粒度,日粒度,周粒度、月粒度和年粒度,所述数据库包括至少一个数据表,以及所述至少一个数据表中的各个数据表对应于不同的给定时间粒度,其中,所述数据写入单元被配置为:采用乐观锁机制来将各个数据聚类的在线计算数据写入到所述数据库的对应数据表的对应数据行中。
根据本公开的另一方面,提供一种用于在线计算数据查询处理的装置,包括:查询请求解析单元,被配置为在获取到数据查询请求后,对所述数据查询请求中的指定查询时间跨度进行解析,以确定数据库的查询数据行;以及查询数据读取单元,被配置为从所述数据库中读取所确定出的查询数据行内的在线计算数据,其中,所述数据库具有行锁能力,并且所述数据库中的各个数据行的数据是上述用于在线计算数据写入处理的方法写入的。
所述数据库包括至少一个数据表,以及所述至少一个数据表中的各个数据表对应于不同的给定时间粒度,所述给定时间粒度包括下述中的至少一种:小时粒度,日粒度,周粒度、月粒度和年粒度,其中,所述查询请求解析单元被配置为:按照所述给定时间粒度来对所述指定查询时间跨度进行解析,以确定所述数据库的查询数据表以及对应的查询数据行。
可选地,在上述方面的一个示例中,所述数据查询请求包括目标查询字段,所述装置还可以包括:数据整合单元,被配置为基于所述目标查询字段来对所读取的在线计算数据进行整合处理,以得到目标查询数据。
根据本公开的另一方面,提供一种用于在线计算数据处理的系统,包括:数据库,被配置为对在线计算平台的在线计算数据进行存储,所述数据库具有行锁能力;如上所述的用于在线计算数据写入处理的装置;以及如上所述的用于在线计算数据查询处理的装置。
根据本公开的另一方面,提供一种计算设备,包括:至少一个处理器,以及与所述至少一个处理器耦合的存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如上所述的用于在线计算数据写入处理的方法。
根据本公开的另一方面,提供一种非暂时性机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如上所述的用于在线计算数据写入处理的方法。
根据本公开的另一方面,提供一种计算设备,包括:至少一个处理器,以及与所述至少一个处理器耦合的存储器,所述存储器存储指令,当所述指令被所述至少一个处理器执行时,使得所述至少一个处理器执行如如上所述的用于在线计算数据查询处理的方法。
根据本公开的另一方面,提供一种非暂时性机器可读存储介质,其存储有可执行指令,所述指令当被执行时使得所述机器执行如如上所述的用于在线计算数据查询处理的方法。
附图说明
通过参照下面的附图,可以实现对于本公开内容的本质和优点的进一步理解。在附图中,类似组件或特征可以具有相同的附图标记。
图1示出了根据本公开的实施例的用于在线计算数据处理的系统的方框图;
图2示出了根据本公开的实施例的用于在线计算数据写入处理的方法的流程图;
图3示出了根据本公开的实施例的在线计算数据的一个组成示例的示意图;
图4示出了根据本公开的实施例的小时数据表的一个示例的示意图;
图5示出了根据本公开的实施例的日数据表的一个示例的示意图;
图6示出了根据本公开的实施例的月数据表的一个示例的示意图;
图7示出了图2中的数据写入过程的一个示例的流程图;
图8示出了根据本公开的实施例的用于在线计算数据查询处理的方法的流程图;
图9示出了根据本公开的实施例的用于在线计算数据写入处理的装置的方框图;
图10示出了图9的数据写入单元的一个实现示例的方框图;
图11示出了根据本公开的实施例的用于在线计算数据查询处理的装置的方框图;
图12示出了根据本公开的实施例的用于在线计算数据写入处理的计算设备的方框图;
图13示出了根据本公开的实施例的用于在线计算数据查询处理的计算设备的方框图。
具体实施方式
现在将参考示例实施方式讨论本文描述的主题。应该理解,讨论这些实施方式只是为了使得本领域技术人员能够更好地理解从而实现本文描述的主题,并非是对权利要求书中所阐述的保护范围、适用性或者示例的限制。可以在不脱离本公开内容的保护范围的情况下,对所讨论的元素的功能和排列进行改变。各个示例可以根据需要,省略、替代或者添加各种过程或组件。例如,所描述的方法可以按照与所描述的顺序不同的顺序来执行,以及各个步骤可以被添加、省略或者组合。另外,相对一些示例所描述的特征在其它例子中也可以进行组合。
如本文中使用的,术语“包括”及其变型表示开放的术语,含义是“包括但不限于”。术语“基于”表示“至少部分地基于”。术语“一个实施例”和“一实施例”表示“至少一个实施例”。术语“另一个实施例”表示“至少一个其他实施例”。术语“第一”、“第二”等可以指代不同的或相同的对象。下面可以包括其他的定义,无论是明确的还是隐含的。除非上下文中明确地指明,否则一个术语的定义在整个说明书中是一致的。
在线计算框架对外提供的能力通常包括数据写入和数据查询。在数据写入场景下,RPC请求中的数据会被解析出来参与实时计算,并且在完成计算后对计算结果进行持久化。由于存在并发请求的场景,所以需要数据写入操作和数据查询操作都具备原子性。同时由于存在并发进行数据查询和数据写入,所以需要实现一致性来保证避免出现脏读等问题。此外,在并发写入的场景下,需要实现隔离性来避免写入请求A对写入请求B的计算结果产生影响,从而导致最终计算结果不正确。而且,出于容错的考虑,在线计算框架需要确保在系统崩溃进行重启之后能够继续保证服务,从而需要实现针对计算结果的持久化处理。换言之,在线计算框架需要能够提供事务支持能力,从而可以确保在线计算数据写入处理和在线计算数据查询处理的正确性以及高效性。
事务的概念来自于数据库系统。事务是操作执行的一个逻辑工作单元,是用户定义的一个操作序列,操作序列中的所有操作要么全做,要么全不做,是不可分割的工作单位。事务通常具有四个基本特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
术语“原子性”是指事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像该事务从来没有执行过一样。术语“一致性”是事务不能破坏关系数据的完整性以及业务逻辑上的一致性。术语“隔离性”是指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都具有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。在事务A查看数据更新时,数据所处的状态要么是事务B修改该数据之前的状态,要么是事务B修改该数据之后的状态,事务A不会查看到中间状态的数据。术语“持久性”是指只要事务成功结束,事务所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动系统后还能恢复到事务成功结束时的状态。
在本公开中,提供一种针对在线计算框架所计算出的在线计算数据的处理方案。在该方案中,在进行数据写入操作时,按照给定时间粒度来对待写入数据库的在线计算数据进行聚类,并且使得每个数据聚类与具有行锁能力的数据库的一个数据行对应,然后采用乐观锁机制来将各个数据聚类的在线计算数据写入到对应的数据行,从而可以避免由于实时计算中的并发操作而导致的写入错误。在进行数据查询操作时,通过基于给定时间粒度来对查询时间跨度进行解析以确定数据查询行,然后从数据库中读取数据查询行的在线计算数据,由此可以提升数据查询效率。
根据本公开的实施例的在线计算数据处理方案能够提供事务支持能力,从而可以确保在线计算数据写入处理和在线计算数据查询处理的正确性以及高效性。
下面将结合附图来详细描述根据本公开的实施例的用于在线计算数据处理的方法、装置及系统。
图1示出了根据本公开的实施例的用于在线计算数据处理的系统(下文中称为在线数据处理系统)100的方框图。
如图1所示,在线数据处理系统100包括数据库110、数据写入装置120和数据查询装置130。
数据库110被配置为对在线计算平台的在线计算数据进行存储,所述数据库具有行锁能力。在本公开中,数据库110可以包括下述数据库中的一种:Hbase数据库、OceanBase数据库、Vertica数据库和Greenplum数据库。
数据写入装置120被配置为在获取到针对至少一个在线计算数据的数据写入请求后,基于给定时间粒度来对该至少一个在线计算数据进行数据聚类,每个数据聚类对应于数据库110的一个数据行。然后,数据写入装置120采用乐观锁机制来将每个数据聚类中的在线计算数据写入到数据库110的各个对应数据行中,从而完成数据写入操作。数据写入装置120的具体操作将在下面参考图2-图7进行详细描述。
数据查询单元130被配置为对数据查询请求进行解析以确定数据库110的查询数据行,并且从数据库110中读取所确定出的查询数据行中的数据,从而完成数据查询操作。数据查询单元130的具体操作将在下面参考图8进行详细描述。
图2示出了根据本公开的实施例的用于在线计算数据写入处理的方法的流程图。
如图2所示,在块210,获取针对至少一个在线计算数据的数据写入请求。所述数据写入请求至少包括时间戳信息。此外,所述数据写入请求还可以包括计算主体,目标计算属性和/或计算值。这里,至少一个在线计算数据是由在线计算平台实时计算出的。所述至少一个在线计算数据中的每个在线计算数据至少具有时间戳信息字段。所述时间戳信息字段用于记录该在线计算数据的时间戳信息,比如,数据生成时间等。此外,所述在线计算数据还可以包括更多字段。例如,在一个示例中,所述字段例如可以包括用户ID字段、计算主体ID字段、业务编号字段、计算算子字段、计算值字段、过滤属性字段和校验值字段。用户ID字段用于记录用户身份信息。计算主体ID字段用于记录计算主体身份信息。时间戳信息字段用于记录业务时间信息。业务编号字段用于记录业务编号信息。计算算子字段用于记录在线计算的计算算子信息。计算值字段用于记录在线计算结果信息。过滤属性字段用于记录指示数据过滤的属性值。校验值字段用于记录过滤属性值md5校验值。图3示出了在线计算数据的一个组成示例的示意图。在图3的示例中,计算算子字段记录了一个计算算子,即,求和计算“Sum”。在其他示例中,计算算子字段可以记录多于一个计算算子,由此可以利用多种计算方式来分别得到计算结果。
接着,在块220,基于至少一个在线计算数据的时间戳信息,按照给定时间粒度来对至少一个在线计算数据进行聚类,每个数据聚类对应于数据库的一个数据行。
在本公开中,所述给定时间粒度可以是基于在线计算的应用场景确定的。所述应用场景例如包括花呗月账单、淘宝营销奖励金等。花呗月账单是按月查询的应用场景。淘宝营销奖励金是按天查询的应用场景。在本公开的一个示例中,所述给定时间粒度可以包括下述中的至少一种:小时粒度,日粒度,周粒度、月粒度和年粒度。例如,所述给定时间粒度可以包括上述时间粒度中的一种。相应地,数据库可以具有一个数据表,该数据表中存储与该时间粒度对应的数据聚类中的对应数据。所述给定时间粒度也可以包括上述时间粒度中的两种或者更多种,由此,针对至少一个在线计算数据的数据聚类,可以具有多种基于不同时间粒度聚类成的数据聚类集合。相应地,数据库可以具有两种或者更多种数据表,每个数据表对应于一种时间粒度的数据聚类,并且该数据表中存储与该时间粒度对应的数据聚类中的对应数据。
例如,所述给定时间粒度可以包括小时粒度、日粒度和月粒度。相应地,所述至少一个在线计算数据可以具有三种数据聚类集合,即,基于小时粒度聚类而成的小时数据聚类集合,基于日粒度聚类而成的日数据聚类集合,以及基于月粒度聚类而成的月数据聚类集合。由此,数据库可以具有小时数据表、日数据表和月数据表。小时数据表中的各个数据行与基于小时粒度聚类的数据聚类集合相对应。日数据表中的各个数据行与基于日粒度聚类的数据聚类集合相对应。月数据表中的各个数据行与基于月粒度聚类的数据聚类集合相对应。图4示出了根据本公开的实施例的小时数据表的一个示例的示意图;图5示出了根据本公开的实施例的日数据表的一个示例的示意图;以及图6示出了根据本公开的实施例的月数据表的一个示例的示意图。从图4-6中可以看出,小时数据表中的计算值是对该指定小时内的所有计算值进行求和后得到的计算值。日数据表中的计算值是对该指定日内的所有计算值进行求和后得到的计算值。月数据表中的计算值是对该指定月内的所有计算值进行求和后得到的计算值。
然后,在块230,采用乐观锁机制来将各个数据聚类的在线计算数据写入到数据库的对应数据行中。
图7示出了图2中的数据写入过程的一个示例的流程图。在图7所示的示例中,每个数据行具有版本号信息和时间戳信息,并且图7中所示的数据写入过程是针对一个待写入的数据聚类来描述的。
如图7所示,在块231,针对该待写入的数据聚类,获取数据库的对应数据行的第一版本号信息以及对应的数据值。例如,可以利用该数据聚类的时间戳信息来与数据库的数据行的时间戳信息进行匹配,从而获取所匹配的数据行的版本号信息作为第一版本号信息,并且获取该数据行的对应数据值。
接着,在块232,对该数据聚类中的在线计算数据进行实时汇总计算,同时对所获取的第一版本号信息进行自增处理。例如,将该第一版本号信息增加给定递增值,通常为增加1。即,假设第一版本号为X,则自增处理后的为X+1。然后,在块233,获取对应数据行的第二版本号信息。这里,所述第一版本号信息是在进行实时汇总计算之前获取的版本号信息,以及所述第二版本号信息是在进行实时汇总计算之后获取的版本号信息。
在获取到第二版本号信息后,在块234,判断所获取的第二版本号信息是否与第一版本号信息一致,例如,判断所获取的第二版本号信息是否为X。
如果所述第一版本号信息与所述第二版本号信息一致,则在块235,将该数据聚类的经过实时汇总计算后的在线计算数据写入到所述数据库的对应数据行中,并且将该数据行的版本号更新为自增处理后的版本号,例如,更新为X+1。如果所述第一版本号信息与所述第二版本号信息不一致,则在块236,拒绝将该数据聚类的数据写入到对应的数据行中。
在本公开的一个示例中,如果至少一个所述数据库被基于两种或更多种的时间粒度进行数据聚类,则数据库包括至少一个数据表,并且该至少一个数据表中的各个数据表对应于不同的给定时间粒度。相应地,采用乐观锁机制来将各个数据聚类的在线计算数据写入到所述数据库的对应数据行中可以包括:采用乐观锁机制来将各个数据聚类的在线计算数据写入到数据库的对应数据表的对应数据行中。同样,块231的操作被相应地修改为:针对该待写入的数据聚类,获取数据库的对应数据表的对应数据行的第一版本号信息以及对应的数据值。块235的操作被相应地修改为:将该数据聚类的经过实时汇总计算后的在线计算数据写入到数据库的对应数据表的对应数据行中,并且将该数据行的版本号更新为自增处理后的版本号。
此外,在本公开的一个示例中,所述在线计算数据还可以具有唯一数据标识信息。所述唯一数据标识信息用于标识该在线计算数据的身份信息。所述唯一数据标识信息例如可以是用户标识信息(用户ID)、业务场景标识信息(业务场景ID)等。在这种情况下,基于至少一个在线计算数据的时间戳信息,按照给定时间粒度来对至少一个在线计算数据进行聚类可以包括:基于至少一个在线计算数据的时间戳信息和唯一数据标识信息,按照给定时间粒度来对至少一个在线计算数据进行聚类。
此外,在本公开的一个示例中,数据库110可以是按照列式存储方式来进行存储的。在列式存储方式中,数据库110中的数据行是基于唯一数据标识维度构建的,例如,基于用户维度构建的,同一用户的所有数据都会记录在该数据行中。在这种情况下,如果至少一个所述数据库被基于两种或更多种的时间粒度进行数据聚类,则基于小时粒度形成的小时数据聚类集合、基于日粒度形成的日数据聚类集合以及基于月粒度形成的月数据聚类集合不再以单独数据表的形式存在,而是作为该用户所对应的数据行的不同列存在。在对小时数据聚类集合、日数据聚类集合以及月数据聚类集合进行数据写入(数据更新)时,只需先从数据库中读出该三列,然后在内存进行计算,再将计算之后的结果更新到数据行的相应列中。
下面以Hbase数据库为例来对数据写入处理过程进行说明。
在接收到针对至少一个在线计算数据的数据写入请求后,首先,基于至少一个在线计算数据的时间戳信息,按照给定时间粒度来对至少一个在线计算数据进行聚类,每个数据聚类对应于Hbase数据库的一个数据行。
在执行将每个数据聚类的在线计算数据写入Hbase数据库的对应数据行时,使用CAS(Compare and Set)机制进行并发控制。这里,CAS机制的实现是通过在HBase数据库存储的每个数据行中设置一个版本号(version)列。在针对一个数据聚类执行写入操作之前,先读取HBase数据库中保存的该数据聚类所对应的数据行的version列的当前值(即,第一version值,假定为x)。接着,对该数据聚类的在线计算数据进行实时计算,并且对所获取的第一version值x进行自增处理。
在完成针对数据聚类的实时计算后,调用HBase数据库所提供的原子操作CheckAndPut接口。CheckAndPut接口首先检查HBase数据库中此时保存的Version值(即,第二Version值)是否等于x。如果不等于x,则说明在当前线程工作期间,其它线程对HBase数据库中的该数据行进行了写入操作。这时,如果当前线程继续往HBase数据中写入数据,则会将其它线程的写入结果覆盖,从而导致最终结果的不准确。由此,此时需要当前线程需要放弃写入。如果检查发现HBase数据库中保存的第二Version值等于x,则当前线程将会把对应的数据写入HBase数据库的对应数据行。按照上述方式,可以实现对并发写入的控制,从而实现并发写入层面的隔离性。而且HBase数据库所提供的CheckAndPut操作本身具备原子性,从而数据写入操作的事务原子性也可以得到保证。
图8示出了根据本公开的实施例的用于在线计算数据查询处理的方法的流程图。
如图8所示,在块810,获取到数据查询请求。所述数据查询请求至少具有指定查询时间跨度。所述指定查询时间跨度例如为“2018.10.01 14:00:00-2018.12.02 10:00:00”。
然后,在块820,按照给定时间粒度对数据查询请求中的指定查询时间跨度进行解析,以确定数据库的查询数据行。
例如,在给定时间粒度为单个时间粒度(例如,小时粒度)的情况下,根据该单个时间粒度来对指定查询时间跨度进行时间区间分割,例如,将“2018.10.01 14:00:00-2018.12.02 10:00:00”以小时为单位进行时间区间分割。然后,利用分割后的时间区间信息来与数据库的数据行的时间信息进行匹配,以确定数据库的查询数据行。
在给定时间粒度为两种或更多种时间粒度的情况下,根据该多个时间粒度来对指定查询时间跨度进行时间区间分割。例如,假设给定时间粒度为小时粒度、日粒度和月粒度,则“2018.10.01 14:00:00-2018.12.0210:00:00”会被切割成“2018.10.01 14:00:00-2018.10.01 24:00:00”、“2018.10.02-2018.10.31”、“2018.11-2018.12”、“2018.12.01-2018.12.02”、“2018.12.02 00:00:00-2018.12.02 10:00:00”这几个子时间区间。然后,根据所分割出的子时间区间来在对应的小时数据表、日数据表和月数据表中匹配对应的数据行。
然后,在块830,从数据库中读取所确定出的查询数据行内的在线计算数据。在给定时间粒度为两种或更多种时间粒度的情况下,从数据库中读取所确定出的查询数据行内的在线计算数据可以包括:从数据库中读取所确定出的查询数据表的查询数据行内的在线计算数据。
此外,可选地,所述数据查询请求还可以包括唯一数据标识信息。相应地,按照给定时间粒度对数据查询请求中的指定查询时间跨度进行解析,以确定数据库的查询数据行可以包括:按照给定时间粒度来对数据查询请求中的指定查询时间跨度进行时间区间分割,并且基于时间区间分割结果和唯一数据标识信息来确定数据库的查询数据行。
此外,可选地,所述数据查询请求还可以包括目标查询字段信息。在从数据库中读取所确定出的查询数据行内的在线计算数据后,所述方法还可以包括:基于所述目标查询字段信息来对所读取的在线计算数据进行整合处理,以得到目标查询数据。
下面以Hbase数据库为例来对数据查询处理过程进行说明。
在获取到数据查询请求后,按照给定时间粒度来对数据查询请求中的指定查询时间跨度进行解析,以确定Hbase数据库的查询数据行。在确定出数据库的查询数据行后,使用HBase数据库所提供的Hbase Scan接口来读取HBase数据库的查询数据中的数据。由于Hbase Scan接口操作也是原子性操作,从而数据查询操作也满足事务中的原子性要求。同时由于CheckAndPut操作和Hbase Scan接口操作都是原子性,从而也可以实现数据写入操作和数据查询操作的事务隔离性。
利用根据本公开的实施例的数据写入方法和数据查询方法,通过使用乐观锁机制和具有行锁能力的数据库(例如Hbase数据库)的原子操作(例如,CheckAndPut)实现了事务中的原子性和隔离性要求。同时,在进行数据查询时,通过将查询请求解析成对数据库的多行数据的读取,同时借助数据库(Hbase数据库)的原子操作(例如,Hbase Scan)实现了数据查询的原子性和隔离性。
此外,在根据本公开的实施例的在线计算数据写入方法和在线计算数据查询方法中,通过基于不同时间粒度来对待写入在线计算数据进行聚类,并且将所得到的聚类集合写入到不同的数据库(或者数据表)中来进行存储。随后,在进行在线计算数据查询时,基于查询时间跨度来进行时间区间分割,然后再根据分割后得到的时间子区间去不同时间粒度所对应的数据库(或数据表)中分别进行查询,然后对查询结果进行最终汇总以得到最终查询结果,从而在实现ACID事务支持的同时,还可以满足在线计算关于低延迟和高吞吐的要求。
此外,在根据本公开的实施例的在线计算数据写入方法和在线计算数据查询方法中,通过使用列式存储的方式来将不同时间粒度的聚类集合作为同一数据行的不同列写入到同一数据表中,从而可以消除由于将不同时间粒度的聚类集合写入到不同数据表的数据行中而带来的写入开销。
图9示出了根据本公开的实施例的用于在线计算数据写入处理的装置(下文中称为数据写入装置)120的方框图。如图9所示,数据写入装置120包括写入请求获取单元121、数据聚类单元122和数据写入单元122。
写入请求获取单元121被配置为获取针对至少一个在线计算数据的数据写入请求。这里,至少一个在线计算数据是由在线计算平台实时计算出的。所述至少一个在线计算数据中的每个在线计算数据至少具有时间戳信息字段。所述时间戳信息字段用于记录该在线计算数据的时间戳信息,比如,数据生成时间等。
数据聚类单元122被配置为在获取到针对至少一个在线计算数据的数据写入请求后,基于至少一个在线计算数据的时间戳信息,按照给定时间粒度来对至少一个在线计算数据进行聚类,每个数据聚类对应于数据库的一个数据行,所述数据库具有行锁能力。数据聚类单元122的操作可以参考上面参照图2描述的块220的操作。
在本公开的一个示例中,所述在线计算数据还可以具有唯一数据标识信息。所述唯一数据标识信息用于标识该在线计算数据的身份信息。所述唯一数据标识信息例如可以是用户标识信息(用户ID)、业务场景标识信息(业务场景ID)等。在这种情况下,数据聚类单元122可以被配置为:基于至少一个在线计算数据的时间戳信息和唯一数据标识信息,按照给定时间粒度来对至少一个在线计算数据进行聚类。
数据写入单元123被配置为采用乐观锁机制来将各个数据聚类的在线计算数据写入到数据库110的对应数据行中。数据写入单元123的操作可以参考上面参照图2描述的块230的操作以及参照图3描述的操作。
图10示出了图9中的数据写入单元123的一个实现示例的方框图。在图10所示的示例中,每个数据行具有版本号信息和时间戳信息。如图6所示,数据写入单元123可以包括数据获取模块124、实时计算模块125、一致性确认模块126和数据写入模块127。
数据获取模块124被配置为获取各个数据聚类的对应数据行在实时汇总计算之前的第一版本号信息以及对应的在线计算数据,以及获取各个数据聚类的对应数据行在实时汇总计算之后的第二版本号信息。数据获取模块124的操作可以参考上面参照图7描述的块231和233的操作。
实时计算模块125被配置为对各个数据聚类中的在线计算数据进行实时汇总计算。实时计算模块125的操作可以参考上面参照图7描述的块232的操作。
一致性确认模块126被配置为针对每个数据聚类,确认所述第一版本号信息与所述第二版本号信息是否一致。一致性确认模块126的操作可以参考上面参照图7描述的块234的操作。
数据写入模块127被配置为针对每个数据聚类,在第一版本号信息与第二版本号信息一致时,将该数据聚类的经过实时汇总计算后的在线计算数据写入到数据库的对应数据行中。数据写入模块127的操作可以参考上面参照图7描述的块235的操作。
这里要说明的是,在图9中虽然示出了数据写入装置120包括写入请求获取单元121,但是在其他实施例中,数据写入装置120也可以不包括写入请求获取单元121。
图11示出了根据本公开的实施例的用于在线计算数据查询处理的装置(下文中称为数据查询装置)130的方框图。如图11所示,数据查询装置130包括查询请求获取单元131、查询请求解析单元133和数据读取单元135。
查询请求获取单元131被配置为获取数据查询请求。所述数据查询请求可以至少具有指定查询时间跨度。查询请求获取单元131的操作可以参考上面参照图8描述的块810的操作。
查询请求解析单元133被配置为在获取到数据查询请求后,对数据查询请求中的指定查询时间跨度进行解析,以确定数据库的查询数据行。查询请求解析单元133的操作可以参考上面参照图8描述的块820的操作。
此外,所述数据查询请求还可以包括唯一数据标识信息。相应地,查询请求解析单元133可以被配置为:按照给定时间粒度来对数据查询请求中的指定查询时间跨度进行时间区间分割,并且基于时间区间分割结果和唯一数据标识信息来确定数据库的查询数据行。
查询数据读取单元135被配置为从数据库中读取所确定出的查询数据行内的在线计算数据。查询数据读取单元135的操作可以参考上面参照图8描述的块830的操作。
此外,可选地,所述数据查询请求还可以包括目标查询字段信息。相应地,数据读取装置130还可以包括数据整合单元。所述数据整合单元被配置为在从数据库中读取所确定出的查询数据行内的在线计算数据后,基于所述目标查询字段信息来对所读取的在线计算数据进行整合处理,以得到目标查询数据。
这里要说明的是,在图11中虽然示出了数据查询装置130包括查询请求获取单元131,但是在其他实施例中,数据查询装置130也可以不包括查询请求获取单元131。
如上参照图1到图11,对根据本公开的用于在线计算数据写入/查询处理的方法、装置及系统的实施例进行了描述。上面的数据写入装置和数据查询装置可以采用硬件实现,也可以采用软件或者硬件和软件的组合来实现。
图12示出了根据本公开的实施例的用于实现在线计算数据写入处理的计算设备1200的硬件结构图。如图12所示,计算设备1200可以包括至少一个处理器1210、存储器1220、内存1230和通信接口1240,并且至少一个处理器1210、存储器1220、内存1230和通信接口1240经由总线1260连接在一起。至少一个处理器1210执行在存储器1220中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器1220中存储计算机可执行指令,其当执行时使得至少一个处理器1210:在获取到针对至少一个在线计算数据的数据写入请求后,基于所述至少一个在线计算数据的时间戳信息,按照给定时间粒度来对所述至少一个在线计算数据进行聚类,每个数据聚类对应于数据库的一个数据行,所述数据库具有行锁能力;以及采用乐观锁机制来将各个数据聚类的在线计算数据写入到所述数据库的对应数据行中。
应该理解,在存储器1220中存储的计算机可执行指令当执行时使得至少一个处理器1210进行本公开的各个实施例中以上结合图1-7以及图9-10描述的各种操作和功能。
图13示出了根据本公开的实施例的用于实现在线计算数据查询处理的计算设备1300的硬件结构图。如图13所示,计算设备1300可以包括至少一个处理器1310、存储器1320、内存1330和通信接口1340,并且至少一个处理器1310、存储器1320、内存1330和通信接口1340经由总线1360连接在一起。至少一个处理器1310执行在存储器1320中存储或编码的至少一个计算机可读指令(即,上述以软件形式实现的元素)。
在一个实施例中,在存储器1320中存储计算机可执行指令,其当执行时使得至少一个处理器1310:在获取到数据查询请求后,按照给定时间粒度对所述数据查询请求中的指定查询时间跨度进行解析,以确定数据库的查询数据行;以及从所述数据库中读取所确定出的查询数据行内的在线计算数据,其中,所述数据库具有行锁能力,并且所述数据库中的各个数据行的数据是按照上述用于在线计算数据写入处理的方法写入的。
应该理解,在存储器1320中存储的计算机可执行指令当执行时使得至少一个处理器1310进行本公开的各个实施例中以上结合图1-6、图8以及图11描述的各种操作和功能。
在本公开中,计算设备1200/1300可以包括但不限于:个人计算机、服务器计算机、工作站、桌面型计算机、膝上型计算机、笔记本计算机、移动计算设备、智能电话、平板计算机、蜂窝电话、个人数字助理(PDA)、手持装置、消息收发设备、可佩戴计算设备、消费电子设备等等。
根据一个实施例,提供了一种比如非暂时性机器可读介质的程序产品。非暂时性机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本公开的各个实施例中以上结合图1-11描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
根据一个实施例,提供了一种比如非暂时性机器可读介质的程序产品。非暂时性机器可读介质可以具有指令(即,上述以软件形式实现的元素),该指令当被机器执行时,使得机器执行本公开的各个实施例中以上结合图1-11描述的各种操作和功能。具体地,可以提供配有可读存储介质的系统或者装置,在该可读存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机或处理器读出并执行存储在该可读存储介质中的指令。
在这种情况下,从可读介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此机器可读代码和存储机器可读代码的可读存储介质构成了本发明的一部分。
可读存储介质的实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD-RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上或云上下载程序代码。
本领域技术人员应当理解,上面公开的各个实施例可以在不偏离发明实质的情况下做出各种变形和修改。因此,本发明的保护范围应当由所附的权利要求书来限定。
需要说明的是,上述各流程和各系统结构图中不是所有的步骤和单元都是必须的,可以根据实际的需要忽略某些步骤或单元。各步骤的执行顺序不是固定的,可以根据需要进行确定。上述各实施例中描述的装置结构可以是物理结构,也可以是逻辑结构,即,有些单元可能由同一物理实体实现,或者,有些单元可能分由多个物理实体实现,或者,可以由多个独立设备中的某些部件共同实现。
以上各实施例中,硬件单元或模块可以通过机械方式或电气方式实现。例如,一个硬件单元、模块或处理器可以包括永久性专用的电路或逻辑(如专门的处理器,FPGA或ASIC)来完成相应操作。硬件单元或处理器还可以包括可编程逻辑或电路(如通用处理器或其它可编程处理器),可以由软件进行临时的设置以完成相应操作。具体的实现方式(机械方式、或专用的永久性电路、或者临时设置的电路)可以基于成本和时间上的考虑来确定。
上面结合附图阐述的具体实施方式描述了示例性实施例,但并不表示可以实现的或者落入权利要求书的保护范围的所有实施例。在整个本说明书中使用的术语“示例性”意味着“用作示例、实例或例示”,并不意味着比其它实施例“优选”或“具有优势”。出于提供对所描述技术的理解的目的,具体实施方式包括具体细节。然而,可以在没有这些具体细节的情况下实施这些技术。在一些实例中,为了避免对所描述的实施例的概念造成难以理解,公知的结构和装置以框图形式示出。
本公开内容的上述描述被提供来使得本领域任何普通技术人员能够实现或者使用本公开内容。对于本领域普通技术人员来说,对本公开内容进行的各种修改是显而易见的,并且,也可以在不脱离本公开内容的保护范围的情况下,将本文所定义的一般性原理应用于其它变型。因此,本公开内容并不限于本文所描述的示例和设计,而是与符合本文公开的原理和新颖性特征的最广范围相一致。