一种样本回放数据存取方法及装置与流程

文档序号:15445798发布日期:2018-09-14 23:20阅读:264来源:国知局

本说明书实施例涉及机器学习技术领域,尤其涉及一种样本回放数据存取方法及装置。



背景技术:

目前,人工智能已经成为各个行业的研究热点,机器学习(或深度学习)算法是实现人工智能的关键技术,目前一些算法已经开始应用于解决实际业务需求。同时研究人员也发现,除算法之外的一些其他周边问题,例如数据存取、硬件资源占用等,在新的应用场景下也产生了新的需求,一些传统的成熟方案已经不再适用。

以强化学习中样本回放需求为例,在强化学习中,为了进行训练需要对之前的行为样本进行回放以作为模型学习的输入。样本回放在强化学习中起到连接行为收益与迭代训练之间的桥梁作用,为了提升学习效果,样本回放可以采用多种回放策略,例如顺序回放、随机回放、按批次回放、按指定概率抽样回放等等。这些策略在理论算法上都是支持的,并且在实验环境中都能够分别顺利实现,然而在实际应用中,需要在一个业务场景中灵活切换各种回放策略,有时还需要考虑分布式业务环境、数据吞吐量庞大等实际问题,目前并没有方案能够满足这些需求。



技术实现要素:

针对上述技术问题,本说明书实施例提供一种样本回放数据存取方法及装置,技术方案如下:

根据本说明书实施例的第1方面,提供一种样本回放数据存储方法,配置记录信息表、批次信息表、数据内容表;

所述记录信息表,用于存储最新写入的样本回放数据的记录标识;

所述批次信息表,用于存储最新写入的样本回放数据的批次标识;

所述数据内容表,用于存储样本回放数据,每条样本回放数据以记录标识和批次标识共同构成标识字段;

对于任一条待存储数据,执行以下操作:

根据记录信息表,为所述待存储数据分配记录标识;

根据批次信息表,为所述待存储数据分配批次标识;

根据数据内容表的存储结构,对所分配的记录标识、批次标识以及所述待存储数据的内容进行拼接、并将拼接结果写入数据内容表;

对记录信息表、批次信息表进行更新。

根据本说明书实施例的第2方面,提供一种样本回放数据读取方法,该方法包括:

确定回放需求为:随机选取记录回放;

根据记录信息表,获得已写入的样本回放数据的记录总数sum;

生成随机数数组,所述随机数数组中包括从sum个记录标识中选取的n个随机值,其中n为回放所需的样本记录数量;

遍历所述随机数数组执行以下步骤,得到n条样本回放数据记录:以数组中的任一数值作为记录标识,从数据内容表中读取具有该记录标识的样本回放数据。

根据本说明书实施例的第3方面,提供一种样本回放数据读取方法,该方法包括:

确定回放需求为:随机选取批次回放;

根据批次信息表,获得已写入的样本回放数据的批次总数batch_sum;

生成随机数数组,所述随机数数组中包括从batch_sum个记录标识中选取的n个随机值,其中n为回放所需的样本批次数量;

遍历所述随机数数组执行以下步骤,得到n个样本回放数据批次:以数组中的任一个数值作为批次标识,从数据内容表中读取具有该批次标识的样本回放数据。

根据本说明书实施例的第4方面,提供一种样本回放数据存储装置,配置记录信息表、批次信息表、数据内容表;

所述记录信息表,用于存储最新写入的样本回放数据的记录标识;

所述批次信息表,用于存储最新写入的样本回放数据的批次标识;

所述数据内容表,用于存储样本回放数据,每条样本回放数据以记录标识和批次标识共同构成标识字段;

所述装置包括:标识分配模块、内容写入模块、信息更新模块,对于任一条待存储数据:

所述标识分配模块,用于根据记录信息表,为所述待存储数据分配记录标识;以及根据批次信息表,为所述待存储数据分配批次标识;

所述内容写入模块,用于根据数据内容表的存储结构,对所分配的记录标识、批次标识以及所述待存储数据的内容进行拼接、并将拼接结果写入数据内容表;

所述信息更新模块,用于对记录信息表、批次信息表进行更新。

