数据截断方法和装置制造方法及图纸

技术编号:23161629 阅读:38 留言:0更新日期:2020-01-21 21:58
本申请涉及一种数据截断方法和装置,所述方法包括:在接收到计算任务时,检测是否存在全局锁;如果不存在,则根据计算任务设置一个全局锁,并根据计算任务进行数据截断;如果存在,则根据全局锁的属性判断是否执行计算任务。本申请的方案采用全局锁来保证分布式计算数据截断的准确性,减少并控制错误数据的生成,从源头保证数据的准确,避免因为数据截断可能导致的错乱而造成损失;减少文件系统和数据库的消耗,提升系统的整体运算性能。

Data truncation methods and devices

【技术实现步骤摘要】
数据截断方法和装置
本申请涉及分布式计算
,具体涉及一种数据截断方法和装置。
技术介绍
在价格动因产生时触发已有价格的重新计算,同一段时间范围内的同一个业务维度的多个价格动因可能在同一时间点落在不同的机器上计算,如果不采用某种方式进行保证,就会导致数据的错乱。举例说明:数据库中存在一条生效时间为2019-01-01~2019-12-31的A商品的底价为10元,现在来了一个2019-01-01~2019-10-01的A商品的供价动因(假设供价动因算出的底价是15元),紧接着又来了一个该时间段内的合同动因(假设合同动因算出的底价是5元),这个时候触发A商品的底价重新计算,就会涉及到价格时间的截断。按照动因的先后顺序,最后的正确截断价格应该是:2019-01-01~2019-10-01时间段内5元,2019-10-02~2019-12-31时间段内10元。在没有一个合理的解决方案来处理这两个价格动因,最后的计算结果可能与预期不符,可能的结果如下:①假设供价动因触发的计算被分配到了S1机器上执行,合同动因触发的计算被分配到了S2机器上执行。如果S2的执行速度比S1快,S2先计算完了,价格变成2019-01-01~2019-10-01时间段5元,2019-10-02~2019-12-31时间段内10元,且提交数据库成功。而后S1执行完成,就会覆盖掉S2之前的价格,变成2019-01-01~2019-10-01时间段内15元,2019-10-02~2019-12-31时间段内10元,很显然前一段时间段内的价格跟预期的价格5元不符。②还是上述场景,供价动因仍然在S1机器上执行,合同动因在S2机器上执行。S1执行完提交了,这个时候由于数据库事务并未结束,所以S1的计算结果并没有被S2读取到,S2使用的截断数据仍然是数据库中最原始的数据,最后导致的结果是2019-01-01~2019-10-01时间段内有2条数据,分别是S1算出来的15元和S2算出来的5元,2019-10-02~2019-12-31时间段内也存在2条数据,分别是S1算出来的15元和S2算出来的5元,很显然,这个结果和预期的结果也不一样。相关技术中,一些项目是通过采用内存标志,或者文件标志、数据库标志来解决这个问题。但是内存只能是在独立的机器上运行才没有问题,在分布式计算上不行;至于文件和数据库标志,这两种方案导致的计算资源的占用会很大,影响程序的计算性能。
技术实现思路
为至少在一定程度上克服相关技术中存在的问题,本申请提供一种数据截断方法和装置。根据本申请实施例的第一方面,提供一种数据截断方法,包括:在接收到计算任务时,检测是否存在全局锁;如果不存在,则根据计算任务设置一个全局锁,并根据计算任务进行数据截断;如果存在,则根据全局锁的属性判断是否执行计算任务。进一步地,全局锁的属性包括版本号;相应地,所述根据全局锁的属性判断是否执行计算任务,包括:将全局锁的版本号与计算任务的版本号进行比较;根据比较结果判断是否执行计算任务。进一步地,所述根据比较结果判断是否执行计算任务,包括:如果计算任务的版本号更高,则将计算任务放入等待队列;如果计算任务的版本号更低,则根据生效时间判断是否执行计算任务;其中,全局锁/计算任务的版本号与全局锁/计算任务的时间戳相对应,时间戳靠前则版本号低。进一步地,所述根据生效时间判断是否执行计算任务,包括:判断全局锁的生效时间与计算任务的生效时间是否一致;如果一致,则放弃该计算任务;如果不一致,则将计算任务放入等待队列。进一步地,所述将计算任务放入等待队列,包括:等待全局锁释放;当检测到全局锁已经释放时,根据计算任务设置一个新的全局锁,并根据计算任务进行数据截断。进一步地,所述等待全局锁释放,包括:按照预设的检测频率,定期检测全局锁是否存在;当全局锁不存在时,则全局锁已经释放。进一步地,所述根据计算任务进行数据截断之后,还包括:将数据截断结果提交到数据库,并释放全局锁。进一步地,所述释放全局锁之后,还包括:检测全局锁是否释放成功;如果成功,则结束运行;如果失败,则重新尝试释放全局锁;如果超时,则等待自动释放全局锁。进一步地,所述等待自动释放全局锁,包括:在设置全局锁时,同时记录全局锁存在的时间;当全局锁存在的时间超过预设的时间阈值时,自动释放全局锁。根据本申请实施例的第二方面,提供一种数据截断装置,包括:检测模块,用于在接收到计算任务时,检测是否存在全局锁;执行模块,用于在检测到不存在全局锁时,根据计算任务设置一个全局锁,并根据计算任务进行数据截断;判断模块,用于在检测到存在全局锁时,根据全局锁的属性判断是否执行计算任务。本申请的实施例提供的技术方案具备以下有益效果:采用全局锁来保证分布式计算数据截断的准确性,减少并控制错误数据的生成,从源头保证数据的准确,避免因为数据截断可能导致的错乱而造成损失;减少文件系统和数据库的消耗,提升系统的整体运算性能。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。附图说明此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。图1是根据一示例性实施例示出的一种数据截断方法的流程图。图2是根据一示例性实施例示出的一种数据截断方法的控制流程图。具体实施方式这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。图1是根据一示例性实施例示出的一种数据截断方法的流程图。该方法可以应用于重新计算价格时的数据截断,包括以下步骤:步骤101:在接收到计算任务时,检测是否存在全局锁;步骤102:如果不存在,则根据计算任务设置一个全局锁,并根据计算任务进行数据截断;步骤103:如果存在,则根据全局锁的属性判断是否执行计算任务。本方案的原理是设置一个全局的标志,让各个线程都能读取到这个标志。本申请的方案采用全局锁来保证分布式计算数据截断的准确性,减少并控制错误数据的生成,从源头保证数据的准确,避免因为数据截断可能导致的错乱而造成损失;减少文件系统和数据库的消耗,提升系统的整体运算性能。需要说明的是,全局锁可以理解为一种在分布式集群中的唯一标志,所有线程并发计算时,在某一时间点只能有一个线程持有全局锁。参照图2,一些实施例中,全局锁的属性包括版本号;相本文档来自技高网
...

