数据存储方法及装置技术领域
本申请涉及计算机领域,尤其是涉及一种数据存储方法及装置。
背景技术
在很多应用场景中,都会对用户行为数据进行累积存储。这些用户行为数
据可以体现用户的历史操作行为,使用这些用户行为数据可以分析用户行为(例
如统计一个用户在一个小时内登录了几次网站、统计一个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次支付:
在20150101 01:00:01秒支付3元;
在20150101 01:00:12秒支付5元;
在20150101 02:32:12秒支付2元。
那么,在第一存储格式中存储的数据为:
rowkey
timestamp
D
H1
H2
2088xx1
20150101
10元
8元
2元
在第二存储格式中存储的数据为:
rowkey
timestamp
M
S1
S12
2088xx1_20150101‐01
20150101 01:00分
8元
3元
5元
2088xx1_20150101‐02
20150101 02:32分
2元
空
2元
从上述示例中可毫无疑义的发现,因为20150101 01:00:01至20150101
01:00:12对应的时间窗的存储数值为0,且20150101 02:32:00至20150101
02:32:12对应的时间窗的存储数值也为0,故不存储S2~S11列。
当然,上述示例是通过列的方式存储每日汇总数据、每小时汇总数据、每
分钟汇总数据、每秒钟汇总数据,本领域技术人员也可将其用在行的方式存储
每日汇总数据、每小时汇总数据、每分钟汇总数据、每秒钟汇总数据中,在此
不再赘述。
进一步地,在本实施方式中,当获取到新的用户行为数据时,同步更新与
当前时间匹配的每秒钟汇总数据、每分钟汇总数据、每小时汇总数据,以及每
日汇总数据。仍然以上面的示例继续进行说明:
如果ID信息为2088xx1的用户在20150101 02:32:12又进行了7元的一笔支
付,则需要更新20150101 02:32:12的每秒钟汇总数据,20150101 02:32的每分
钟汇总数据,20150101 02时的每小时汇总数据,20150101的每日汇总数据。更
新后的数据如下:
在第一存储格式中存储的数据为:
rowkey
timestamp
D
H1
H2
2088xx1
20150101
17元
8元
9元
在第二存储格式中存储的数据为:
rowkey
timestamp
M
S1
S12
2088xx1_20150101‐01
20150101 01:00分
8元
3元
5元
2088xx1_20150101-02
20150101 02:32分
9元
空
9元
以下将具体说明采用上述方式累积用户行为数据后,对用户行为数据进行
查询的过程:
对用户行为数据进行查询时,可以根据查询的时间范围进行划分,并分时
间片进行查询获取得到数据。
例如,要统计用户2088xx1从20141125 12:35:09到20141128 15:35:09的
支付金额。那么:
S1、查询第二存储表,rowkey=2088xx1_20141125-12并且ts为20141125
12:35分到20141125 12:59分的数据。由此可以计算得到20141125 12:35:09至
20141125 12:59:59的数据。
S2、查询第一存储表,rowkey=2088xx1并且ts为20141125到20141128
的数据。由此可以计算得到20141125 13:00:00到20141128 15:00:00的数据。
S3、查询第二存储表,rowkey=2088xx1_20141128-15并且ts为20141128
15:00分到20141128 15:35分的数据。由此可以计算得到20141128 15:00:00到
20141128 15:35:09的数据。
将以上三步计算得到的数据汇总,即可获得到用户2088xx1从20141125
12:35:09到20141128 15: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次支付:
在20150101 01:00:01秒支付3元;
在20150101 01:00:12秒支付5元;
在20150101 02:32:12秒支付2元。
那么,在第一存储格式中存储的数据为:
rowkey
timestamp
D
H1
H2
2088xx1
20150101
10元
8元
2元
在第二存储格式中存储的数据为:
rowkey
timestamp
M
S1
S12
2088xx1_20150101‐01
20150101 01:00分
8元
3元
5元
2088xx1_20150101‐02
20150101 02:32分
2元
空
2元
从上述示例中可毫无疑义的发现,因为20150101 01:00:01至20150101
01:00:12对应的时间窗的存储数值为0,且20150101 02:32:00至20150101
02:32:12对应的时间窗的存储数值也为0,故不存储S2~S11列。
当然,上述示例是通过列的方式存储每日汇总数据、每小时汇总数据、每
分钟汇总数据、每秒钟汇总数据,本领域技术人员也可将其用在行的方式存储
每日汇总数据、每小时汇总数据、每分钟汇总数据、每秒钟汇总数据中,在此
不再赘述。
进一步地,在本实施方式中,所述用户行为数据库20还包括更新模块207,
所述更新模块用于当获取到新的用户行为数据时,同步更新与当前时间匹配的
每秒钟汇总数据、每分钟汇总数据、每小时汇总数据,以及每日汇总数据。仍
然以上面的示例继续进行说明:
如果ID信息为2088xx1的用户在20150101 02:32:12又进行了7元的一笔支
付,则需要更新20150101 02:32:12的每秒钟汇总数据,20150101 02:32的每分
钟汇总数据,20150101 02时的每小时汇总数据,20150101的每日汇总数据。更
新后的数据如下:
在第一存储格式中存储的数据为:
rowkey
timestamp
D
H1
H2
2088xx1
20150101
17元
8元
9元
在第二存储格式中存储的数据为:
rowkey
timestamp
M
S1
S12
2088xx1_20150101‐01
20150101 01:00分
8元
3元
5元
2088xx1_20150101-02
20150101 02:32分
9元
空
9元
综上所述,通过本申请的数据存储方法及装置,可优化对用户行为数据的
存储结构,将每秒钟汇总数据、每分钟汇总数据与每小时汇总数据、每日汇总
数据分开存储,以在对累积的用户行为数据进行查询/读取/统计时,减少对数据
库的访问次数,优化数据库的存储、读取性能,提高响应速度。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描
述的装置,装置和模块的具体工作过程,可以参考前述方法实施方式中的对
应过程,在此不再赘述。
在本申请所提供的几个实施方式中,应该理解到,所揭露的装置,装置
和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅
是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现
时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另
一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互
之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接
耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作
为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,
或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或
者全部模块来实现本实施方式方案的目的。
另外,在本申请各个实施方式中的各功能模块可以集成在一个处理模块
中,也可以是各个模块单独物理存在,也可以2个或2个以上模块集成在一
个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用硬件加
软件功能模块的形式实现。
上述以软件功能模块的形式实现的集成的模块,可以存储在一个计算机
可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指
令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)
或处理器(processor)执行本申请各个实施方式所述方法的部分步骤。而前
述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、
随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可
以存储程序代码的介质。
最后应说明的是:以上实施方式仅用以说明本申请的技术方案,而非对
其限制;尽管参照前述实施方式对本申请进行了详细的说明,本领域的普通
技术人员应当理解:其依然可以对前述各实施方式所记载的技术方案进行修
改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使
相应技术方案的本质脱离本申请各实施方式技术方案的精神和范围。