根据本说明书实施例的第5方面,提供一种样本回放数据读取装置,该装置包括:

回放需求确定模块,用于确定回放需求为:随机选取记录回放;

记录总数确定模块,用于根据记录信息表,获得已写入的样本回放数据的记录总数sum;

数据读取模块,用于生成随机数数组,所述随机数数组中包括从sum个记录标识中选取的n个随机值,其中n为回放所需的样本记录数量;遍历所述随机数数组执行以下步骤,得到n条样本回放数据记录:以数组中的任一数值作为记录标识,从数据内容表中读取具有该记录标识的样本回放数据。

根据本说明书实施例的第6方面,提供一种样本回放数据读取装置,该装置包括:

回放需求确定模块,用于确定回放需求为:随机选取批次回放;

批次总数确定模块,用于根据批次信息表,获得已写入的样本回放数据的批次总数batch_sum;

数据读取模块,用于生成随机数数组,所述随机数数组中包括从batch_sum个记录标识中选取的n个随机值,其中n为回放所需的样本批次数量;遍历所述随机数数组执行以下步骤,得到n个样本回放数据批次:以数组中的任一个数值作为批次标识,从数据内容表中读取具有该批次标识的样本回放数据。

本说明书实施例所提供的技术方案,将样本回放数据的记录信息和批次信息进行抽离,并配置专用的表项分别存储记录信息和批次信息;在需要进行样本回放时,可以灵活地实现各种常见的样本回放策略,从而更好地满足实际业务应用需求。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。

此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。

附图说明

为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1a及图1b是本说明书实施例的样本回放数据存储方法的流程示意图;

图2是本说明书实施例的样本回放数据存取系统的整体架构示意图;

图3是本说明书实施例的一种样本回放数据读取方法的流程示意图;

图4是本说明书实施例的样本回放数据存储装置的结构示意图;

图5是本说明书实施例的第一种样本回放数据读取装置的结构示意图;

图6是本说明书实施例的第二种样本回放数据读取装置的结构示意图;

图7是本说明书实施例的第三种样本回放数据读取装置的结构示意图;

图8是用于配置本说明书实施例装置的一种设备的结构示意图。

具体实施方式

为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。

强化学习(reinforcementlearning),又称再励学习、评价学习等,是一种重要的机器学习方法,在智能控制机器人及分析预测等领域有许多应用。在强化学习过程中,计算机会在没有任何提示的情况下尝试选择一系列行为并得到对应的结果,通过判断这个结果的优劣来为之前的行为进行评价,该评价会用来反馈给行为方以调整之前的行为,算法的目标是调整这些行为以得到最好的评价,通过不断调整,使得计算机能够学习到在什么样的情况下选择什么样的行为可以得到最好的结果。

强化学习的样本回放是利用行为数据作为原始样本,并根据不同的强化学习算法进行不同的回放策略,例如可以顺序回放、随机回放、按批次回放、按指定概率抽样回放等等。

现有技术方案尽管可以实现上述多种回放策略,但是每种策略都是单独实现,不仅无法满足策略灵活切换的实际需求,而且带来了较高的开发及维护成本。另外,现有技术方案都是以单机内存队列作为载体来实现样本回放,内存队列写满后会删除最早添加的样本记录,类似fifo(先进先出)队列。但是内存队列只能实现单机内部的多线程共享,无法适用于实际的分布式业务环境;而且受到内存容量以及非持久性存储等因素的限制,也无法满足实际应用中的大数据量、数据延迟使用等需求。

针对上述问题,本说明书实施例提供一种样本回放数据存取方法。一方面,该方法以数据库作为载体,从而保证样本回放数据的存储容量以及持久化可靠存储。另一方面,针对样本回放的实际需求,还提供相应的数据存储结构以及数据存取方法。

在强化学习过程中,计算机的每次行为会对应产生一条行为数据,一条数据的具体内容可以包括:当前状态state、采取的行为action、本次行为获得的评价reward、等等,数据中的具体内容可能会依算法而异,本说明书对于一条数据中包括哪些具体内容字段并不限定。

