数据存储方法及装置与流程

文档序号:12597409阅读:339来源:国知局
数据存储方法及装置与流程
本申请涉及计算机领域,尤其是涉及一种数据存储方法及装置。
背景技术
:在很多应用场景中,都会对用户行为数据进行累积存储。这些用户行为数据可以体现用户的历史操作行为,使用这些用户行为数据可以分析用户行为(例如统计一个用户在一个小时内登录了几次网站、统计一个IP在一天内支付的金额有多少等等),进而提供更优质的服务(例如,判断用户的操作是否存在业务风险等)。目前针对这一需求,主要是通过存储明细流水或存储累积帐的方式实现。然而,这些方式不仅对数据库服务器、网络等性能要求较高,而且响应速度较慢。技术实现要素:本申请的目的在于提供一种数据存储方法及装置,其可在存储数据精度不变的情况下,优化数据库的存储、读取性能。为实现上述申请目的之一,本申请一实施方式提供了一种数据存储方法,所述方法包括:将同一维度的用户行为数据进行每日汇总、每小时汇总后,存储每日汇总数据和每小时汇总数据至第一存储结构中,其中,所述第一存储结构将每小时汇总数据与时间对应的每日汇总数据之间建立关联关系;将与每日汇总数据和每小时汇总数据同一维度的用户行为数据按照每分钟、每秒钟汇总后,存储每分钟汇总数据和每秒钟汇总数据至第二存储结构中,其中,所述第二存储结构将每秒钟汇总数据与时间对应的每分钟汇总数据之间建 立关联关系。作为本申请一实施方式的进一步改进,所述第一存储结构包括多条数据串,每条数据串由时间窗组成,且每条数据串的时间窗分别对应存储一个每日汇总数据及与该每日汇总数据时间对应的一个或多个每小时汇总数据;所述第二存储结构包括多条数据串,每条数据串由多个时间窗组成,且每条数据串的多个时间窗分别对应存储一个每分钟汇总数据及与该每分钟汇总数据时间对应的一个或多个每秒钟汇总数据。作为本申请一实施方式的进一步改进,所述第一存储结构为第一存储表,所述第一存储表的列/行包括一列/行每日汇总数据,以及与每日汇总数据时间对应的多列/行每小时汇总数据;所述第二存储格式为第二存储表,所述第二存储表的列/行包括一列/行每分钟汇总数据,以及与每分钟汇总数据时间对应的多列/行每秒钟汇总数据。作为本申请一实施方式的进一步改进,所述方法还包括:为每一数据串配置一唯一的时间戳。作为本申请一实施方式的进一步改进,所述方法还包括:若某列/行上所有时间窗的存储数值都为0,则不存储该列/行。作为本申请一实施方式的进一步改进,所述方法还包括:当获取到新的用户行为数据时,同步更新与当前时间匹配的每秒钟汇总数据、每分钟汇总数据、每小时汇总数据,以及每日汇总数据。为实现上述申请目的之一,本申请一实施方式提供了一种数据存储装置,所述装置包括:数据存储格式模块,用于将每小时汇总数据与时间对应的每日汇总数据之间建立关联关系形成第一存储结构,以及将每秒钟汇总数据与时间对应的每分钟汇总数据之间建立关联关系形成第二存储结构;数据逻辑存储模块,用于将同一维度的用户行为数据进行每日汇总、每小时汇总后,将每日汇总数据和每小时汇总数据存储至第一存储结构中,以及将与每日汇总数据和每小时汇总数据同一维度的用户行为数据按照每分钟、每秒 钟汇总后,将每分钟汇总数据和每秒钟汇总数据存储至第二存储结构中。作为本申请一实施方式的进一步改进,所述第一存储结构包括多条数据串,每条数据串由时间窗组成,且每条数据串的时间窗可分别对应存储一个每日汇总数据及与该每日汇总数据时间对应的一个或多个每小时汇总数据;所述第二存储结构包括多条数据串,每条数据串由时间窗组成,且每条数据串的时间窗分别对应存储一个每分钟汇总数据及与该每分钟汇总数据时间对应的一个或多个每秒钟汇总数据。作为本申请一实施方式的进一步改进,所述第一存储结构为第一存储表,所述第一存储表的列/行包括一列/行每日汇总数据,以及与每日汇总数据时间对应的多列/行每小时汇总数据;所述第二存储格式为第二存储表,所述第二存储表的列/行包括一列/行每分钟汇总数据,以及与每分钟汇总数据时间对应的多列/行每秒钟汇总数据。作为本申请一实施方式的进一步改进,所述装置还包括:标识模块,用于为每一数据串配置一唯一的时间戳。作为本申请一实施方式的进一步改进,所述数据逻辑存储模块还用于:若某列/行上所有时间窗的存储数值都为0,则不存储该列/行。作为本申请一实施方式的进一步改进,所述装置还包括:更新模块,用于当获取到新的用户行为数据时,驱动第一逻辑存储模块和第二逻辑存储模块同步更新与当前时间匹配的每秒钟汇总数据、每分钟汇总数据、每小时汇总数据,以及每日汇总数据。相对于现有技术,本申请的技术效果在于:通过本申请的数据存储方法及装置,可优化对用户行为数据的存储结构,以在对累积的用户行为数据进行查询/读取/统计时,减少对数据库的访问次数,优化数据库的存储、读取性能,提高响应速度。附图说明图1是本申请一实施方式中数据存储方法的流程图;图2a是本申请一实施方式中第一存储结构示意图;图2b是本申请一实施方案中第二存储结构示意图;图3是本申请一实施方式中数据存储装置的模块图。具体实施方式以下将结合附图所示的具体实施方式对本申请进行详细描述。但这些实施方式并不限制本申请,本领域的普通技术人员根据这些实施方式所做出的结构、方法、或功能上的变换均包含在本申请的保护范围内。对用户行为数据的统计分析,一般是随着业务的变化而变化的,可能随时增加、修改统计的维度、统计的数据量等,因此,普遍使用没有架构的数据库(例如HBase数据库)存储累积的用户行为数据。如图1所示,在本申请一实施方式中,所述数据存储方法,包括:S100、将同一维度的用户行为数据进行每日汇总、每小时汇总后,存储每日汇总数据和每小时汇总数据至第一存储结构中,其中,所述第一存储结构将每小时汇总数据与时间对应的每日汇总数据之间建立关联关系;S200、将与每日汇总数据和每小时汇总数据同一维度的用户行为数据按照每分钟、每秒钟汇总后,存储每分钟汇总数据和每秒钟汇总数据至第二存储结构中,其中,所述第二存储结构将每秒钟汇总数据与时间对应的每分钟汇总数据之间建立关联关系。本实施方式中所谓的同一维度,表示需要累积的用户行为数据所表示的意义相同。例如,所累积的用户行为数据的维度可以是一段时间内登陆网站的数量;也可为一段时间内的支付金额等。以下,将以一段时间内的支付金额这个维度作为示例,对本申请技术方案进行详细说明。在本实施方式中,累积存储的用户行为数据可存储于用户行为数据库(例如HBase数据库)内,其包括第一存储结构和第二存储结构。其中,将每日汇总数据和每小时汇总数据存储到第一存储结构中。将每分钟汇总数据和每秒钟汇总数据存储到第二存储结构中。进一步地,在本实施方案中,所述第一存储结构包括多条数据串,每条数据串由时间窗组成,且每条数据串的时间窗可分别对应存储一个每日汇总数据及与该每日汇总数据时间对应的一个或多个每小时汇总数据;所述第二存储结构包括多条数据串,每条数据串由多个时间窗组成,且每条数据串的多个时间窗可分别对应存储一个每分钟汇总数据及与该每分钟汇总数据时间对应的一个或多个每秒钟汇总数据。参图2a的示意,所述第一存储结构包括3条数据串,每条数据串由D、H0、H1、……H23,一共25个时间窗组成,其中,D表示的时间窗可存储每日汇总数据;H0、H1……H23表示的当日下24个小时(从0点到23点)的时间窗可存储对应的每小时汇总数据。可以理解的是,在一条数据串中,H0、H1……H23时间窗内存储数据的总值,等于D时间窗内存储数据的值。参图2b的示意,所述第二存储结构包括3条数据串,每条数据串由M、S0、S1、……S59,一共61个时间窗组成,其中,M表示的时间窗可存储每分钟汇总数据;S0、S1……S59表示的一分钟下60秒(从0秒到59秒)的时间窗可存储对应的每秒钟汇总数据。可以理解的是,在一条数据串中,S、S1……S59时间窗内存储数据的总值,等于M时间窗内存储数据的值。进一步地,所述方法还包括:为每一数据串配置一唯一的时间戳。在本实施方式中,所述第一存储结构可为第一存储表,所述第一存储表的列包括一列每日汇总数据,以及与每日汇总数据时间对应的多列每小时汇总数据。参图2a所示,所述第一存储表可以rowkey为主体(例如ID信息),第一列数据可为每日汇总数据,接下来24列数据可为每小时汇总数据,当然也可是1~24列数据为每小时汇总数据,第25列数据为每日汇总数据,本领域技术人员可根据惯用手段变化该顺序。另外,为每一数据串配置的唯一时间戳(timestamp,简写ts)可为该数据串当天的日期,以识别该数据串是哪一天的用户行为数据。所述第二存储结构可为第二存储表,所述第二存储表的列包括一列每分钟汇总数据,以及与每分钟汇总数据时间对应的多列每秒钟汇总数据。参图2b所示,所述第二存储表可以rowkey为主体(例如ID信息)+小时(例如相应用户 行为数据发生的时间,精确到小时),第一列数据为每分钟汇总数据,接下来60列数据为每秒钟汇总数据,当然也可是1~60列数据为每秒钟汇总数据,第61列数据为每分钟汇总数据,本领域技术人员可根据惯用手段变化该顺序。另外,为每一数据串配置的唯一时间戳(timestamp,简写ts)可为该数据串当前的分钟时间,以识别该数据串是哪一分钟的用户行为数据。当然,在本实施方式中,还可以将上述的列替换为行,以实现基本相同的第一存储结构和第二存储结构:所述第一存储格式为第一存储表,所述第一存储表的行包括一行每日汇总数据,以及与每日汇总数据时间对应的多行每小时汇总数据;所述第二存储格式为第二存储表,所述第二存储表的行包括一行每分钟汇总数据,以及与每分钟汇总数据时间对应的多行每秒钟汇总数据。具体示意可由图2a、图2b,以及上述对第一/第二存储表列的描述毫无疑义的推导得出,在此不再赘述。进一步地,在本实施方式中,由于第一存储表和第二存储表的列数据是动态的,因此所述方法还包括:若某列/行上所有时间窗的存储数值都为0,则不存储该列/行。由此可以节省很多存储空间。以下通过一具体示例进行说明:假设获取到ID信息为2088xx1的用户在下述时间内分别进行了3次支付:在2015010101:00:01秒支付3元;在2015010101:00:12秒支付5元;在2015010102:32:12秒支付2元。那么,在第一存储格式中存储的数据为:rowkeytimestampDH1H22088xx12015010110元8元2元在第二存储格式中存储的数据为:rowkeytimestampMS1S122088xx1_20150101‐012015010101:00分8元3元5元2088xx1_20150101‐022015010102:32分2元空2元从上述示例中可毫无疑义的发现,因为2015010101:00:01至2015010101:00:12对应的时间窗的存储数值为0,且2015010102:32:00至2015010102:32:12对应的时间窗的存储数值也为0,故不存储S2~S11列。当然,上述示例是通过列的方式存储每日汇总数据、每小时汇总数据、每分钟汇总数据、每秒钟汇总数据,本领域技术人员也可将其用在行的方式存储每日汇总数据、每小时汇总数据、每分钟汇总数据、每秒钟汇总数据中,在此不再赘述。进一步地,在本实施方式中,当获取到新的用户行为数据时,同步更新与当前时间匹配的每秒钟汇总数据、每分钟汇总数据、每小时汇总数据,以及每日汇总数据。仍然以上面的示例继续进行说明:如果ID信息为2088xx1的用户在2015010102:32:12又进行了7元的一笔支付,则需要更新2015010102:32:12的每秒钟汇总数据,2015010102:32的每分钟汇总数据,2015010102时的每小时汇总数据,20150101的每日汇总数据。更新后的数据如下:在第一存储格式中存储的数据为:rowkeytimestampDH1H22088xx12015010117元8元9元在第二存储格式中存储的数据为:rowkeytimestampMS1S122088xx1_20150101‐012015010101:00分8元3元5元2088xx1_20150101-022015010102:32分9元空9元以下将具体说明采用上述方式累积用户行为数据后,对用户行为数据进行 查询的过程:对用户行为数据进行查询时,可以根据查询的时间范围进行划分,并分时间片进行查询获取得到数据。例如,要统计用户2088xx1从2014112512:35:09到2014112815:35:09的支付金额。那么:S1、查询第二存储表,rowkey=2088xx1_20141125-12并且ts为2014112512:35分到2014112512:59分的数据。由此可以计算得到2014112512:35:09至2014112512:59:59的数据。S2、查询第一存储表,rowkey=2088xx1并且ts为20141125到20141128的数据。由此可以计算得到2014112513:00:00到2014112815:00:00的数据。S3、查询第二存储表,rowkey=2088xx1_20141128-15并且ts为2014112815:00分到2014112815:35分的数据。由此可以计算得到2014112815:00:00到2014112815:35:09的数据。将以上三步计算得到的数据汇总,即可获得到用户2088xx1从2014112512:35:09到2014112815:35:09的支付金额。可以理解的是,对于任意时间开始至任意时间结束的数据,只需要最多三次查询用户行为数据库,就可以得到精度到秒累积数据。同时由于将每秒钟汇总数据、每分钟汇总数据与每小时汇总数据、每日汇总数据分开存储,相对于现有技术,查询到的数据量将大大减少,效率有很大提高。另外,对于查询从任意时间开始到当前时间结束的数据,由于当前时间的汇总数据就是当前时间对应的每日汇总数据,因此只需要上述S1、S2步骤,即可查询得到。因此,只需要两次查询用户行为数据库即可得到精度到秒的累积数据。如图3所示,在本申请一实施方式中,所述数据存储装置,包括用户行为数据库20,所述用户行为数据库20包括:数据存储格式模块201,用于将每小时汇总数据与时间对应的每日汇总数据之间建立关联关系形成第一存储结构,以及将每秒钟汇总数据与时间对应的每分钟汇总数据之间建立关联关系形成第二存储结构;数据逻辑存储模块203,用于将同一维度的用户行为数据进行每日汇总、每小时汇总后,将每日汇总数据和每小时汇总数据存储至第一存储结构中,以及将与每日汇总数据和每小时汇总数据同一维度的用户行为数据按照每分钟、每秒钟汇总后,将每分钟汇总数据和每秒钟汇总数据存储至第二存储结构中。本实施方式中所谓的同一维度,表示需要累积的用户行为数据所表示的意义相同。例如,所累积的用户行为数据的维度可以是一段时间内登陆网站的数量;也可为一段时间内的支付金额等。以下,将以一段时间内的支付金额这个维度作为示例,对本申请技术方案进行详细说明。在本实施方式中,累积的用户行为数据可存储于用户行为数据库20(例如HBase数据库)内,其包括第一存储结构和第二存储结构。其中,将每日汇总数据和每小时汇总数据存储到第一存储结构中。将每分钟汇总数据和每秒钟汇总数据存储到第二存储结构中。进一步地,在本实施方案中,所述第一存储结构包括多条数据串,每条数据串由时间窗组成,且每条数据串的时间窗可分别对应存储一个每日汇总数据及与该每日汇总数据时间对应的一个或多个每小时汇总数据;所述第二存储结构包括多条数据串,每条数据串由多个时间窗组成,且每条数据串的多个时间窗可分别对应存储一个每分钟汇总数据及与该每分钟汇总数据时间对应的一个或多个每秒钟汇总数据。参图2a的示意,所述第一存储结构包括3条数据串,每条数据串由D、H0、H1、……H23,一共25个时间窗组成,其中,D表示的时间窗可存储每日汇总数据;H0、H1……H23表示的当日下24个小时(从0点到23点)的时间窗可存储对应的每小时汇总数据。可以理解的是,在一条数据串中,H0、H1……H23时间窗内存储数据的总值,等于D时间窗内存储数据的值。参图2b的示意,所述第二存储结构包括3条数据串,每条数据串由M、S0、S1、……S59,一共61个时间窗组成,其中,M表示的时间窗可存储每分钟汇总数据;S0、S1……S59表示的一分钟下60秒(从0秒到59秒)的时间窗可存储对应的每秒钟汇总数据。可以理解的是,在一条数据串中,S、S1……S59时 间窗内存储数据的总值,等于M时间窗内存储数据的值。进一步地,所述用户行为数据库20还包括标识模块205,其用于为每一数据串配置一唯一的时间戳。在本实施方式中,所述第一存储结构可为第一存储表,所述第一存储表的列包括一列每日汇总数据,以及与每日汇总数据时间对应的多列每小时汇总数据。参图2a所示,所述第一存储表可以rowkey为主体(例如ID信息),第一列数据可为每日汇总数据,接下来24列数据可为每小时汇总数据,当然也可是1~24列数据为每小时汇总数据,第25列数据为每日汇总数据,本领域技术人员可根据惯用手段变化该顺序。另外,为每一数据串配置的唯一时间戳(timestamp,简写ts)可为该数据串当天的日期,以识别该数据串是哪一天的用户行为数据。所述第二存储结构可为第二存储表,所述第二存储表的列包括一列每分钟汇总数据,以及与每分钟汇总数据时间对应的多列每秒钟汇总数据。参图2b所示,所述第二存储表可以rowkey为主体(例如ID信息)+小时(例如相应用户行为数据发生的时间,精确到小时),第一列数据为每分钟汇总数据,接下来60列数据为每秒钟汇总数据,当然也可是1~60列数据为每秒钟汇总数据,第61列数据为每分钟汇总数据,本领域技术人员可根据惯用手段变化该顺序。另外,为每一数据串配置的唯一时间戳(timestamp,简写ts)可为该数据串当前的分钟时间,以识别该数据串是哪一分钟的用户行为数据。当然,在本实施方式中,还可以将上述的列替换为行,以实现基本相同的第一存储结构和第二存储结构:所述第一存储格式为第一存储表,所述第一存储表的行包括一行每日汇总数据,以及与每日汇总数据时间对应的多行每小时汇总数据;所述第二存储格式为第二存储表,所述第二存储表的行包括一行每分钟汇总数据,以及与每分钟汇总数据时间对应的多行每秒钟汇总数据。具体示意可由图2a、图2b,以及上述对第一/第二存储表列的描述毫无疑义的推导得出,在此不再赘述。进一步地,在本实施方式中,由于第一存储表和第二存储表的列数据是动 态的,因此,所述数据逻辑存储模块203还用于:若某列/行上所有时间窗的存储数值都为0,则不存储该列/行。由此可以节省很多存储空间。以下通过一具体示例进行说明:假设获取到ID信息为2088xx1的用户在下述时间内分别进行了3次支付:在2015010101:00:01秒支付3元;在2015010101:00:12秒支付5元;在2015010102:32:12秒支付2元。那么,在第一存储格式中存储的数据为:rowkeytimestampDH1H22088xx12015010110元8元2元在第二存储格式中存储的数据为:rowkeytimestampMS1S122088xx1_20150101‐012015010101:00分8元3元5元2088xx1_20150101‐022015010102:32分2元空2元从上述示例中可毫无疑义的发现,因为2015010101:00:01至2015010101:00:12对应的时间窗的存储数值为0,且2015010102:32:00至2015010102:32:12对应的时间窗的存储数值也为0,故不存储S2~S11列。当然,上述示例是通过列的方式存储每日汇总数据、每小时汇总数据、每分钟汇总数据、每秒钟汇总数据,本领域技术人员也可将其用在行的方式存储每日汇总数据、每小时汇总数据、每分钟汇总数据、每秒钟汇总数据中,在此不再赘述。进一步地,在本实施方式中,所述用户行为数据库20还包括更新模块207,所述更新模块用于当获取到新的用户行为数据时,同步更新与当前时间匹配的每秒钟汇总数据、每分钟汇总数据、每小时汇总数据,以及每日汇总数据。仍 然以上面的示例继续进行说明:如果ID信息为2088xx1的用户在2015010102:32:12又进行了7元的一笔支付,则需要更新2015010102:32:12的每秒钟汇总数据,2015010102:32的每分钟汇总数据,2015010102时的每小时汇总数据,20150101的每日汇总数据。更新后的数据如下:在第一存储格式中存储的数据为:rowkeytimestampDH1H22088xx12015010117元8元9元在第二存储格式中存储的数据为:rowkeytimestampMS1S122088xx1_20150101‐012015010101:00分8元3元5元2088xx1_20150101-022015010102:32分9元空9元综上所述,通过本申请的数据存储方法及装置,可优化对用户行为数据的存储结构,将每秒钟汇总数据、每分钟汇总数据与每小时汇总数据、每日汇总数据分开存储,以在对累积的用户行为数据进行查询/读取/统计时,减少对数据库的访问次数,优化数据库的存储、读取性能,提高响应速度。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置,装置和模块的具体工作过程,可以参考前述方法实施方式中的对应过程,在此不再赘述。在本申请所提供的几个实施方式中,应该理解到,所揭露的装置,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接 耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施方式方案的目的。另外,在本申请各个实施方式中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以2个或2个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)或处理器(processor)执行本申请各个实施方式所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(RandomAccessMemory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。最后应说明的是:以上实施方式仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施方式对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施方式技术方案的精神和范围。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1