CN103514177A - 数据存储方法及系统 - Google Patents
数据存储方法及系统 Download PDFInfo
- Publication number
- CN103514177A CN103514177A CN201210206419.3A CN201210206419A CN103514177A CN 103514177 A CN103514177 A CN 103514177A CN 201210206419 A CN201210206419 A CN 201210206419A CN 103514177 A CN103514177 A CN 103514177A
- Authority
- CN
- China
- Prior art keywords
- data
- storage
- round
- queuing data
- queue
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
- G06F3/0611—Improving I/O performance in relation to response time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
Abstract
本发明涉及一种数据存储方法及系统,所述方法包括:为对象提供依序循环存储队列数据的循环队列;以及将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据。本发明只需要一个事务就完成了队列数据的插入,并且没有额外的维护队列长度的系统开销,减少了前端与数据库端的交互次数,系统架构简单,便于实施和维护,也降低了更新请求时资源被锁定的时间和数量,从而使系统始终处于稳定、高效的状态,可以在海量数据、高并发的情况下保证循环队列系统的快速数据请求响应,并且可以充分发挥循环队列应用于各种数据库如关系型数据库或非关系型数据库的优势。
Description
技术领域
本发明涉及一种数据存储方法及系统。
背景技术
循环队列数据存储指的是将特性对象的数据按照一定的顺序依次插入到一个队列中,队列的首部和尾部相连,形成一个封闭的环形数据存储空间。
在现有技术下,海量队列数据只存储最新数据有两种方法:
第一种方法是前端程序直接插入新数据,另有后端程序清理不符合队列条件的数据,如超出队列长度且最早的数据。
第一种方法的优点是:在清理程序启动之前,系统有较高的性能;
第一种方法的缺点在于:
1、队列长度不固定,会有波动;
2、系统性能波动较大,清理程序启动后,需要扫描全部海量的数据,在此过程中系统的压力较大,性能下降;而且,在清理过程会产生大量的锁操作,这对系统性能影响更大,直接的表现就是造成连接数上升,请求响应延时或超时,并发量下降。
第二种方法是前端程序在插入新数据之前或之后定位不符合队列条件的数据,然后将该不符合队列条件的数据清理掉。
第二种方法的优点是:系统的整体性能较为稳定,不会出现第一种方法中性能波动较大的情况;
第二种方法的缺点在于:前端的插入请求要经历插入、定位和删除不符合队列条件的数据这三个步骤,这使得简单的插入请求变成一个大的长事务,高并发情况下会出现数据库中出现资源被锁定的时间增加,使得请求需要的响应时间变长,甚至超时。
另外,实际应用中,不可能将海量数据全部放在内存里来提高响应速度,一般会使用廉价的磁盘存储这些海量数据,在数据检索和定位的时候,磁盘输入输出设备(磁盘IO)会消耗了较多的时间和资源。因此,如何在海量数据情况下保证循环队列系统的高并发量和快速数据请求响应是目前业界亟待解决的问题。
发明内容
本发明的目的在于提供一种数据存储方法及系统,只需要一个事务就完成了队列数据的插入,并且没有额外的维护队列长度的系统开销,减少了前端与数据库端的交互次数,系统架构简单,便于实施和维护,也降低了更新请求时资源被锁定的时间和数量,从而使系统始终处于稳定、高效的状态,可以在海量数据、高并发的情况下保证循环队列系统的快速数据请求响应,并且可以充分发挥循环队列应用于各种数据库如关系型数据库或非关系型数据库的优势。
为解决上述问题,本发明提供一种数据存储方法,包括:
为对象提供依序循环存储队列数据的循环队列;以及
将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据。
进一步的,在上述方法中,为对象提供依序循环存储队列数据的循环队列的步骤之前还包括,赋予所述对象一预设的对象关键字。
进一步的,在上述方法中,为对象提供依序循环存储队列数据的循环队列的步骤之后还包括:
对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的循环队列分布式存储到不同服务器的不同表里或文件里。
进一步的,在上述方法中,为对象提供依序循环存储队列数据的循环队列的步骤包括:
预设对象的循环队列中队列数据的存储个数为N,其中N为自然数;
根据所述队列数据的存储个数建立相应长度的循环队列;
按加1的方式依次赋予对象的循环队列中每个队列数据的存储位置一预设的位置号;
将所述对象关键字和所述位置号组合生成联合关键字以标识对象的循环队列中每个队列数据的存储位置。
进一步的,在上述方法中,将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据的步骤包括:
获取所述对象的循环队列中最近一次存储的队列数据的位置号,并判断是否获取成功;
若成功,则根据最近一次存储的队列数据的位置号、所述队列数据的存储个数及取模公式获取新的队列数据的存储位置的联合关键字,以及将所述新的队列数据存储入所述联合关键字所对应的存储位置;
若不成功,则将所述新的队列数据存储入所述对象的循环队列的第一个队列数据的存储位置。
进一步的,在上述方法中,所述取模公式为:
新的队列数据存储的位置号=(最近一次存储的队列数据的位置号+1)%N。
根据本发明的另一面,提供一种数据存储系统,包括:
队列模块,用于为对象提供依序循环存储队列数据的循环队列;以及
存储模块,用于将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据。
进一步的,在上述系统中,还包括一对象关键字模块,用于赋予所述对象一预设的对象关键字。
进一步的,在上述系统中,还包括一哈希模块,用于对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的数据分布式存储到不同服务器的不同表里或文件里。
进一步的,在上述系统中,所述队列模块包括:
存储个数单元,用于预设对象的循环队列中队列数据的存储个数为N,其中N为自然数;
队列单元,用于根据所述队列数据的存储个数建立相应长度的循环队列;
位置单元,用于按加1的方式依次赋予对象的循环队列中每个队列数据的存储位置一预设的位置号;
联系关键字单元,用于将所述对象关键字和所述位置号组合生成联合关键字以标识对象的循环队列中每个队列数据的存储位置。
进一步的,在上述系统中,所述存储模块包括:
判断单元,用于获取所述对象的循环队列中最近一次存储的队列数据的位置号,并判断是否获取成功;
第一存储单元,用于当所述判断单元判断为获取成功时,根据最近一次存储的队列数据的位置号、所述队列数据的存储个数及取模公式获取新的队列数据的存储位置的联合关键字,以及将所述新的队列数据存储入所述联合关键字所对应的存储位置;
第二存储单元,用于当所述判断单元判断为获取不成功时,将所述新的队列数据存储入所述对象的循环队列的第一个队列数据的存储位置。
进一步的,在上述系统中,所述第一存储单元采用的所述取模公式为:
新的队列数据存储的位置号=(最近一次存储的队列数据的位置号+1)%N。
与现有技术相比,本发明通过为对象提供依序循环存储队列数据的循环队列,以及将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据,只需要一个事务就完成了队列数据的插入,并且没有额外的维护队列长度的系统开销,减少了前端与数据库端的交互次数,系统架构简单,便于实施和维护,也降低了更新请求时资源被锁定的时间和数量,从而使系统始终处于稳定、高效的状态,可以在海量数据、高并发的情况下保证循环队列系统的快速数据请求响应。
另外,本发明通过赋予所述对象一预设的对象关键字,按加1的方式依次赋予循环队列中每个存储队列数据的位置一预设的位置号,可以用对象关键字(objectKey)和位置号(positionNumber)生成关系型数据库的联合关键字,来唯一标识每个对象的循环队列中的队列数据,当需要更新队列数据时,可将所述新的队列数据存储入所述对象关键字的新的队列数据存储的位置号所对应的位置,这样队列数据更新时可以有效的利用索引,对检索记录进行直接快速定位,不会出现通过范围扫描数据定位的情况,使前端的数据存储行为产生最小的系统资源消耗,而且,本发明可将循环队列应用于关系型数据库中,循环队列可以自动维护队列长度,关系型数据库可以处理海量的数据,将两者结合后,充分发挥了两者的优势,当然本发明也可应用于其它各种类型的数据库中如非关系型数据库。
此外,本发明通过对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的循环队列分布式存储到不同服务器的不同表里或文件里,可以提高系统并发量和性能。
附图说明
图1是本发明实施例一的数据存储方法的流程图;
图2是本发明实施例二的数据存储方法的流程图;
图3是本发明实施例二的循环列表示意图;
图4是本发明实施例三的数据存储系统的模块示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
实施例一
如图1所示,本发明提供一种数据存储方法,包括:
步骤S11,为对象提供依序循环存储队列数据的循环队列;
具体的,所述对象(object)是循环队列的所有者,例如,在角色动态系统中,每个角色都是一个对象,队列数据可以按照产生顺序依次存储入对象的循环队列中;
步骤S12,将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据;
具体的,由于循环队列的长度固定,所以当循环队列未存满时,新的队列数据会覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个空白队列数据,当循环队列已经存满时,新的队列数据会覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个旧的队列数据。
本发明通过为对象提供依序循环存储队列数据的循环队列,以及将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据,只需要一个事务就完成了队列数据的插入,并且没有额外的维护队列长度的系统开销,减少了前端与数据库端的交互次数,系统架构简单,便于实施和维护,也降低了更新请求时资源被锁定的时间和数量,从而使系统始终处于稳定、高效的状态,可以在海量数据、高并发的情况下保证循环队列系统的快速数据请求响应。
实施例二
如图2所示,本发明提供另一种数据存储方法,本实施例与实施例一的区别在于增加了将所述对象关键字和所述位置号组合生成联合关键字以标识对象的循环队列中每个队列数据的存储位置的步骤,并增加了对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的循环队列分布式存储到不同服务器的不同表里或文件里的步骤,所述数据存储方法具体包括:
步骤S21,赋予对象一预设的对象关键字;
具体的,所述对象(object)是循环队列的所有者,例如,在角色动态系统中,每个角色都是一个对象,在众多的对象中,可以使用对象关键字(objectKey)来标识唯一的一个对象;
步骤S22,为对象提供依序循环存储队列数据的循环队列;
具体的,队列数据可以按照产生顺序依次存储入对象的循环队列中;
优选的,步骤S22具体可包括:
步骤S221,预设对象的循环队列中队列数据的存储个数为N,其中N为自然数;
具体的,所述队列数据(value)是某对象所产生的将要放到循环队列中的数据,所队列数据的存储个数为队列长度(sequenceLength),即某对象所拥有的队列数据的个数,在如图3所示的循环队列中其存储个数N为8;
步骤S222,根据所述队列数据的存储个数建立相应长度的循环队列,例如,图3所示为长度为8的循环队列;
步骤S223,按加1的方式依次赋予对象的循环队列中每个队列数据的存储位置一预设的位置号;
具体的,每个对象都有一个单独的循环队列,单个对象所产生的队列数据,在插入队列之时,都会先赋予一个位置号(positionNumber),后续步骤可根据该位置号(positionNumber)将新的队列数据插入到相应循环队列中,位置号(positionNumber)可在单个对象的循环队列中标识唯一地一个队列数据,如图3所示,位置号a的取值范围为0~7;
步骤S224,将所述对象关键字和所述位置号组合生成联合关键字以标识对象的循环队列中每个队列数据的存储位置;
具体的,在存在多个对象的循环队列的情况下,则需要使用对象关键字(objectKey)和位置号(positionNumber)联合在一起后的联合关键字(primaryKey)作为某个对象的循环队列中某一队列数据的唯一标识,例如,可以设置如下关系型数据库的存储数据结构:
Structure{
objectKey
,positionNumber
,value1
[,value2]
[,value3]
[…]
}
又如,可设置一Mysql数据库表为如下结构:
CREATE TABLE`CharacterDynamics_xx`(
`id`bigint(18)unsigned NOT NULL AUTO_INCREMENT,
`CharacterID`bigint(18)unsigned NOT NULL COMMENT'角色ID',
`MatrixID`varchar(32)NOT NULL COMMENT'游戏号-区号-组号',
`PositioneNo`smallint(5)unsigned NOT NULL COMMENT'位置号',
`FeedTime`int(11)NOT NULL COMMENT'动态产生的时间',
`FeedType`varchar(32)NOT NULL COMMENT'动态类型',
`FeedData`text NOT NULL COMMENT'动态数据',
`tm`timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ONUPDATE CURRENT_TIMESTAMP,
PRIMARY KEY(`id`),
UNIQUE KEY`uidx_character_posNo`(`CharacterID`,`MatrixID`,`PositioneNo`)
)ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=latin1;
其中,`CharacterID`和`MatrixID`相当于上述关系型数据库的存储数据结构中的objectKey;
`PositioneNo`相当于positionNumber,其它列相当于value1,[value2]…;
CharacterID–MatrixID-PositioneNo相当于objectKey-positionNumber;
步骤S23,对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的循环队列分布式存储到不同服务器的不同表里或文件里,即使用哈希(hash)算法对对象关键字(objectKey)进行哈希生成相应的哈希值如一个十六进制的哈希值,再依照该哈希值将不同对象的数据分布式存储到不同服务器的不同表或文件里,例如,可将符合一定条件的哈希值部署到相同的机器上,符合其他条件的部署在其他机器上,通过这种方式实现分布式部署,以提高系统并发量和性能;
步骤S24,将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据;
具体的,由于循环队列的长度固定,所以当循环队列未存满时,新的队列数据会覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个空白队列数据,当循环队列已经存满时,新的队列数据会覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个旧的队列数据,如图3所示,在循环队列已经存满的情况下,最近一次存储的队列数据为c,目前根据队列数据产生的顺序c为第22个队列数据,最旧的队列数据总是位于循环队列中紧邻于c的下一个存储位置b上,当有新的队列数据要存储时下一个存储位置b上的第15个队列数据就会被第23个新的队列数据所覆盖,第23个新的队列数据存储后,下一个存储位置b修改为图3中第16个队列数据的存储位置,最近一次存储的队列数据为c修改为第23个队列数据的存储位置;
优选的,步骤S24具体可包括:
步骤S241,获取所述对象的循环队列中最近一次存储的队列数据的位置号,并判断是否获取成功,即取得当前对象的循环队列中最近的positionNumber(latest(positionNumber)),若成功,则执行步骤S242,若不成功,则执行步骤S244;
步骤S242,根据最近一次存储的队列数据的位置号、所述队列数据的存储个数及取模公式获取新的队列数据的存储位置的联合关键字,即用取模的方式计算出新的队列数据的positionNumber,使最新的队列数据覆盖掉最旧的队列数据;
优选的,所述取模公式为:
新的队列数据存储的位置号=(最近一次存储的队列数据的位置号+1)%N,即New positionNumber=(latest(positionNumber)+1)取模sequenceLength,在如图3所示的循环队列中,New positionNumber=(6+1)%8=7,所以新的数据的存储位置是在位置号(positionNumber)为7的地方存储;
步骤S243,将所述新的队列数据存储入所述联合关键字所对应的存储位置,即将新的队列数据更新到队列系统,实现自动插入新数据,淘汰旧数据;
步骤S244,将所述新的队列数据存储入所述对象的循环队列的第一个队列数据的存储位置,例如在如图3所示的循环队列可,如果无法获得latest(positionNumber),则说明当前对象的队列长度为0,则直接将0赋予新positionNumber,并将数据插入;
具体的,步骤S24的数据库的操作伪代码如下:
1、无论数据库中是否有这个对象的数据,先执行如下更新语句:
Update table set value=[newValue]
where objectKey=[objectKeyValue]and positionNumber in(
select top 1(positionNumber+1)%sequenceLength
from table where objectKey=[objectKeyValue]order by id desc limit 1
);
2、如果第一步执行成功,且没有一条记录受影响,则说明数据库中没有这个对象的任何记录,则再执行如下插入语句:
Insert into table values(objectKey,positionNumber,value);
3、如果第一步执行成功,且只有一条记录受影响,则说明数据库中有这个对象的记录,并且第一步执行所述更新语句成功;
4、其他情况均为异常
本发明通过为对象提供依序循环存储队列数据的循环队列,以及将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据,只需要一个事务就完成了队列数据的插入,并且没有额外的维护队列长度的系统开销,减少了前端与数据库端的交互次数,系统架构简单,便于实施和维护,也降低了更新请求时资源被锁定的时间和数量,从而使系统始终处于稳定、高效的状态,可以在海量数据、高并发的情况下保证循环队列系统的快速数据请求响应。
另外,本发明通过赋予所述对象一预设的对象关键字,按加1的方式依次赋予循环队列中每个存储队列数据的位置一预设的位置号,可以用对象关键字(objectKey)和位置号(positionNumber)生成关系型数据库的联合关键字,来唯一标识每个对象的循环队列中的队列数据,当需要更新队列数据时,可将所述新的队列数据存储入所述对象关键字的新的队列数据存储的位置号所对应的位置,这样队列数据更新时可以有效的利用索引,对检索记录进行直接快速定位,不会出现通过范围扫描数据定位的情况,使前端的数据存储行为产生最小的系统资源消耗,而且,本发明可将循环队列应用于关系型数据库中,循环队列可以自动维护队列长度,关系型数据库可以处理海量的数据,将两者结合后,充分发挥了两者的优势,当然本发明也可应用于其它各种类型的数据库中如非关系型数据库。
此外,本发明通过对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的循环队列分布式存储到不同服务器的不同表里或文件里,可以提高系统并发量和性能。
实施例三
如图4所示,本发明还提供另一种数据存储系统,包括队列模块1和存储模块2。
队列模块1用于为对象提供依序循环存储队列数据的循环队列,具体的,队列数据可以按照产生顺序依次存储入对象的循环队列中。
较佳的,所述队列模块1包括存储个数单元11、队列单元12、位置单元13和联系关键字单元14。
存储个数单元11用于预设对象的循环队列中队列数据的存储个数为N,其中N为自然数,具体的,所述队列数据(value)是某对象所产生的将要放到循环队列中的数据,所队列数据的存储个数为队列长度(sequenceLength),即某对象所拥有的队列数据的个数。
队列单元12用于根据所述队列数据的存储个数建立相应长度的循环队列。
位置单元13用于按加1的方式依次赋予对象的循环队列中每个队列数据的存储位置一预设的位置号,具体的,每个对象都有一个单独的循环队列,单个对象所产生的队列数据,在插入队列之时,都会先赋予一个位置号(positionNumber),后续步骤可根据该位置号(positionNumber)将新的队列数据插入到相应循环队列中,位置号(positionNumber)可在单个对象的循环队列中标识唯一地一个队列数据。
联系关键字单元14用于将所述对象关键字和所述位置号组合生成联合关键字以标识对象的循环队列中每个队列数据的存储位置,唯一标识每个对象的循环队列中的队列数据,具体的,在存在多个对象的循环队列的情况下,则需要使用对象关键字(objectKey)和位置号(positionNumber)联合在一起后的联合关键字(primaryKey)作为某个对象的循环队列中某一队列数据的唯一标识,当需要更新队列数据时,可将所述新的队列数据存储入所述对象关键字的新的队列数据存储的位置号所对应的位置,这样队列数据更新时可以有效的利用索引,对检索记录进行直接快速定位,不会出现通过范围扫描数据定位的情况,使前端的数据存储行为产生最小的系统资源消耗,而且,本发明可将循环队列应用于关系型数据库中,循环队列可以自动维护队列长度,关系型数据库可以处理海量的数据,将两者结合后,充分发挥了两者的优势,当然本发明也可应用于其它各种类型的数据库中如非关系型数据库。
存储模块2用于将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据,具体的,由于循环队列的长度固定,所以当循环队列未存满时,新的队列数据会覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个空白队列数据,当循环队列已经存满时,新的队列数据会覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个旧的队列数据,这样只需要一个事务就完成了队列数据的插入,并且没有额外的维护队列长度的系统开销,减少了前端与数据库端的交互次数,系统架构简单,便于实施和维护,也降低了更新请求时资源被锁定的时间和数量,从而使系统始终处于稳定、高效的状态,可以在海量数据、高并发的情况下保证循环队列系统的快速数据请求响应。
较佳的,所述存储模块2包括判断单元21、第一存储单元22和第二存储单元23。
判断单元21用于获取所述对象的循环队列中最近一次存储的队列数据的位置号,即取得当前对象的循环队列中最近的positionNumber(latest(positionNumber)),并判断是否获取成功。
第一存储单元22用于当所述判断单元判断为获取成功时,根据最近一次存储的队列数据的位置号、所述队列数据的存储个数及取模公式获取新的队列数据的存储位置的联合关键字,以及将所述新的队列数据存储入所述联合关键字所对应的存储位置,即用取模的方式计算出新的队列数据的positionNumber,使最新的队列数据覆盖掉最旧的队列数据。
优选的,所述第一存储单元采用的所述取模公式为:
新的队列数据存储的位置号=(最近一次存储的队列数据的位置号+1)%N
第二存储单元23用于当所述判断单元判断为获取不成功时,将所述新的队列数据存储入所述对象的循环队列的第一个队列数据的存储位置。
优选的,所述数据存储系统还包括一对象关键字模块3用于赋予所述对象一预设的对象关键字,具体的,所述对象(object)是循环队列的所有者,例如,在角色动态系统中,每个角色都是一个对象,在众多的对象中,可以使用对象关键字(objectKey)来标识唯一的一个对象。
优选的,所述数据存储系统还包括一哈希模块4用于对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的数据分布式存储到不同服务器的不同表里或文件里,可以提高系统并发量和性能。
本发明通过为对象提供依序循环存储队列数据的循环队列,以及将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据,只需要一个事务就完成了队列数据的插入,并且没有额外的维护队列长度的系统开销,减少了前端与数据库端的交互次数,系统架构简单,便于实施和维护,也降低了更新请求时资源被锁定的时间和数量,从而使系统始终处于稳定、高效的状态,可以在海量数据、高并发的情况下保证循环队列系统的快速数据请求响应。
另外,本发明通过赋予所述对象一预设的对象关键字,按加1的方式依次赋予循环队列中每个存储队列数据的位置一预设的位置号,可以用对象关键字(objectKey)和位置号(positionNumber)生成关系型数据库的联合关键字,来唯一标识每个对象的循环队列中的队列数据,当需要更新队列数据时,可将所述新的队列数据存储入所述对象关键字的新的队列数据存储的位置号所对应的位置,这样队列数据更新时可以有效的利用索引,对检索记录进行直接快速定位,不会出现通过范围扫描数据定位的情况,使前端的数据存储行为产生最小的系统资源消耗,而且,本发明可将循环队列应用于关系型数据库中,循环队列可以自动维护队列长度,关系型数据库可以处理海量的数据,将两者结合后,充分发挥了两者的优势,当然本发明也可应用于其它各种类型的数据库中如非关系型数据库。
此外,本发明通过对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的循环队列分布式存储到不同服务器的不同表里或文件里,可以提高系统并发量和性能。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
显然,本领域的技术人员可以对发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包括这些改动和变型在内。
Claims (12)
1.一种数据存储方法,其特征在于,包括:
为对象提供依序循环存储队列数据的循环队列;以及
将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据。
2.如权利要求1所述的数据存储方法,其特征在于,为对象提供依序循环存储队列数据的循环队列的步骤之前还包括,赋予所述对象一预设的对象关键字。
3.如权利要求2所述的数据存储方法,其特征在于,为对象提供依序循环存储队列数据的循环队列的步骤之后还包括:
对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的循环队列分布式存储到不同服务器的不同表里或文件里。
4.如权利要求3所述的数据存储方法,其特征在于,为对象提供依序循环存储队列数据的循环队列的步骤包括:
预设对象的循环队列中队列数据的存储个数为N,其中N为自然数;
根据所述队列数据的存储个数建立相应长度的循环队列;
按加1的方式依次赋予对象的循环队列中每个队列数据的存储位置一预设的位置号;
将所述对象关键字和所述位置号组合生成联合关键字以标识对象的循环队列中每个队列数据的存储位置。
5.如权利要求4所述的数据存储方法,其特征在于,将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据的步骤包括:
获取所述对象的循环队列中最近一次存储的队列数据的位置号,并判断是否获取成功;
若成功,则根据最近一次存储的队列数据的位置号、所述队列数据的存储个数及取模公式获取新的队列数据的存储位置的联合关键字,以及将所述新的队列数据存储入所述联合关键字所对应的存储位置;
若不成功,则将所述新的队列数据存储入所述对象的循环队列的第一个队列数据的存储位置。
6.如权利要求5所述的数据存储方法,其特征在于,所述取模公式为:
新的队列数据存储的位置号=(最近一次存储的队列数据的位置号+1)%N。
7.一种数据存储系统,其特征在于,包括:
队列模块,用于为对象提供依序循环存储队列数据的循环队列;以及
存储模块,用于将新的队列数据覆盖所述对象的循环队列中最近一次存储的队列数据之后的一个队列数据。
8.如权利要求7所述的数据存储系统,其特征在于,还包括一对象关键字模块,用于赋予所述对象一预设的对象关键字。
9.如权利要求8所述的数据存储系统,其特征在于,还包括一哈希模块,用于对所述对象关键字进行哈希生成相应的哈希值,根据所述哈希值将不同对象的数据分布式存储到不同服务器的不同表里或文件里。
10.如权利要求9所述的数据存储系统,其特征在于,所述队列模块包括:
存储个数单元,用于预设对象的循环队列中队列数据的存储个数为N,其中N为自然数;
队列单元,用于根据所述队列数据的存储个数建立相应长度的循环队列;
位置单元,用于按加1的方式依次赋予对象的循环队列中每个队列数据的存储位置一预设的位置号;
联系关键字单元,用于将所述对象关键字和所述位置号组合生成联合关键字以标识对象的循环队列中每个队列数据的存储位置。
11.如权利要求10所述的数据存储系统,其特征在于,所述存储模块包括:
判断单元,用于获取所述对象的循环队列中最近一次存储的队列数据的位置号,并判断是否获取成功;
第一存储单元,用于当所述判断单元判断为获取成功时,根据最近一次存储的队列数据的位置号、所述队列数据的存储个数及取模公式获取新的队列数据的存储位置的联合关键字,以及将所述新的队列数据存储入所述联合关键字所对应的存储位置;
第二存储单元,用于当所述判断单元判断为获取不成功时,将所述新的队列数据存储入所述对象的循环队列的第一个队列数据的存储位置。
12.如权利要求11所述的数据存储系统,其特征在于,所述第一存储单元采用的所述取模公式为:
新的队列数据存储的位置号=(最近一次存储的队列数据的位置号+1)%N。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210206419.3A CN103514177A (zh) | 2012-06-20 | 2012-06-20 | 数据存储方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210206419.3A CN103514177A (zh) | 2012-06-20 | 2012-06-20 | 数据存储方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103514177A true CN103514177A (zh) | 2014-01-15 |
Family
ID=49896916
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210206419.3A Pending CN103514177A (zh) | 2012-06-20 | 2012-06-20 | 数据存储方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103514177A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104376096A (zh) * | 2014-11-24 | 2015-02-25 | 北京京东尚科信息技术有限公司 | 基于缓冲区的异步更新的方法 |
CN104657500A (zh) * | 2015-03-12 | 2015-05-27 | 浪潮集团有限公司 | 一种基于key-value键值对的分布式存储方法 |
WO2017020758A1 (en) * | 2015-08-05 | 2017-02-09 | Huawei Technologies Co., Ltd. | Large-scale storage and retrieval of data with well-bounded life |
CN106708975A (zh) * | 2016-12-06 | 2017-05-24 | 上海艾融软件股份有限公司 | 商品库存信息的处理方法及系统 |
CN107025184A (zh) * | 2016-02-01 | 2017-08-08 | 深圳市中兴微电子技术有限公司 | 一种数据管理方法及装置 |
CN108959354A (zh) * | 2018-05-04 | 2018-12-07 | 北京小米移动软件有限公司 | 数据处理方法、装置及服务器 |
CN110188110A (zh) * | 2019-05-30 | 2019-08-30 | 深圳前海微众银行股份有限公司 | 一种构建分布式锁的方法及装置 |
CN112527207A (zh) * | 2020-12-18 | 2021-03-19 | 深圳市元征科技股份有限公司 | 一种eeprom中数据存储方法及装置 |
CN115314422A (zh) * | 2022-10-11 | 2022-11-08 | 智道网联科技(北京)有限公司 | 一种平行驾驶中控车指令的链路延时统计方法与装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1764915A (zh) * | 2003-02-06 | 2006-04-26 | 捷讯研究有限公司 | 通过比较散列值同步数据库的设备及方法 |
CN101034346A (zh) * | 2006-03-10 | 2007-09-12 | 北京佳讯飞鸿电气有限责任公司 | 一种循环队列的数据存储方法 |
CN101447911A (zh) * | 2007-11-27 | 2009-06-03 | 上海高性能集成电路设计中心 | 一种通过分布控制扩展访存队列容量的装置 |
CN101464901A (zh) * | 2009-01-16 | 2009-06-24 | 华中科技大学 | 一种对象存储设备中的对象查找方法 |
US20100329668A1 (en) * | 2009-06-29 | 2010-12-30 | Broadcom Corporation | Method and System for Optical Performance Monitoring in Ethernet Passive Optical Networks |
CN101937392A (zh) * | 2010-08-27 | 2011-01-05 | 华南理工大学 | 一种嵌入式软件动态缺陷检测方法 |
CN102024060A (zh) * | 2010-12-31 | 2011-04-20 | 山西奥克斯电子系统工程中心 | 存储文件及恢复误删除文件的方法 |
CN102402586A (zh) * | 2011-10-24 | 2012-04-04 | 深圳华强电子交易网络有限公司 | 一种分布式数据存储方法 |
-
2012
- 2012-06-20 CN CN201210206419.3A patent/CN103514177A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1764915A (zh) * | 2003-02-06 | 2006-04-26 | 捷讯研究有限公司 | 通过比较散列值同步数据库的设备及方法 |
CN101034346A (zh) * | 2006-03-10 | 2007-09-12 | 北京佳讯飞鸿电气有限责任公司 | 一种循环队列的数据存储方法 |
CN101447911A (zh) * | 2007-11-27 | 2009-06-03 | 上海高性能集成电路设计中心 | 一种通过分布控制扩展访存队列容量的装置 |
CN101464901A (zh) * | 2009-01-16 | 2009-06-24 | 华中科技大学 | 一种对象存储设备中的对象查找方法 |
US20100329668A1 (en) * | 2009-06-29 | 2010-12-30 | Broadcom Corporation | Method and System for Optical Performance Monitoring in Ethernet Passive Optical Networks |
CN101937392A (zh) * | 2010-08-27 | 2011-01-05 | 华南理工大学 | 一种嵌入式软件动态缺陷检测方法 |
CN102024060A (zh) * | 2010-12-31 | 2011-04-20 | 山西奥克斯电子系统工程中心 | 存储文件及恢复误删除文件的方法 |
CN102402586A (zh) * | 2011-10-24 | 2012-04-04 | 深圳华强电子交易网络有限公司 | 一种分布式数据存储方法 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104376096B (zh) * | 2014-11-24 | 2018-07-13 | 北京京东尚科信息技术有限公司 | 基于缓冲区的异步更新的方法 |
CN104376096A (zh) * | 2014-11-24 | 2015-02-25 | 北京京东尚科信息技术有限公司 | 基于缓冲区的异步更新的方法 |
CN104657500A (zh) * | 2015-03-12 | 2015-05-27 | 浪潮集团有限公司 | 一种基于key-value键值对的分布式存储方法 |
WO2017020758A1 (en) * | 2015-08-05 | 2017-02-09 | Huawei Technologies Co., Ltd. | Large-scale storage and retrieval of data with well-bounded life |
CN107851122B (zh) * | 2015-08-05 | 2020-11-03 | 华为技术有限公司 | 大规模存储和检索具有良有界生命的数据 |
US9923969B2 (en) | 2015-08-05 | 2018-03-20 | Futurewei Technologies, Inc. | Large-scale storage and retrieval of data with well-bounded life |
CN107851122A (zh) * | 2015-08-05 | 2018-03-27 | 华为技术有限公司 | 大规模存储和检索具有良有界生命的数据 |
CN107025184B (zh) * | 2016-02-01 | 2021-03-16 | 深圳市中兴微电子技术有限公司 | 一种数据管理方法及装置 |
CN107025184A (zh) * | 2016-02-01 | 2017-08-08 | 深圳市中兴微电子技术有限公司 | 一种数据管理方法及装置 |
CN106708975B (zh) * | 2016-12-06 | 2019-10-15 | 上海艾融软件股份有限公司 | 商品库存信息的处理方法及系统 |
CN106708975A (zh) * | 2016-12-06 | 2017-05-24 | 上海艾融软件股份有限公司 | 商品库存信息的处理方法及系统 |
CN108959354A (zh) * | 2018-05-04 | 2018-12-07 | 北京小米移动软件有限公司 | 数据处理方法、装置及服务器 |
CN110188110A (zh) * | 2019-05-30 | 2019-08-30 | 深圳前海微众银行股份有限公司 | 一种构建分布式锁的方法及装置 |
CN110188110B (zh) * | 2019-05-30 | 2024-05-07 | 深圳前海微众银行股份有限公司 | 一种构建分布式锁的方法及装置 |
CN112527207A (zh) * | 2020-12-18 | 2021-03-19 | 深圳市元征科技股份有限公司 | 一种eeprom中数据存储方法及装置 |
CN115314422A (zh) * | 2022-10-11 | 2022-11-08 | 智道网联科技(北京)有限公司 | 一种平行驾驶中控车指令的链路延时统计方法与装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103514177A (zh) | 数据存储方法及系统 | |
CA2279119C (en) | Heuristic-based conditional data indexing | |
CN102521269B (zh) | 一种基于索引的计算机连续数据保护方法 | |
EP2281242B1 (en) | Managing storage of individually accessible data units | |
CN105630863B (zh) | 用于多版本并发提交状态的事务控制块 | |
US7213025B2 (en) | Partitioned database system | |
CN100410883C (zh) | 用于处理消息队列的方法和设备 | |
US20070118547A1 (en) | Efficient index versioning in multi-version databases | |
US8280907B2 (en) | System and method for managing access to data in a database | |
US8620880B2 (en) | Database system, method of managing database, and computer-readable storage medium | |
CN103942342A (zh) | 一种内存数据库oltp&olap并发查询优化方法 | |
US20070214168A1 (en) | Method and System for Removing Rows from Directory Tables | |
EP2729884A1 (en) | Managing storage of data for range-based searching | |
CN110209528B (zh) | 数据备份方法、装置、服务器以及存储介质 | |
CN103164418A (zh) | 一种序列号的处理方法及设备 | |
WO2007137940A1 (en) | Relational database architecture with dynamic load capability | |
CN110096509A (zh) | 大数据环境下实现历史数据拉链表存储建模处理的系统及方法 | |
WO2010084754A1 (ja) | データベースシステム、データベース管理方法、データベース構造および記憶媒体 | |
CN102819585A (zh) | 一种xml数据库文档控制方法 | |
CN102880678A (zh) | 一种嵌入式实时内存数据库 | |
EP3953832A1 (en) | Database management system | |
CN104731716A (zh) | 一种数据存储方法 | |
CN103714121A (zh) | 一种索引记录的管理方法及装置 | |
CN105335475B (zh) | 一种基于流式数据的局部性非聚簇索引方法及系统 | |
CN104820633A (zh) | 计算设备的监控方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140115 |