为了对多次行为进行区分,将1条如上所述的数据称为1条记录(record),不同的记录以“记录标识”字段进行区分。

另外,在强化学习过程中,为了便于批量回放处理,还需要将多次行为划分为不同的集合,划分依据可以是按数量划分(例如每1000条行为数据记为一个集合),也可以按实际应用逻辑划分(例如每种策略所产生的行为数据记为一个批次、每种环境所产生行为数据记为一个批次,等等),本说明书对于采用哪种集合划分逻辑并不限定。

为了对多个批次进行区分,将1个如上所述的数据集合称为1个批次(batch),不同的批次以“批次标识”字段进行区分。

可见,在样本回放需求中,一条样本回放数据应至少包含以下字段:

记录标识,批次标识,行为内容

本说明书中将记录上述数据结构的表格称为“数据内容表”,其中“记录标识”和“批次标识”均为标识字段,不同的记录可能对应相同的批次、也可能对应不同的批次;而“行为内容”则为内容字段,内容字段可以有多个,且不同算法对应的具体内容字段可能是不同的。

除数据内容表之外,本说明书提供的数据存储结构还包括“记录信息表”和“批次信息表”:

记录信息表:用于存储最新写入的一条样本回放数据的记录标识;可选地,在记录信息表中还可以存储当前已写入样本回放数据的记录总数。这里将记录总数定义为可选的原因在于:某些情况下,可以直接根据“最新写入的记录标识”确定记录总数,例如:记录标识从0开始,并且以+1的幅度自然递增,在不限制记录总数的情况下,记录总数=最新写入的记录标识号+1。

批次信息表:用于存储最新写入的一条样本回放数据的批次标识;可选地,在批次信息表中还可以存储当前已写入样本回放数据的批次总数。将批次总数定义为“可选”的原因与将记录总数定义为可选的原因类似,这里不再赘述。

在定义上述存储结构的基础上,进一步提供样本回放数据存储方法,参见图1a及图1b所示,对于任一条待存储的样本回放数据,其存储方法可以包括以下步骤:

s101,根据记录信息表为待存储数据分配记录标识、根据批次信息表为待存储数据分配批次标识;

最基本的标识分配方式是以自然计数进行编号,以记录标识为例,假设第1条写入记录的编号为0,则后续写入的记录将依次编号为1、2、3……。假设以cur表示“最新写入的样本回放数据的记录标识”,那么在每次写入数据之前,使用为待写入数据分配记录标识的计算公式为:

cur=cur+1

如果针对数据内容表,预先配置l允许存储的样本回放数据的记录数量最大值,那么可以以该最大值为计数周期,为待存储数据分配记录标识,例如采用以下公式分配记录标识:

cur=(cur+1)%max

批次标识的分配方式与记录标识的分配方式基本类似,区别在于,由于允许同一批次包含多条不同记录,因此在对批次标识进行分配时,可能需要判断当前的存储数据与上一条存储的数据批次是否相同;如果是则为该待存储数据分配与上一条存储的数据相同的批次标识;否则为该待存储数据分配新的批次标识。

需要说明的是,上述以自然计数对记录或批次进行标识编号的方案只是一种具体的实施例,不应理解为对本说明书方案的限制,例如还可以采用其他特定算法为每条记录或每个批次生成标识信息,这些并不影响本说明书方案的实现。

s102,根据数据内容表的存储结构,对所分配的记录标识、批次标识以及所述待存储数据的内容进行拼接、并将拼接结果写入数据内容表;

根据前面实施例的描述,数据内容表包括3部分基本内容:记录标识、批次标识、行为内容。

对于当前待存储数据而言,“记录标识”与“批次标识”已在s101确定,而“行为内容”是从外部应用获得,对上述三部分内容进行拼接,即可得到一条[记录标识,批次标识,行为内容]的三元组数据,将该数据作为一个新的数据行写入数据内容表即可。可以理解的是,这里的“行为内容”一般对应多个具体字段,并且实际存储时可能会多从外部应用获得的数据进行一定的转换处理,这些并不影响本说明书方案的实现。

s103,对记录信息表、批次信息表进行更新。