【技术保护点】
1.一种数据截断方法,其特征在于,包括:/n在接收到计算任务时,检测是否存在全局锁;/n如果不存在,则根据计算任务设置一个全局锁,并根据计算任务进行数据截断;/n如果存在,则根据全局锁的属性判断是否执行计算任务。/n

【技术特征摘要】
1.一种数据截断方法,其特征在于,包括:
在接收到计算任务时,检测是否存在全局锁;
如果不存在,则根据计算任务设置一个全局锁,并根据计算任务进行数据截断;
如果存在,则根据全局锁的属性判断是否执行计算任务。


2.根据权利要求1所述的方法,其特征在于,全局锁的属性包括版本号;
相应地,所述根据全局锁的属性判断是否执行计算任务,包括:
将全局锁的版本号与计算任务的版本号进行比较;
根据比较结果判断是否执行计算任务。


3.根据权利要求2所述的方法,其特征在于,所述根据比较结果判断是否执行计算任务,包括:
如果计算任务的版本号更高,则将计算任务放入等待队列;
如果计算任务的版本号更低,则根据生效时间判断是否执行计算任务;
其中,全局锁/计算任务的版本号与全局锁/计算任务的时间戳相对应,时间戳靠前则版本号低。


4.根据权利要求3所述的方法,其特征在于,所述根据生效时间判断是否执行计算任务,包括:
判断全局锁的生效时间与计算任务的生效时间是否一致;
如果一致,则放弃该计算任务;
如果不一致,则将计算任务放入等待队列。


5.根据权利要求4所述的方法,其特征在于,所述将计算任务放入等待队列,包括:
等待全局锁释放;
当检测...

【专利技术属性】
技术研发人员:邱进许军周毅司孝波
申请(专利权)人:苏宁云计算有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1