根据记录信息表和批次信息表的定义可知,对数据内容表写入完成后,对记录信息表、批次信息表也要进行相应的更新。

最基本的更新操作是对“最新写入的样本回放数据的记录标识”以及“最新写入的样本回放数据的批次标识”进行更新。更新后的值即为s101中为待存储数据所分配的记录标识以及批次标识。

事实上,根据s101中的计算公式,可以认为在计算新标识的同时,也完成了更新,实际应用中也可以采用这样的处理方式。但是从严格意义上讲,更新标识操作应该在确认数据向数据内容表写入成功后进行,因此本说明书所提供的方法步骤仍然按照上述严格意义的流程设计,但是本领域人员应该清楚,这种方法步骤不应理解为对方案的限定。

另外,如果在记录信息表中还配置了回放数据的记录总数,那么更新操作还应该包括:对记录总数进行更新,也即将原纪录总数+1。

类似地,如果在批次信息表中还配置了回放数据的批次总数,那么更新操作还应该包括:对批次总数进行更新。具体而言,如果是最新写入的记录属于一个新的批次,则将原批次总数+1;如果最新写入的记录批次没有发生变化,则保持批次总数不变。

常见的样本回放需求,按照回放对象可以分为指定回放和随机回放两大类,其中指定回放包括指定对指定记录和/或指定批次的回放,针对指定回放需求,直接以指定的记录标识和/或批次标识构建查询条件,从数据内容表读取相应数据即可。例如,需要顺序回放批次1中0-99条记录,则可以先生成一个序列数组list={0,1,2…99},然后遍历该序列数组,以batch=1,record=list{}为条件拼装查询请求,从数据内容表中读取相应数据即可。

针对随机回放需求,基本思路如下:

1)确定回访需求,包括随机读取的范围(例如全局回放,指定批次回放,等等)及对象类型(记录或批次);

2)根据记录信息表或批次信息表确定该范围内该对象类型的总数;

3)生成一个随机数数组,该数组包括从上述总数中选取的n个随机值,其中n为回放所需的样本记录或批次数量;

4)然后遍历该随机数数组,拼装查询请求,从数据表中读取相应数据。

例如,需要从全局所有记录中随机回放n条记录,那么首先可以根据记录信息表获得全局记录的总数为sum,进而生成一个包含n个数值的随机数数组list=n_random(sum),然后遍历该随机数数组,以record=list{}为条件拼装查询请求,从数据内容表中读取相应数据即可。

需要说明的是,以上所介绍的数据存取方法,适用于同一业务的样本回放数据,如果存在多种业务,为了实现多种业务数据的复用存储,可以进一步增加业务标识字段(可以是一个或多个,例如应用名称、应用版本等等)以对不同业务进行区分。在这种情况下,一条样本回放数据还应包含至少一个业务标识字段,并且该业务标识字段需要同时配置在记录信息表、批次信息表、数据内容表中,以建立三个表之间的关联。从数据维护便利性的角度而言,一般不同的业务会分别使用独立的记录标识及批次标识体系,当然理论上也允许不同业务共用同一套标识体系,这并不影响本说明书方案的实现。

另外,本说明书实施例中的记录信息表、批次信息表、数据内容表仅代表逻辑意义上的基本划分方式,实际应用中,在不脱离上述逻辑的前提下,可以对三个表中的一个或多个进行合并,也可以对三个表中的一个或多个做进一步拆分,这些均属于本说明书方案的保护范围。

下面将结合具体的实例,对本说明书所提供的样本回放数据存取方案进行详细说明。

在智能决策领域,可以利用深度强化学习解决很多实际问题,例如奖励金发放多少金额会引起不同用户的关注、疲劳度控制如何因人而异、大促时如何智能根据系统压力自动扩容缩容等。在真实的业务环境中,不仅数据生产者(业务应用端)是分布式的,数据使用者(模型训练端)也是分布式的,而且数据使用者需要使用支持多种回放策略。本说明书提出基于hbase作为存储介质的样本回放数据存取方案,从而满足大规模分布式真实生产环境。

图2所示为样本回放数据存取系统的整体架构示意图;

在线业务系统产生大量业务日志,这些日志通过加工处理写入到样本回放组件,样本回放组件包括写入端(write)、读取端(read)、和作为持久化载体的hbase,我们利用hbase设计特定的表结构和rowkey来实现样本回放的所有功能。强化学习训练系统可以以集群方式接收回放数据进行训练,也可以是单机训练消费。

在hbase中,rowkey是行的主键,使用一个rowkey或者一个rowkey范围即scan来查找数据。有两种“列”的概念:family和qualifier,一个family下面可以有多个qualifier,所以可以简单的理解为,hbase中的列是二级列,也就是说family是第一级列,qualifier是第二级列,两个是父子关系。

根据hbase的基本特点,对记录信息表、批次信息表、数据内容表结构设计如表1所示:

表1

a)记录信息表recordmeta:

version表示版本号;

app表示业务名称;

sum表示当前可用样本总数,取值范围是[0,max];

cur表示当前记录(即最新写入的记录)编号,每添加1条记录cur值增加1,当达到max时,从0开始循环计数;

b)批次信息表batchmeta:

version表示版本号;

app表示业务名称;

batch_sum,表示当前可用batch总数,取值范围是[0,maxbatch]

batch_cur,表示当前批次(即最新写入的记录)编号,每更换1个批次batch_cur值1,当达到maxbatch时,从0开始循环计数;

c)数据内容表recorddata:

version表示版本号;

app表示业务名称;

batch表示批次编号;

cur表示记录编号;

data为kvlist字段,可以动态扩充,例如对于dqn算法,可以是如下形式:

[state:xxx][action:xxx][reward:xxxx][next_state:xxx]

data字段还可以包括其他信息,例如写入时间信息,从而实现按照时间范围选取样本回放数据等;

另外,针对“按照指定概率随机选取记录回放”,data字段还可以用于存储为每条样本记录指定的被选中概率。可以理解的是,所存储的内容并不仅限于取值在[0,1]的概率数值形式,也可以是其他形式,只要能够区分不同记录被选中的优先级即可。当然,这个指定概率信息也可以存储在其他位置,本说明书并不对指定概率信息的获取来源进行限定。

可见,在上述存储结构中,限制了允许存储的记录数量最大值max、允许存储的批次数量最大值maxbatch_。并且在rowkey中增加了version和app字段,作为三个表的关联,从而实现多种业务/多种版本的复用存储。其中version也可以写入时间信息,从而实现按照时间范围选取样本回放数据的需求。

基于上述的数据结构,对于任一条待存储数据,样本回放组件写入逻辑如下:

s201读取recordmeta表,得到当前总记录编号cur:

cur=(cur+1)%max;

s202.读取batchmeta表,得到当前批次编号batch_cur:

如果是一个新批次写入,batch_cur=(batch_cur+1)%maxbatch,

如果不是新批次写入,batch_cur=batch_cur。

s203.拼接数据并向recorddata写入:

拼装rowkey=version:app:batch_cur:cur,内容是当前待存储数据的行为内容四元组,state,action,reward,netx_state,将kvlist写入recorddata中与该rowkey对应的行。

拼装rowkey=version:app:null:cur内容,是当前待存储数据的行为内容四元组,state,action,reward,netx_state,将kvlist写入recorddata中与该rowkey对应的行。

在本实施例中,针对每一次行为会写入两行记录:一行带有batch编号信息,用于实现按批次回放需求;一行不带有batch编号信息,用于实现全局回放需求。这样处理的原因在于,hbase中规定拼装rowkey时必须按照顺序逐个字段拼装,因此在全局回放(即不需要以batch编号信息作为查询条件)时不能跳过batch_cur而直接拼装cur,当然,这个需求还有很多其他解决方案,本实施例仅用于示意性说明,不应理解为对技术方案的限定。

s204.更新recordmeta表和batchmeta表:

更新recordmeta表的当前总条数sum=min(sum+1,max),同时更新meta表中的当前编号值cur=cur;

如果该条记录是batch中最后一条,则更新batchmeta表version:app的当前总条数,batch_sum=(minbatch_sum+1,max)。同时更新batchmeta表中的当前编号值batch_cur=batch_cur。

以上介绍了样本回放组件的数据写入逻辑,下面再示意性地介绍几种读取逻辑:

随机读取记录:

s301.读取recordmeta表,得到当前记录总数sum;

s302.计算随机数数组,从[0,sum-1]中选取n个随机值:

list=n_random(sum),

s303.从list中遍历每个数值作为cur,拼装rowkey=version:app:null:cur,从recorddata表中读取数据。

随机读取批次:

s401.读取batchmeta表,得到当前批次总数batch_sum;

s402.计算随机数数组,从[0,batch_sum-1]中选取n个随机值:

list=n_random(batch_sum)

s403.从list中遍历每个数值作为batch_cur,拼装rowkey=version:app:batch_cur,由于是以batch整体作为读取对象,因此这里不需要拼接记录编号cur,可以利用hbase中的scan方法实现整个批次的读取。

指定概率随机记录读取:

概率优先级抽样是提升强化学习中的非常重要的手段,可以根据多种场景设计样本优先级,可以以时间新旧为优先级,也可以以样本业务重要性为优先级,指定优先级可以快速提升训练效率,本说明书提供一种流式从队列里消费数据并按照指定的概率选取样本的方案。

假设每条样本记录被选中的概率是根据记录所在批次新旧确定的,根据不同批次写入的时间顺序,分别将批次编号为:1、2、3、…n,其中n为批次最大值。那么可以定义:

记录i被选中概率=记录i的批次编号/n*α

其中α为概率修正参数,可以是(0,1)中的取值,例如0.5、0.8等。

需要说明的是,由于本实施例前面已经规定了允许存储的批次数量最大值maxbatch,因此batch_cur是循环计数的,如果没有规定maxbatch,这里也可以直接利用batch_cur计算被选中概率。

参见图3所示,指定概率随机记录读取逻辑如下:

s501.读取recordmeta表,得到当前记录总数sum;

s502.计算随机数数组,从[0,sum-1]中选取n个随机值:

list=n_random(sum),

s503.从list中遍历每个数值作为cur,拼装rowkey=version:app:null:cur,从recorddata表中读取数据。

可以看出s501~s503与s301~s303是一致的,下面进一步介绍根据指定概率随机回放的实现方式:

s504.针对s503读取到的每条记录,根据被选中概率确定是否保留:

针对任一条记录i:

一方面,确定记录i的被选中概率pi:

pi=记录i的批次编号/n*α

另一方面,生成一个随机概率值u:

u=random(1),(u∈[0,1]);

比较pi和u的大小,如果u<pi,则保留记录i,反之如果u≥pi,则丢弃记录i。可以理解的是,对于u=pi的情况,可以灵活设置,本实施例仅用于示意性说明。

首次执行s504后,list中的n条记录有部分会由于概率原因被丢弃,因此保留的记录总数是小于n的,可以重复执行s502~s504,直到保留的记录总数量达到n为止。重复选择的过程中,一般是允许同一条记录被多次保留的,如果需要特别避免这种情况,再增加避免重复的筛选条件即可。

与现有技术相比,上述方案至少包括如下优势:

1.利用hbase集群的高可靠性,即使部分机器宕机或重启,都不会造成样本回放数据丢失;

2.利用hbase集群的高吞吐性能,可以对接实际线上生产系统海量日志样本回流采集;

3.可以集群部署,不受单机内存限制,整个数据集可以根据集群容量设定队列上限,支持超大规模数据样本集。同时由于容量大,可以匹配生产者和使用者的数据读写速度,不会因为生产者过快造成队列样本塞满队列;

4.样本回放数据结构动态schema,可以自由定义,动态扩展,后续当更复杂的强化学习需要在样本中记录更多的信息,整个样本回放组件可以支持数据字段动态扩充;

5.支持全局回放、部分回放、顺序回放、随机回放等多种回放策略。

相应于上述方法实施例,本说明书实施例还提供一种样本回放数据存储装置,参见图4所示,该装置可以包括:标识分配模块110、内容写入模块120、信息更新模块130,对于任一条待存储数据:

所述标识分配模块110,用于根据记录信息表,为所述待存储数据分配记录标识;以及根据批次信息表,为所述待存储数据分配批次标识;

所述内容写入模块120,用于根据数据内容表的存储结构,对所分配的记录标识、批次标识以及所述待存储数据的内容进行拼接、并将拼接结果写入数据内容表;

所述信息更新模块130,用于对记录信息表、批次信息表进行更新。

根据本说明书提供的一种具体实施方式,标识分配模块110可以具体用于:

判断待存储数据与上一条存储的数据批次是否相同;

如果是,则为待存储数据分配与上一条存储的数据相同的批次标识;

否则为待存储数据分配新的批次标识。

根据本说明书提供的一种具体实施方式,内容写入模块120,可以具体用于针对一条待存储数据,拼接两条记录并写入数据内容表,两条记录分别为:

携带批次标识的记录,用于实现按批次回放需求;

不携带批次标识的记录,用于实现全局回放需求。

根据本说明书提供的一种具体实施方式,记录信息表可以还用于存储已写入的样本回放数据的记录总数;

信息更新模块130还可以用于:对记录总数进行更新。

根据本说明书提供的一种具体实施方式,批次信息表还可以用于存储已写入的样本回放数据的批次总数;

信息更新模块130还可以用于:对批次总数进行更新。

根据本说明书提供的一种具体实施方式,针对数据内容表,预先配置允许存储的样本回放数据的记录数量最大值;

标识分配模块120可以具体用于:以记录数量最大值为计数周期,为待存储数据分配记录标识。

根据本说明书提供的一种具体实施方式,针对数据内容表,预先配置允许存储的样本回放数据的批次数量最大值;

标识分配模块120可以具体用于:以批次数量最大值为计数周期,为待存储数据分配批次标识。

参见图5所示,本说明书还提供一种样本回放数据读取装置,该装置可以包括:

回放需求确定模块210,用于确定回放需求为:随机选取记录回放;

记录总数确定模块220,用于根据记录信息表,获得已写入的样本回放数据的记录总数sum;

数据读取模块230,用于生成随机数数组,随机数数组中包括从sum个记录标识中选取的n个随机值,其中n为回放所需的样本记录数量;遍历随机数数组执行以下步骤,得到n条样本回放数据记录:以数组中的任一数值作为记录标识,从数据内容表中读取具有该记录标识的样本回放数据。

参见图6所示,根据本说明书提供的一种具体实施方式,如果回放需求具体为:按照指定概率随机选取记录回放;则样本回放数据读取装置还可以包括:

数据选择模块240,用于针对数据读取模块所得到的每条样本回放数据记录,确定为该条样本记录指定的被选中概率;生成一随机值,如果该随机值小于该条记录的指定被选中概率,则保留该条记录,否则丢弃该条记录;

循环控制模块250,用于判断保留的记录总数是否达到n,若保留的记录总数未达到n,则重复触发数据读取模块230、数据选择模块240,直到保留的记录数量达到n。

参见图7所示,本说明书还提供一种样本回放数据读取装置,该装置可以包括:

回放需求确定模块310,用于确定回放需求为:随机选取批次回放;

批次总数确定模块320,用于根据批次信息表,获得已写入的样本回放数据的批次总数batch_sum;

数据读取模块330,用于生成随机数数组,随机数数组中包括从batch_sum个记录标识中选取的n个随机值,其中n为回放所需的样本批次数量;遍历随机数数组执行以下步骤,得到n个样本回放数据批次:以数组中的任一个数值作为批次标识,从数据内容表中读取具有该批次标识的样本回放数据。

本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现前述的样本回放数据存储或读取方法。

图8示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。

处理器1010可以采用通用的cpu(centralprocessingunit,中央处理器)、微处理器、应用专用集成电路(applicationspecificintegratedcircuit,asic)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。

存储器1020可以采用rom(readonlymemory,只读存储器)、ram(randomaccessmemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。

输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。

通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如usb、网线等)实现通信,也可以通过无线方式(例如移动网络、wifi、蓝牙等)实现通信。

总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。

需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。

本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现前述的样本回放数据存储或读取方法。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。

上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。

本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1