CN105335394B - 一种基于数据库的数据控制方法及*** - Google Patents
一种基于数据库的数据控制方法及*** Download PDFInfo
- Publication number
- CN105335394B CN105335394B CN201410333960.XA CN201410333960A CN105335394B CN 105335394 B CN105335394 B CN 105335394B CN 201410333960 A CN201410333960 A CN 201410333960A CN 105335394 B CN105335394 B CN 105335394B
- Authority
- CN
- China
- Prior art keywords
- subvalue
- data block
- merging
- value
- data
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
Landscapes
- Business, Economics & Management (AREA)
- Engineering & Computer Science (AREA)
- Accounting & Taxation (AREA)
- Development Economics (AREA)
- Economics (AREA)
- Finance (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- Physics & Mathematics (AREA)
- General Business, Economics & Management (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例公开了一种基于数据库的数据控制方法及***,通过将数据总值分为多个子值,分别存放于水平拆分的多个子值数据块中,使子值数据块分布于不同的数据库,从而解决集中式数据控制存在的热点问题。通过设置合并子值数据块,当子值数据块的余值小于阈值或者余值小于或等于阈值时,采取碎片合并机制,将子值数据块中的余值合并至合并子值数据块中,并将被合并的子值数据块的余值设为零,同时合并子值数据块也参与扣减,从而使所有数据块的总余值达到最小,最大程度地减少余值碎片的产生,避免资源和数据库空间的浪费。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种基于数据库的数据控制方法及***。
背景技术
数据库处理中,常会存在对一个总值,例如物品总数量、空间总量或资金总额等,短时间内进行大量次数的扣减计算的情况,例如短时间内大量用户申请存储空间,需要对空间总量跟随用户的申请情况不断扣减计算,并记录扣减情况,直至可申请的空间用尽。这种情况下的数据控制,实现方式一般分为两种:
1.集中控制:以一条数据库记录存放数据总值,每次对数据总值的扣减和余值判断等操作通过数据库的SQL语句在一个数据库事务中进行;
2.分散控制:将数据总值拆分到不同的数据库,将每次扣减操作均衡到不同数据库的数据块上。例如:空间总量为1000G,用户每次可以申请3G的空间,数值3为扣减额,实现时,将数据总值1000由分布在10个子值数据块的10条记录存放,每条记录存放100,发生一次扣减3的操作时,将该操作路由到10个子值数据块的其中一个上,例如在第二个子值数据块上扣减,其余值变为97,剩余的子值数据块的记录仍为100。
发明人在实现本申请的过程中发现,上述第1种集中控制方式由于对数据进行集中存储和操作,会带来数据库热点问题,所谓热点问题为短时间内对少量数据块进行过于频繁的访问,导致***等待时间增加,处理效率降低,同时集中控制使用数据库的单条记录存放余值,由于操作访问量高,使得该条记录的更新存在性能瓶颈,容易出现更新错误;上述第2种分散控制方式虽然将数据分散在多个数据块上,有利于解决热点问题,但是对不同数据块的操作彼此独立,容易产生大量余值碎片。例如,上述第2种方式的示例中,当扣减至每个数据块的子值余值为1时,即便总余值(余值的总和)为10,也无法再进行扣减的操作,此时不能进行扣减的数据块的余值成为余值碎片。尤其当扣减额为多个值时,例如,用户每次可以选择申请3G、5G或15G的空间,则由于扣减额每次都不确定,无法保证每个子值数据块中的子值都可以扣减尽,通常这种情况都会产生大量的余值碎片,使多个数据块中的余值无法使用,不能使总余值达到最小,且造成资源和数据库空间的浪费。
发明内容
为克服相关技术中数据控制不能同时解决热点问题和总余值最小化问题的缺陷,本申请提供一种基于数据库的数据控制方法及***。
根据本申请实施例的第一方面,提供一种基于数据库的数据控制方法,包括:
将数据总值分为多个子值,将子值分别存放于水平拆分的子值数据块中;
当子值数据块的余值小于或等于阈值时,合并余值碎片,所述余值碎片为所述子值数据块的余值,所述合并余值碎片包括:将所述子值数据块的余值合并至合并子值数据块中,且设置所述子值数据块的余值为零;
当进行扣减时,合并子值数据块参与扣减。
其中,所述阈值大于或等于最大扣减额且小于数据总值。
其中,当进行扣减时,在余值大于或等于阈值的子值数据块和合并子值数据块中选取其中之一进行扣减。
可选的,所述的基于数据库的数据控制方法,当子值数据块的余值为零时,设置所述子值数据块的状态为失效。
可选的,当进行扣减时,在余值大于或等于阈值的子值数据块和合并子值数据块中选取其中之一进行扣减,包括:
当进行扣减时,查询子值数据块和合并子值数据块的快照,在合并子值数据块和有效的子值数据块中随机选取其中之一;
当选取的为子值数据块时,在被选取的子值数据块所在的数据库上,锁定被选取的子值数据块的余值记录;
对被选取的子值数据块或者合并子值数据块进行扣减,并***扣减流水。
可选的,所述当子值数据块的余值小于或等于阈值时,合并余值碎片,包括:
***合并流水,合并流水的合并额等于所述子值数据块的余值;
将所述子值数据块的余值设置为零;
发起异步合并流程,所述异步合并流程包括:
读取所述合并流水;
在合并子值数据块所在的数据库中,增加合并子值数据块的余值,增加的额度等于合并流水的合并额;
将所述合并流水状态设置为完成状态。
可选的,所述异步合并流程,在增加合并子值数据块的余值后,还包括:
***增加流水,增加流水以所述合并流水的主键值为唯一性约束。
可选的,所述的基于数据库的数据控制方法,还包括:
建立合并补偿后台定时任务,所述合并补偿后台定时任务周期性扫描合并流水和增加流水,当存在合并流水对应的增加流水为空时,对所述合并流水重新执行异步合并流程。
所述的基于数据库的数据控制方法,还包括:快照更新流程,所述快照更新流程包括:
当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
可选的,所述快照更新流程,包括:
当子值数据块和合并子值数据块的余值大于或等于阈值时,将子值数据块对应的快照和合并子值数据块对应的快照标示为“可扣减”,否则将子值数据块对应的快照和合并子值数据块对应的快照标示为“不可扣减”;
当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
当合并发生时,且当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
根据本申请实施例的第二方面,提供一种基于数据库的数据控制***,包括:
数据总值拆分单元,用于将数据总值分为多个子值,并将子值分别存放于水平拆分的子值数据块中;
合并子值数据块生成单元,用于生成合并子值数据块;
余值碎片合并单元,用于当子值数据块小于或等于阈值时,将所述子值数据块的余值合并至合并子值数据块中,且设置所述子值数据块的余值为零;
扣减单元,用于当用户发起扣减时,在余值大于或等于阈值的子值数据块和合并子值数据块中选取其中之一进行扣减。
其中,所述阈值大于或等于扣减额且小于数据总值。
可选的,所述余值碎片合并单元,还包括:
数据块状态设置模块,用于当子值数据块的余值为零时,设置所述子值数据块的状态为失效。
可选的,所述扣减单元,包括:
快照查询模块,用于当用户发起扣减时,查询子值数据块和合并子值数据块的快照;
数据块选取模块,用于在合并子值数据块和有效的子值数据块中随机选取其中之一;
数据块锁定模块,用于当选取的为子值数据块时,在被选取的子值数据块所在的数据库上,锁定被选取的子值数据块的余值记录;
余值扣减模块,用于对被选取的子值数据块或合并子值数据块进行扣减;
扣减流水***模块,在对被选取的子值数据块或合并子值数据块进行扣减后,***扣减流水。
可选的,所述余值碎片合并单元,包括:
判断模块,用于判断子值数据块的余值是否小于或等于阈值;
合并流水***模块,用于当子值数据块的余值小于或等于阈值时,***合并流水,合并流水的合并额等于所述子值数据块的余值;
置零模块,用于将所述子值数据块的余值设置为零;
异步合并模块,所述异步合并模块用于发起并执行异步合并流程,所述异步合并模块包括:
合并流水读取子模块,用于读取所述合并流水;
余值合并子模块,用于在合并子值数据块所在的数据库中,增加合并子值数据块的余值,增加的额度等于合并流水的合并额;
合并流水状态设置子模块,用于将所述合并流水状态设置为完成状态。
可选的,所述异步合并模块,还包括:
增加流水***子模块,用于在增加合并子值数据块的余值后,***增加流水,且增加流水以所述合并流水的主键值为唯一性约束。
可选的,所述的基于数据库的数据控制***,还包括:
合并补偿后台定时任务单元,用于周期性扫描合并流水和增加流水,当存在合并流水对应的增加流水为空时,对所述合并流水重新执行异步合并流程。
所述的基于数据库的数据控制***,还包括:快照更新单元,所述快照更新单元包括:
版本号变更模块,用于当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
版本号判断模块,用于判断子值数据块或合并子值数据块的快照的版本号是否小于对应的子值数据块或合并子值数据块的版本号;
数据块快照更新模块,用于当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
可选的,所述快照更新单元,还包括:
快照标示模块,用于当子值数据块和合并子值数据块的余值大于或等于阈值时,将子值数据块对应的快照和合并子值数据块对应的快照标示为“可扣减”,否则将子值数据块对应的快照和合并子值数据块对应的快照标示为“不可扣减”;
快照更新判断模块,用于判断当前是否发生合并;
快照更新控制模块,用于当发生合并时,使能所述数据块快照更新模块,否则,禁止所述数据块快照更新模块。
因此本申请实施例提供的技术方案可以包括以下有益效果:将数据总值分为多个子值,分别存放于水平拆分的多个子值数据块中,使子值数据块分布于不同的数据库,从而解决集中式数据控制存在的热点问题。通过设置合并子值数据块,当子值数据块的余值小于阈值或者余值小于或等于阈值时,将子值数据块中的余值合并至合并子值数据块中,并将被合并的子值数据块的余值设为零,其中,阈值大于或等于最大的扣减额。同时合并子值数据块也参与扣减,因此当扣减全部结束时,所有数据块的余值都为零,或者只有合并子值数据块中存在余值,且所述余值最小,亦即所有数据块的总余值达到最小,从而最大程度地减少余值碎片的产生,避免数据库空间和资源的浪费。综上所述,本申请实施例提供的技术方案通过分散数据总值及引入碎片合并机制,避免了相关技术中数据控制存在的热点问题,且使总余值最小,最大程度地减少余值碎片的产生,提高数据控制效率,避免资源、数据库空间和数据处理资源的浪费。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一示例性实施例示出的一种基于数据库的数据控制方法的流程示意图。
图2为本申请另一示例性实施例示出的一种基于数据库的数据控制方法的流程示意图。
图3为本申请一示例性实施例示出的一种基于数据库的数据控制***的框图。
图4为本申请一示例性实施例示出的图3所示***中余值碎片合并单元的框图。
图5为本申请另一示例性实施例示出的图3所示***中余值碎片合并单元的框图。
图6为本申请一示例性实施例示出的图3所示***中扣减单元的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
为了全面理解本申请,在以下详细描述中提到了众多具体的细节,但是本领域技术人员应该理解,本申请可以无需这些具体细节而实现。在其他实施例中,不详细描述公知的方法、过程、组件和电路,以免不必要地导致实施例模糊。
为更好地说明本申请的实施例,先对一些常规的数据库技术作简单说明如下。
数据库事务(Database Transaction)是指作为单个逻辑工作单元执行的一系列操作,一个数据库事务要么完整地执行,要么完全地不执行。使用数据库事务可以确保工作单元内的所有操作都成功完成,才会更新面向数据的资源。通过将一组相关操作组合为一个数据库事务,可以使应用程序更加可靠。数据库事务是进行数据库处理的基本操作元素。
数据库流水表,用于记录数据库业务处理的流水日志信息,流水表中一条记录对应一个流水(或称为业务)。当发生一个操作时,可以在流水表中***对应的流水信息,作为回滚或者后续操作的参考。
图1为本申请一示例性实施例示出的一种基于数据库的数据控制方法的流程示意图。如图1所示,所述方法包括:
在步骤S101中,将数据总值分为多个子值,将子值分别存放于水平拆分的子值数据块中;
其中,数据总值可以为数量,也可以为金额等,因此本申请实施例中不对数据总值的单位做限定。步骤S101将数据总值分为多个子值,子值的个数可以根据数据总值和扣减额的最大值确定,较优的,子值的个数小于数据总值除以最大扣减额所得的除数。这是因为,若子值的个数过大,不仅会因为子值数据块太分散耗费过多数据库空间和处理资源,而且可能使子值的额度(此时也可以称为余值)小于扣减额,例如最大扣减额为5,数据总值为1000,分为250个子值,若平均分配子值,则每个子值为4,当发起扣减额为5的扣减时,扣减不能进行,若不平均分配每个子值,使部分子值大于扣减额,则会出现很多空的数据块,两种分配方式都可能造成很大的空间和资源浪费。由于本领域技术人员根据常识可以推断出本申请中子值个数的选择情况,故不赘述。
在优选的实施方式中,可以根据数据总值平均分配子值,选择的子值的个数可以实现平均分配,且使每个子值都大于扣减额的若干倍数,例如,数据总值为1000,扣减额为3,子值的个数为10,则每个子值为100,此种情况下每个子值都能参加扣减,且能进行多次扣减,既能避免热点问题,也使处理过程避免在过多的数据块中进行,且每个子值的扣减次数相同,使处理过程更简洁。在一种可能的实施方式中,扣减额有多个,则可以选择子值的个数,使每个子值都大于最大扣减额的若干倍数,但不平均分配子值,例如数据总值为100,子值个数为4,扣减额为2和3,子值分别为15、20、30、35,此种实施方式中每个子值可以实现的扣减次数不一样,但并不影响本申请技术方案的技术效果。
在另一种可能的实施方式中,选定子值个数后,根据数据总值随机分配子值,这种情况下,部分子值可能小于扣减额,小于扣减额的子值在后续步骤S102中可以合并到合并子值数据块中,其合并处理过程和扣减后余值小于或等于阈值时的处理过程相同,因此该实施方式已包含在本申请所保护的范围之内。
将数据总值分为多个子值后,将子值分别存放至水平拆分的子值数据块中,子值数据块根据子值的个数在不同的数据库中开辟空间并建立。所述水平拆分为常规的数据库技术手段,用于将数据表拆分并在不同的数据库的数据块中存储。通过将数据总值分散,存放于多个分布于不同数据库的数据块中,使得扣减等操作也被分散,从而避免产生热点问题,提高数据处理效率。
在步骤S102中,当子值数据块的余值小于或等于阈值时,合并余值碎片,所述合并余值碎片包括:将所述子值数据块的余值合并至合并子值数据块中,且设置所述子值数据块的余值为零;
在步骤S103中,当进行扣减时,合并子值数据块参与扣减。
其中,步骤S103中,扣减时,在合并子值数据块中也进行扣减,从而保证总余值达到最小,最大程度地减少余值碎片的产生。对于子值数据块的扣减为隐含公开的常规的步骤。扣减时,可以先在子值数据块中进行扣减,当所有子值数据块都不能扣减时或者子值数据块的余值为零时(所有子值数据块的余值都被合并完毕),然后在合并子值数据块中扣减;也可以扣减时在可扣减(余值大于阈值)的子值数据块和合并子值数据块中选取其中之一进行扣减,当所有子值数据块都不能扣减时或者子值数据块的余值为零时,只有合并子值数据块可选,因此最后自然地在合并子值数据块中扣减。扣减时,优选在可扣减(余值大于阈值)的子值数据块和合并子值数据块中选取其中之一进行扣减,以防止最后集中地在合并子值数据块中进行扣减造成一定程度的热点问题,下面主要以该种扣减方式对本申请进行说明,根据本申请的以下说明,本领域技术人员可以容易地推断出其他扣减方式时本申请的过程、原理和应用。
对于步骤S103,在一种优选的实施方式中,当进行扣减时,在余值大于或等于阈值的子值数据块和合并子值数据块中选取其中之一进行扣减。在该实施方式中,当步骤S102中为当子值数据块的余值小于阈值时,合并余值碎片,则步骤S103中选取余值大于或等于阈值的子值数据块或合并子值数据块进行扣减;当步骤S102中为当子值数据块的余值小于或等于阈值时,合并余值碎片,则步骤S103中选取余值大于阈值的子值数据块或合并子值数据块进行扣减。
其中,在一种可能的实施方式中,步骤S102可以在步骤S103之前执行,例如,当子值在子值数据块中存放后,可以先扫描各个子值数据块,判断是否有余值小于或等于阈值的子值数据块,对余值小于或等于阈值的子值数据块,将其余值合并至合并子值数据块中,之后当进行扣减时,例如用户申请空间时,执行步骤S103。在另一种可能的实施方式中,步骤S102在步骤S103之后执行,例如,当子值在子值数据块中存放后,进行扣减时,先执行步骤S103,选取子值数据块和合并子值数据块其中之一进行扣减,被选取进行扣减的子值数据块或合并子值数据的余值大于或等于阈值,之后执行步骤S102。在又一种可能的实施方式中,步骤S102和步骤S103并发进行,因为用户通常是并发地发起扣减,例如多个用户在同一时间抢购商品或者申请空间,因此可以由多个线程并发地对不同的子值数据块执行步骤S103,同时执行步骤S102,以判断是否有余值小于或等于阈值的子值数据块,当存在余值小于或等于阈值的子值数据块时,将其余值合并至合并子值数据块中。
其中,对合并子值数据块而言,可以在子值数据块之外,另外开辟数据块作为合并子值数据块,其初始余值为零;或者,选取子值数据块其中之一作为合并子值数据块,选取方式可以为随机选取,也可以选择余值最小的子值数据块为合并子值数据块。选取子值数据块其中之一作为合并子值数据块为优选方式,有利于节省数据库空间。合并子值数据块建立的时间为在发生第一次合并余值碎片操作之前,因此合并子值数据块可以在步骤S101中建立,例如在建立子值数据块的同时开辟数据库空间建立合并子值数据块,也可以在步骤S101之前建立,也可以在步骤S101之后且在步骤S102之前建立。合并子值数据块在选定或建立后不变,所有小于或等于阈值的余值都被合并到该合并子值数据块中。合并子值数据块和子值数据块都参与扣减。
其中,阈值选取大于或等于最大扣减额且小于数据总值的值。所述阈值的范围在最小扣减额和数据总值之间,较优的是阈值大于或等于最大扣减额,当子值数据块中不能扣减最大扣减额时便进行合并,以减少扣减最大扣减额的失败次数和等待时间,例如,所有子值数据块和合并子值数据块中的余值都小于最大扣减额但大于阈值时,将不能进行最大扣减额的扣减,只有合并子值数据库中的余值通过合并增加至大于最大扣减额后,才能进行扣减最大扣减额的操作。
优选的是阈值大于最大扣减额且小于两倍的最大扣减额,这是因为,如果阈值过大,例如大于两倍或更多倍的扣减额,则被合并的余值较大,使合并后合并子值数据块的余值过高,转移到合并子值数据块上的扣减操作增加,可能使合并子值数据块成为热点数据块;如果阈值较小,例如等于最大扣减额,则对每个子值数据块,当子值数据块中的余值小于最大扣减额时才进行合并时,虽然该方式使每个子值数据块的扣减次数较大,降低合并子值数据块的扣减次数,但由于线程冲突等原因发生操作错误时,对余值小于最大扣减额的子值数据块发生扣减误操作的风险增加,容易产生错误数据(例如出现负值),例如有大量用户不断申请大小为最大扣减额的空间时,出现对余值小于最大扣减额的子值数据块的误扣减。因此阈值优选为阈值大于最大扣减额且小于两倍的最大扣减额,即使发生误扣减,由于余值大于最大扣减额,也可以避免产生错误数据。
其中,步骤S102中,对余值小于或等于阈值的子值数据块,将所述子值数据块的余值合并至合并子值数据块中,可以为:在合并子值数据块中加上和所述子值数据块的余值相同的值。并且可以在合并后,设置所述子值数据块的余值为零,消除所述子值数据块中的余值,优选的是,在设置所述子值数据块的余值为零后,设置所述子值数据块的状态为失效(Disabled),在后续的步骤中将忽略失效的子值数据块,以简化操作过程,节省资源占用。同时,本领域技术人员根据常识可以了知,未将状态设置为失效的子值数据块默认为有效(Enabled)子值数据块。步骤S102中,当子值数据块的余值大于或等于阈值时,不进行合并。
其中,步骤S103中,当进行扣减时,例如用户发起扣减时,可以在余值大于或等于阈值的子值数据块和合并子值数据块中随机选取其一进行扣减,当所有子值数据块的余值为零时,选取合并子值数据块进行扣减,最后,合并子值数据块中余值为零(扣减尽)或者余值小于最小扣减额时,流程结束。进行扣减时,也可以使用其他方式来选取,例如,每次在子值数据块和合并子值数据块中选取余值最大的进行扣减,或者,先在子值数据块中随机选取一个或者选取余值最大的进行扣减,当所有数据块余值都为零时,才选取合并子值数据块进行扣减。所述扣减为将被选取的子值数据块或合并子值数据块的余值减去扣减额。
图2为本申请另一示例性实施例示出的一种基于数据库的数据控制方法的流程示意图。如图2所示,在一种可能的实施方式中,所述方法可以包括:
在步骤S201中,将数据总值分为多个子值,将子值分别存放于水平拆分的子值数据块中;
在步骤S202中,在所述子值数据块中选取其中之一作为合并子值数据块;
其中,根据数据总值平均分配子值,选择的子值的个数可以实现平均分配,且使每个子值都大于最大扣减额的若干倍数。并在所述子值数据块中随机选取其中之一作为合并子值数据块。
在步骤S203中,当进行扣减时,查询子值数据块和合并子值数据块的快照,在合并子值数据块和有效的子值数据块中随机选取其中之一;
其中,所述快照为常规的数据库快照技术生成的子值数据块和合并子值数据块快照,所述有效为子值数据块的状态为有效(Enabled)状态。与常规的数据库中数据块的设置情况相同,子值数据块和合并子值数据块默认为有效状态。本实施例是以一次扣减为例说明数据控制的流程,在实际地并发过程中,当子值数据块都已无效,即子值数据块都已扣减尽时(所有合并操作结束),只有合并子值数据块可以选择,当合并子值数据块中的余值小于最大扣减额时,不能再进行最大扣减额的扣减,当合并子值数据块中的余值小于最小扣减额时,所有扣减结束,此时总余值达到最小。
在步骤S204中,判断被选取的是否为子值数据块,若被选取的非子值数据块,则选取的为合并子值数据块;
在步骤S205中,当选取的是合并子值数据块时,对被选取的合并子值数据块进行扣减,并***扣减流水,一次扣减结束。
在步骤S206中,当被选取的为子值数据块时,在被选取的子值数据块所在的数据库上,锁定被选取的子值数据块的余值记录;
其中,由于在活动中,是并发地发起扣减,数据库进行并发操作,若对并发操作不加控制可能会发生读取和存储不正确数据的情况,破坏数据库的一致性。因此当一个事务在对某个子值数据块进行操作前,先对其加锁,在该事务释放锁之前,其他的事务不能更新该子值数据块,从而可以保证子值数据块的完整性和一致性,通常该事务提交后,锁便被释放。由于合并子值数据块还需要参与进行合并余值碎片操作,所以不锁定。
在步骤S207中,对被选取的子值数据块进行扣减,并***扣减流水,一次扣减结束;
其中,对被选取的子值数据块或合并子值数据块,将其余值减去扣减额,同时***扣减流水,所述扣减流水用于在数据库出现操作错误(例如扣减失败)而回滚时作为参考,以保证回滚后数据的一致性和完整性,所述回滚为常规的回滚操作。本申请实施例中的流水操作皆为常规的流水操作。***扣减流水成功后,扣减完成。
在步骤S208中,当选取子值数据块进行扣减时,判断扣减后被选取的子值数据块的余值是否小于阈值;
其中,所述阈值选取大于最大扣减额且小于两倍最大扣减额的值。
在步骤S209中,当扣减后被选取的子值数据块的余值大于或等于阈值时,释放对被选取的所述子值数据块的锁定,并返回步骤S203,否则,继续保持锁定;
当子值数据块的余值大于或等于阈值时,不进行合并,返回步骤S203,等待进行下一次扣减。
在步骤S210中,当被选取的子值数据块的余值小于阈值时,***合并流水,合并流水的合并额等于被选取的子值数据块的余值;
其中,可以在***合并流水时设置合并流水的状态为初始(Initial)状态,或者设置合并流水的状态为未完成状态。
在步骤S211中,将被选取的子值数据块的余值设置为零,并将被选取的子值数据块的状态设置为失效;
被选取的子值数据块失效后,其锁定也失效。由于***合并流水后,需要合并到合并子值数据块的余值已记录在合并流水中,并在后续的步骤中合并至合并子值数据块,因此此时子值数据块的余值已为多余,可以在***合并流水后将子值数据快的余值设置为零,还可以进一步将子值数据块的状态设置为失效。
在步骤S212中,发起异步合并流程,完成合并。其中,所述异步合并流程包括:
在步骤S213中,读取所述合并流水;
在步骤S214中,在合并子值数据块所在的数据库中,增加合并子值数据块的余值,增加的额度等于合并流水的合并额;
在步骤S215中,***增加流水,增加流水以所述合并流水的主键值为唯一性约束;
其中,所述增加流水以所述合并流水的主键值为唯一性约束,使增加流水和合并流水一一对应,从而使合并源(进行合并的被选取的子值数据块)和目标(合并子值数据块)对应。当合并失败时,合并流水没有对应的增加流水,从而可以根据合并流水是否有对应的增加流水判断合并是否失败。同时,***和合并流水对应的增加流水,有利于保证数据库的幂等性,防止一次扣减发生后,对被选取进行扣减的子值数据块进行的合并操作和对应的增加操作被重复执行。
在步骤S216中,将所述合并流水状态设置为完成状态,例如,将合并流水的状态设置为SUCCESS(成功),一次合并结束。
当***增加流水后,将所述合并流水状态设置为完成状态。
在一种可能的实施方式中,本申请实施例提供的基于数据库的数据控制方法,还可以包括:
建立合并补偿后台定时任务,所述合并补偿后台定时任务周期性扫描合并流水和增加流水,当存在合并流水对应的增加流水为空时,对所述合并流水重新执行异步合并流程。
其中,所述合并补偿后台定时任务的建立可以采用常规的后台定时任务的建立方法。
在一种可能的实施方式中,本申请实施例提供的基于数据库的数据控制方法,还可以包括:快照更新流程。
所述快照更新流程,在一种可能的实施方式中,可以包括:
(a1)当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
(a2)当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
其中,对子值数据块和合并子值数据块的快照更新可以采用常规的数据库快照更新技术。当子值数据块或合并子值数据块的余值没有发生变化时,不修改版本号。当子值数据块或合并子值数据块的快照的版本号大于或等于对应的子值数据块或合并子值数据块的版本号时,不更新快照。
由于在活动是并发的发起扣减,同一个子值数据块会被并发地更新,同时为避免产生热点问题,快照和对应的数据通常位于不同的数据库,在本申请的实施例中快照与子值数据块及合并子值数据块位于不同的数据库,因此对快照的更新顺序无法保证与对应的子值数据块和合并子值数据块的更新顺序一致,为克服这个问题,引入版本号,通过比对快照的版本号和快照对应的子值数据块或合并子值数据块的版本号,当快照的版本号低于快照对应的子值数据块或合并子值数据块的版本号时,证明子值数据块或合并子值数据块已发生更新,由此更新对应的快照,从而保证快照的更新顺序与对应的子值数据块和合并子值数据块的更新顺序一致。
如果每一次子值数据块或合并子值数据块发生扣减(即余值发生变化)都进行快照更新,那么快照所在的数据库也会产生热点问题。由于所有的扣减操作,都是在余值大于阈值或者余值大于或等于时才能进行,因此对快照无需标示具体的余值数值,只需标示是否“大于阈值(>阈值)”或者“大于等于阈值(≥阈值)”,或者标示为“可扣减”,即可。另外,由于子值数据块的余值小于阈值或者小于或等于阈值时,意味着该子值数据块的余值会被合并且被设置为零,所以快照标示为“小于等于阈值(≤阈值)”或者“小于阈值(<阈值)”,或者标识为“不可扣减”的子值数据块实际都是余值为零的。因此快照只标示与阈值之间的大小关系即可。当查询到快照标示为“>阈值”或者“≥阈值”时,可以对对应的子值数据块或合并子值数据块进行扣减,当查询到快照标示为“≤阈值”或者“<阈值”时,不能进行扣减;或者当查询到快照标示“可扣减”,可以对对应的子值数据块或合并子值数据块进行扣减,当查询到快照“不可扣减”时,不能进行扣减。也可以标示其他的字符串或者数值等,来表征快照对应的子值数据块或者合并子值数据块是否可以进行扣减,例如,快照标示为1,表示可扣减,快照标示为0,表示不可扣减。由此可见,对于上述的快照,只需要在合并发生时进行快照更新,便可以保证流程的正确运行,并且可以避免快照所在的数据库成为新的热点,简化快照更新过程,提高处理效率。基于此,所述快照更新流程,在另一种可能的实施方式中,可以包括:
(b1)当子值数据块和合并子值数据块的余值大于或等于阈值或者大于阈值时,子值数据块对应的快照和合并子值数据块对应的快照标示为“大于等于阈值”或者“大于阈值”,否则子值数据块对应的快照和合并子值数据块对应的快照标示为“小于阈值”或者“小于等于阈值”;
(b2)当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
(b3)判断是否有合并发生;
(b4)当有合并发生时,判断子值数据块或合并子值数据块的快照的版本号是否小于对应的子值数据块或合并子值数据块的版本号;
(b5)当步骤(b4)中判断的结果为子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
判断是否有合并发生可以通过判断是否***了新的合并流水进行。
对于只在合并时更新快照的情况,所述快照更新流程,在又一种可能的是实施方式中,可以包括:
(c1)当子值数据块和合并子值数据块的余值大于或等于阈值时,子值数据块对应的快照和合并子值数据块对应的快照标示为“可扣减”,否则子值数据块对应的快照和合并子值数据块对应的快照标示为“不可扣减”;
(c2)当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
(c3)当有合并发生,使能对子值数据块和合并子值数据块进行快照更新的功能,并判断子值数据块或合并子值数据块的快照的版本号是否小于对应的子值数据块或合并子值数据块的版本号,否则,禁止对子值数据块和合并子值数据块进行快照更新的功能;
(c4)当步骤(c3)中判断的结果为子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
当有合并发生时,使能对子值数据块和合并子值数据块进行快照更新的功能,在可以更新子值数据块和合并子值数据块的快照,当没有合并发生时,则禁止对子值数据块和合并子值数据块进行快照更新的功能,不能更新子值数据块和合并子值数据块的快照。
下面用本申请的一个应用案例进一步说明本申请,以使本领域技术人员更好地理解本申请的原理和应用。为使描述简明方便,省略开始的数据总值分为多个子值和将子值存放于水平拆分的子值数据块中的过程,以一个已经发生过扣减的当前总余值为54的数据控制为例,此时的总余值相当于当前的数据总值,其存放于4个水平拆分的子值数据块中。
将4个子值数据块分别标示为1号、2号、3号和4号,1号的余值为15,2号的余值为0(状态为失效),3号的余值为17,4号的余值为22。其中,随机选取了4号子值数据块作为合并子值数据块。该数据控制的扣减额为6,设定阈值为10。以进行一次扣减为例,说明数据控制的流程:
(1)当进行一次扣减时,查询子值数据块的快照。查询得到1号、3号和4号子值数据块有效,且余值皆大于阈值。随机选取了1号子值数据块进行扣减;
(2)在1号子值数据块所在的数据库上,开启第一事务,锁1号子值数据块的余值记录;
(3)将1号子值数据块的余值扣减至9,并***一条值为6的扣减流水;
(4)判断得到此时的余值9小于10(阈值);
(5)***一条值为9的合并流水,将其状态设置为INIT(Initial的简写,表示初始状态);
(6)将1号子值数据块的余值减至0,并将1号子值数据块在状态设置为失效,提交第一事务;
(7)发起异步合并流程和快照更新流程;
此时4个子值数据块的余值的和为0+0+17+22=39,而54的总余值扣减6之后应为48,差值9记录在合并流水中,将由异步合并流程回加至4号子值数据块(合并子值数据块),异步合并流程为:
(8)读取步骤(5)***的值为9的合并流水;
(9)在合并子值数据块(4号子值数据块)所在的数据库中,开启第二事务,将合并子值数据块的余值增加9;
(10)***一条值为9的增加流水,***成功后提交第二事务;
(11)将合并流水状态改为SUSS(Success的简写,成功),即将合并流水的状态改为完成状态。
此时合并完成,4个子值数据块的余值的和为48。
其中,第一事务主要负责在子值数据块的余值中减去扣减额,以及当子值数据块的余值小于阈值时,将子值数据块的余值减至零,并设置子值数据块的状态为失效;第二事务主要负责对合并子值数据块的余值进行增加,并***增加流水。需要说明的是,数据库事务为数据库常规技术手段,为一系列操作的虚拟集合,可以根据需要选择哪些操作构成一个事务,数据库事务为数据库处理的基本程序元素,为隐含存在,因此是否在流程中明示数据库事务并不影响本申请的原理和应用。
其中步骤(7)发起的快照更新流程可参见前述的快照更新流程。
需要说明的是,通常是并发地进行扣减,扣减操作、合并操作和快照更新操作等也是并发地进行,但每一次进行扣减时,处理的过程都相同,为简明清楚地说明本申请的原理和应用,以上实施例和应用案例皆是以进行一次扣减为例来说明本申请的,本领域技术人员可以容易地由一次扣减的情况推断出并发处理的情况。
通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,并存储在一个存储介质中,包括若干指令用以使得一台智能设备执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储数据和程序代码的介质。
图3为本申请一示例性实施例示出的一种基于数据库的数据控制***的框图。如图3所示,在一种可能的实施方式中,所述***可以包括:
数据总值拆分单元U301,用于将数据总值分为多个子值,并将子值分别存放于水平拆分的子值数据块中;
合并子值数据块生成单元U302,与U301连接,用于生成合并子值数据块;
所述合并子值数据块生成单元可以在子值数据块之外,另外开辟数据块作为合并子值数据块,其初始余值为零;或者,选取子值数据块其中之一作为合并子值数据块,选取方式可以为随机选取,也可以选择余值最小的子值数据块为合并子值数据块。选取子值数据块其中之一作为合并子值数据块为优选方式,有利于节省数据库空间。
余值碎片合并单元U303,与U301和U302连接,用于当子值数据块小于或等于阈值时,将所述子值数据块的余值合并至合并子值数据块中,且设置所述子值数据块的余值为零;
其中,所述阈值大于或等于扣减额且小于数据总值。
扣减单元U304,与U301、U302和U303连接,用于当用户发起扣减时,在余值大于或等于阈值的子值数据块和合并子值数据块中选取其中之一进行扣减。
图4为本申请一示例性实施例示出的图3所示***中余值碎片合并单元的框图。如图4所示,在一种可能的实施方式中,所述余值碎片合并单元U303,可以包括:
判断模块U401,用于判断子值数据块的余值是否小于或等于阈值;
合并流水***模块U402,与U401连接,用于当子值数据块的余值小于或等于阈值时,***合并流水,合并流水的合并额等于所述子值数据块的余值;
置零模块U403,与U402连接,用于将所述子值数据块的余值设置为零;
异步合并模块U404,与U402和U403连接,所述异步合并模块用于发起并执行异步合并流程,所述异步合并模块包括:
合并流水读取子模块U4041,用于读取所述合并流水;
余值合并子模块U4042,与U4041连接,用于在合并子值数据块所在的数据库中,增加合并子值数据块的余值,增加的额度等于合并流水的合并额;
合并流水状态设置子模块U4043,与U4042连接,用于将所述合并流水状态设置为完成状态。
在增加合并子值数据块的余值后,即余值合并完成后,合并流水状态设置子模块U4043将合并流水状态设置为完成状态。
图5为本申请另一示例性实施例示出的图3所示***中余值碎片合并单元的框图。如图5所示,在一种可能的实施方式中,所述余值碎片合并单元U303,可以包括:
判断模块U501,用于判断子值数据块的余值是否小于或等于阈值;
合并流水***模块U502,与U501连接,用于当子值数据块的余值小于或等于阈值时,***合并流水,合并流水的合并额等于所述子值数据块的余值;
置零模块U503,与U502连接,用于将所述子值数据块的余值设置为零;
数据块状态设置模块U504,与U503连接,用于当子值数据块的余值为零时,设置所述子值数据块的状态为失效。
异步合并模块U505,与U502和U504连接,所述异步合并模块用于发起并执行异步合并流程,所述异步合并模块包括:
合并流水读取子模块U5051,用于读取所述合并流水;
余值合并子模块U5052,与U4051连接,用于在合并子值数据块所在的数据库中,增加合并子值数据块的余值,增加的额度等于合并流水的合并额;
增加流水***子模块U5053,与U5052连接,用于在增加合并子值数据块的余值后,***增加流水,且增加流水以所述合并流水的主键值为唯一性约束。
合并流水状态设置子模块U5054,与U5053连接,用于将所述合并流水状态设置为完成状态。
图6为本申请一示例性实施例示出的图3所示***中扣减单元的框图。如图6所示,当子值数据块的余值为零时,设置所述子值数据块的状态为失效时,所述扣减单元U304,在一种可能的实施方式中,可以包括:
快照查询模块U601,用于当用户发起扣减时,查询子值数据块和合并子值数据块的快照;
数据块选取模块U602,与U601连接,用于在合并子值数据块和有效的子值数据块中随机选取其中之一;
数据块锁定模块U603,与U602连接,用于当选取的为子值数据块时,在被选取的子值数据块所在的数据库上,锁定被选取的子值数据块的余值记录;
余值扣减模块U604,U602和U603连接,用于对被选取的子值数据块或合并子值数据块进行扣减;
扣减流水***模块U605,与U604连接,在对被选取的子值数据块或合并子值数据块进行扣减后,***扣减流水。
所述基于数据库的数据控制***,在另一种可能的实施方式中,还可以包括:
合并补偿后台定时任务单元,用于周期性扫描合并流水和增加流水,当存在合并流水对应的增加流水为空时,对所述合并流水重新执行异步合并流程。所述合并补偿后台定时任务单元和异步合并模块连接。
所述基于数据库的数据控制***,还包括:
快照更新单元,用于更新子值数据块和合并子值数据块的快照。
其中,所述快照更新单元,在一种可能的实施方式中,可以包括:
版本号变更模块,用于当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
版本号判断模块,与版本号变更模块连接,用于判断子值数据块或合并子值数据块的快照的版本号是否小于对应的子值数据块或合并子值数据块的版本号;
数据块快照更新模块,与版本号判断模块连接,用于当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
所述快照更新单元,在另一种可能的实施方式中,还可以包括:
快照标示模块,用于当子值数据块和合并子值数据块的余值大于或等于阈值时,将子值数据块对应的快照和合并子值数据块对应的快照标示为“可扣减”,否则将子值数据块对应的快照和合并子值数据块对应的快照标示为“不可扣减”;
版本号变更模块,用于当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
版本号判断模块,与版本号变更模块连接,用于判断子值数据块或合并子值数据块的快照的版本号是否小于对应的子值数据块或合并子值数据块的版本号;
快照更新判断模块,用于判断当前是否发生合并;
快照更新控制模块,与快照更新判断模块和数据块快照更新模块连接,用于当发生合并时,使能所述数据块快照更新模块,否则,禁止所述数据块快照更新模块;
数据块快照更新模块,与版本号判断模块和快照更新控制模块连接,用于当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,且当发生合并时,更新所述子值数据块或所述合并子值数据块的快照。
其中,在一种可能的实施方式中,所述快照标示模块,用于当子值数据块和合并子值数据块的余值大于或等于阈值或者大于阈值时,将子值数据块对应的快照和合并子值数据块对应的快照标示为“大于等于阈值”或者“大于阈值”,否则子值数据块对应的快照和合并子值数据块对应的快照标示为“小于阈值”或者“小于等于阈值”。所述快照标示模块,也可以将快照标示为其他的字符串或者数值等,来表征快照对应的子值数据块或者合并子值数据块是否可以进行扣减,例如,将快照标示为1,表示可扣减,将快照标示为0,表示不可扣减。
其中,所述快照更新判断模块,可以根据是否***了合并流水来判断当前是否发生合并。
其中,所述快照更新控制模块,当有合并发生时,使能数据块快照更新模块,则在用于当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,且当发生合并时,可以更新子值数据块和合并子值数据块的快照,当没有合并发生时,禁止数据块快照更新模块,则不能更新子值数据块和合并子值数据块的快照。
为了描述的方便,描述以上装置时以功能分为各种单元和模块分别描述。当然,在实施本发明时可以把各单元和模块的功能在同一个或多个软件和/或硬件中实现。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于***实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的***实施例仅仅是示意性的,其中所述作为分离部件说明的单元和模块可以是或者也可以不是物理上分开的,作为单元和模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元或模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者逆序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、***、设备、单元或模块不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、***、设备、单元或模块所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、***、设备、单元或模块中还存在另外的相同要素。
以上所述仅是本申请的具体实施方式,使本领域技术人员能够理解或实现本申请。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (16)
1.一种基于数据库的数据控制方法,其特征在于,包括:
将数据总值分为多个子值,将子值分别存放于水平拆分的子值数据块中;
当子值数据块的余值小于或等于阈值时,合并余值碎片,所述余值碎片为所述子值数据块的余值,所述合并余值碎片包括:将所述子值数据块的余值合并至合并子值数据块中,且设置所述子值数据块的余值为零;
其中,所述阈值大于或等于最大扣减额且小于数据总值;
当进行扣减时,合并子值数据块参与扣减;
当进行扣减时,在余值大于或等于阈值的子值数据块和合并子值数据块中选取其中之一进行扣减;
其中,所述将数据总值分为多个子值,包括:
根据数据总值和扣减额的最大值确定子值的个数;
根据确定的子值的个数和数据总值随机分配子值。
2.如权利要求1所述的基于数据库的数据控制方法,其特征在于,还包括:当子值数据块的余值为零时,设置所述子值数据块的状态为失效。
3.根据权利要求2所述的基于数据库的数据控制方法,其特征在于,当进行扣减时,在余值大于或等于阈值的子值数据块和合并子值数据块中选取其中之一进行扣减,包括:
当进行扣减时,查询子值数据块和合并子值数据块的快照,在合并子值数据块和有效的子值数据块中随机选取其中之一;
当选取的为子值数据块时,在被选取的子值数据块所在的数据库上,锁定被选取的子值数据块的余值记录;
对被选取的子值数据块或者合并子值数据块进行扣减,并***扣减流水。
4.如权利要求1至3任一所述的基于数据库的数据控制方法,其特征在于,所述当子值数据块的余值小于或等于阈值时,合并余值碎片,包括:
***合并流水,合并流水的合并额等于所述子值数据块的余值;
将所述子值数据块的余值设置为零;
发起异步合并流程,所述异步合并流程包括:
读取所述合并流水;
在合并子值数据块所在的数据库中,增加合并子值数据块的余值,增加的额度等于合并流水的合并额;
将所述合并流水状态设置为完成状态。
5.如权利要求4所述的基于数据库的数据控制方法,其特征在于,所述异步合并流程,在增加合并子值数据块的余值后,还包括:
***增加流水,增加流水以所述合并流水的主键值为唯一性约束。
6.如权利要求5所述的基于数据库的数据控制方法,其特征在于,还包括:
建立合并补偿后台定时任务,所述合并补偿后台定时任务周期性扫描合并流水和增加流水,当存在合并流水对应的增加流水为空时,对所述合并流水重新执行异步合并流程。
7.如权利要求1所述的基于数据库的数据控制方法,其特征在于,还包括:快照更新流程,所述快照更新流程包括:
当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
8.如权利要求7所述的基于数据库的数据控制方法,其特征在于,所述快照更新流程,包括:
当子值数据块和合并子值数据块的余值大于或等于阈值时,将子值数据块对应的快照和合并子值数据块对应的快照标示为“可扣减”,否则将子值数据块对应的快照和合并子值数据块对应的快照标示为“不可扣减”;
当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
当合并发生时,且当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
9.一种基于数据库的数据控制***,其特征在于,包括:
数据总值拆分单元,用于将数据总值分为多个子值,并将子值分别存放于水平拆分的子值数据块中;
合并子值数据块生成单元,用于生成合并子值数据块;
余值碎片合并单元,用于当子值数据块小于或等于阈值时,将所述子值数据块的余值合并至合并子值数据块中,且设置所述子值数据块的余值为零;
其中,所述阈值大于或等于扣减额且小于数据总值;
扣减单元,用于当用户发起扣减时,在余值大于或等于阈值的子值数据块和合并子值数据块中选取其中之一进行扣减;
其中,所述数据总值拆分单元,用于将数据总值分为多个子值,包括:
根据数据总值和扣减额的最大值确定子值的个数;
根据确定的子值的个数和数据总值随机分配子值。
10.如权利要求9所述的基于数据库的数据控制***,其特征在于,所述余值碎片合并单元,还包括:
数据块状态设置模块,用于当子值数据块的余值为零时,设置所述子值数据块的状态为失效。
11.根据权利要求10所述的基于数据库的数据控制***,其特征在于,所述扣减单元,包括:
快照查询模块,用于当用户发起扣减时,查询子值数据块和合并子值数据块的快照;
数据块选取模块,用于在合并子值数据块和有效的子值数据块中随机选取其中之一;
数据块锁定模块,用于当选取的为子值数据块时,在被选取的子值数据块所在的数据库上,锁定被选取的子值数据块的余值记录;
余值扣减模块,用于对被选取的子值数据块或合并子值数据块进行扣减;
扣减流水***模块,在对被选取的子值数据块或合并子值数据块进行扣减后,***扣减流水。
12.如权利要求9至11任一所述的基于数据库的数据控制***,其特征在于,所述余值碎片合并单元,包括:
判断模块,用于判断子值数据块的余值是否小于或等于阈值;
合并流水***模块,用于当子值数据块的余值小于或等于阈值时,***合并流水,合并流水的合并额等于所述子值数据块的余值;
置零模块,用于将所述子值数据块的余值设置为零;
异步合并模块,所述异步合并模块用于发起并执行异步合并流程,所述异步合并模块包括:
合并流水读取子模块,用于读取所述合并流水;
余值合并子模块,用于在合并子值数据块所在的数据库中,增加合并子值数据块的余值,增加的额度等于合并流水的合并额;
合并流水状态设置子模块,用于将所述合并流水状态设置为完成状态。
13.如权利要求12所述的基于数据库的数据控制***,其特征在于,所述异步合并模块,还包括:
增加流水***子模块,用于在增加合并子值数据块的余值后,***增加流水,且增加流水以所述合并流水的主键值为唯一性约束。
14.如权利要求13所述的基于数据库的数据控制***,其特征在于,还包括:
合并补偿后台定时任务单元,用于周期性扫描合并流水和增加流水,当存在合并流水对应的增加流水为空时,对所述合并流水重新执行异步合并流程。
15.如权利要求9所述的基于数据库的数据控制***,其特征在于,还包括:快照更新单元,用于更新子值数据块和合并子值数据块的快照,所述快照更新单元包括:
版本号变更模块,用于当子值数据块或合并子值数据块的余值发生变化时,将所述子值数据块或所述合并子值数据块的版本号加1;
版本号判断模块,用于判断子值数据块或合并子值数据块的快照的版本号是否小于对应的子值数据块或合并子值数据块的版本号;
数据块快照更新模块,用于当子值数据块或合并子值数据块的快照的版本号小于对应的子值数据块或合并子值数据块的版本号时,更新所述子值数据块或所述合并子值数据块的快照。
16.如权利要求15所述的基于数据库的数据控制***,其特征在于,所述快照更新单元,还包括:
快照标示模块,用于当子值数据块和合并子值数据块的余值大于或等于阈值时,将子值数据块对应的快照和合并子值数据块对应的快照标示为“可扣减”,否则将子值数据块对应的快照和合并子值数据块对应的快照标示为“不可扣减”;
快照更新判断模块,用于判断当前是否发生合并;
快照更新控制模块,用于当发生合并时,使能所述数据块快照更新模块,否则,禁止所述数据块快照更新模块。
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410333960.XA CN105335394B (zh) | 2014-07-14 | 2014-07-14 | 一种基于数据库的数据控制方法及*** |
US14/797,577 US20160012525A1 (en) | 2014-07-14 | 2015-07-13 | Method and system for managing residual value in distributed processing of transactions |
PCT/US2015/040435 WO2016011067A1 (en) | 2014-07-14 | 2015-07-14 | Method and system for managing residual value in distributed processing of transactions |
SG11201610292WA SG11201610292WA (en) | 2014-07-14 | 2015-07-14 | Method and system for managing residual value in distributed processing of transactions |
EP15822119.2A EP3175353A4 (en) | 2014-07-14 | 2015-07-14 | Method and system for managing residual value in distributed processing of transactions |
JP2016571243A JP6386097B2 (ja) | 2014-07-14 | 2015-07-14 | トランザクションの分散処理において残留値を管理するための方法およびシステム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410333960.XA CN105335394B (zh) | 2014-07-14 | 2014-07-14 | 一种基于数据库的数据控制方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105335394A CN105335394A (zh) | 2016-02-17 |
CN105335394B true CN105335394B (zh) | 2019-08-13 |
Family
ID=55067923
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410333960.XA Active CN105335394B (zh) | 2014-07-14 | 2014-07-14 | 一种基于数据库的数据控制方法及*** |
Country Status (6)
Country | Link |
---|---|
US (1) | US20160012525A1 (zh) |
EP (1) | EP3175353A4 (zh) |
JP (1) | JP6386097B2 (zh) |
CN (1) | CN105335394B (zh) |
SG (1) | SG11201610292WA (zh) |
WO (1) | WO2016011067A1 (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9785480B2 (en) | 2015-02-12 | 2017-10-10 | Netapp, Inc. | Load balancing and fault tolerant service in a distributed data system |
CN107229648A (zh) * | 2016-03-25 | 2017-10-03 | 华为技术有限公司 | 一种资源处理方法及装置 |
CN107808313B (zh) * | 2016-09-08 | 2022-02-01 | 北京京东尚科信息技术有限公司 | 数据合并处理方法、装置及*** |
CN106376034B (zh) * | 2016-10-19 | 2020-02-11 | 深圳市晟碟半导体有限公司 | 快速获取无线Mesh网络内设备的状态的方法和*** |
CN108268490B (zh) * | 2016-12-30 | 2020-12-01 | 华为技术有限公司 | 数值更新方法、装置及服务器 |
CN109766362B (zh) * | 2018-12-28 | 2021-07-20 | 北京字节跳动网络技术有限公司 | 数据处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101122883A (zh) * | 2006-08-09 | 2008-02-13 | 中兴通讯股份有限公司 | 一种避免内存碎片化的内存分配方法 |
CN102024034A (zh) * | 2010-11-26 | 2011-04-20 | 中国科学院声学研究所 | 一种面向高清媒体的嵌入式文件***的碎片处理方法 |
CN102981964A (zh) * | 2012-11-01 | 2013-03-20 | 华为技术有限公司 | 数据存储空间的管理方法及*** |
CN103268270A (zh) * | 2013-05-10 | 2013-08-28 | 曙光信息产业(北京)有限公司 | 快照的管理方法和装置 |
CN103885859A (zh) * | 2014-03-12 | 2014-06-25 | 华中科技大学 | 一种基于全局统计的去碎片方法及*** |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4281391A (en) * | 1979-01-15 | 1981-07-28 | Leland Stanford Junior University | Number theoretic processor |
JP2998750B1 (ja) * | 1998-08-20 | 2000-01-11 | 日本電気株式会社 | ロール状製品の在庫引き当て装置及び方法 |
JP3532860B2 (ja) * | 2001-01-22 | 2004-05-31 | 株式会社東芝 | 剰余系表現を利用した演算装置及び方法及びプログラム |
GB2412980A (en) * | 2004-04-07 | 2005-10-12 | Hewlett Packard Development Co | A method of distributing load amongst two or more computer system resources |
US7946474B1 (en) * | 2004-06-21 | 2011-05-24 | Agrawal Subhash C | Method of and apparatus for forecasting cash demand and load schedules for money dispensers |
US20080235122A1 (en) * | 2007-03-22 | 2008-09-25 | First Data Corporation | Master gift card, systems and methods |
JP5145835B2 (ja) * | 2007-09-14 | 2013-02-20 | 株式会社リコー | 商品供給システム、商品供給方法及び商品供給プログラム |
US8392496B2 (en) * | 2008-12-19 | 2013-03-05 | Watchguard Technologies, Inc. | Cluster architecture for network security processing |
MX2009009454A (es) * | 2009-09-03 | 2011-03-11 | Compracel S A De C V Star | Metodos para pago de servicios utilizando medios electronicos. |
US20150154587A1 (en) * | 2009-12-11 | 2015-06-04 | Vijay Raghavan Chetty | System and method for applying credits from third parties for redemption at member retailers |
US20110231465A1 (en) * | 2010-03-09 | 2011-09-22 | Phatak Dhananjay S | Residue Number Systems Methods and Apparatuses |
JP2012118709A (ja) * | 2010-11-30 | 2012-06-21 | Brother Ind Ltd | 配信システム、ストレージ容量決定プログラム、及びストレージ容量決定方法 |
US20120233073A1 (en) * | 2011-01-11 | 2012-09-13 | Diane Salmon | Universal Value Exchange Apparatuses, Methods and Systems |
JP2013033345A (ja) * | 2011-08-01 | 2013-02-14 | Internatl Business Mach Corp <Ibm> | トランザクション処理システム、方法及びプログラム |
US9081608B2 (en) * | 2012-05-19 | 2015-07-14 | Digital System Research Inc. | Residue number arithmetic logic unit |
US20140280910A1 (en) * | 2013-03-14 | 2014-09-18 | Nomadix, Inc. | Hierarchical rule-based routing system |
CN103226520B (zh) * | 2013-04-02 | 2016-09-07 | 中国科学院信息工程研究所 | 集群内存自适应管理方法、服务器集群*** |
-
2014
- 2014-07-14 CN CN201410333960.XA patent/CN105335394B/zh active Active
-
2015
- 2015-07-13 US US14/797,577 patent/US20160012525A1/en not_active Abandoned
- 2015-07-14 EP EP15822119.2A patent/EP3175353A4/en not_active Ceased
- 2015-07-14 JP JP2016571243A patent/JP6386097B2/ja active Active
- 2015-07-14 WO PCT/US2015/040435 patent/WO2016011067A1/en active Application Filing
- 2015-07-14 SG SG11201610292WA patent/SG11201610292WA/en unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101122883A (zh) * | 2006-08-09 | 2008-02-13 | 中兴通讯股份有限公司 | 一种避免内存碎片化的内存分配方法 |
CN102024034A (zh) * | 2010-11-26 | 2011-04-20 | 中国科学院声学研究所 | 一种面向高清媒体的嵌入式文件***的碎片处理方法 |
CN102981964A (zh) * | 2012-11-01 | 2013-03-20 | 华为技术有限公司 | 数据存储空间的管理方法及*** |
CN103268270A (zh) * | 2013-05-10 | 2013-08-28 | 曙光信息产业(北京)有限公司 | 快照的管理方法和装置 |
CN103885859A (zh) * | 2014-03-12 | 2014-06-25 | 华中科技大学 | 一种基于全局统计的去碎片方法及*** |
Non-Patent Citations (1)
Title |
---|
P2P分布存储***中海量数据的一致性维护技术研究;周婧;《中国博士学位论文全文数据库》;20090715(第7期);第87页第1段,第90页第5.3.1部分以及第99页第5.4.2部分 |
Also Published As
Publication number | Publication date |
---|---|
US20160012525A1 (en) | 2016-01-14 |
WO2016011067A1 (en) | 2016-01-21 |
CN105335394A (zh) | 2016-02-17 |
JP6386097B2 (ja) | 2018-09-05 |
EP3175353A4 (en) | 2017-12-13 |
JP2017522654A (ja) | 2017-08-10 |
SG11201610292WA (en) | 2017-01-27 |
EP3175353A1 (en) | 2017-06-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105335394B (zh) | 一种基于数据库的数据控制方法及*** | |
Rusinkiewicz et al. | Towards a cooperative transaction model-The cooperative activity model | |
WO2022143242A1 (zh) | 基于区块链的交易分发执行方法、装置服务器及存储介质 | |
US7543046B1 (en) | Method for managing cluster node-specific quorum roles | |
KR101959153B1 (ko) | 데이터베이스에서의 계좌와 관련된 거래 요청의 효율적인 처리를 위한 시스템 | |
CN104793988A (zh) | 跨数据库分布式事务的实现方法和装置 | |
CN106302702A (zh) | 数据的分片存储方法、装置及*** | |
US9086911B2 (en) | Multiprocessing transaction recovery manager | |
CN103365852A (zh) | 一种文档库***中的并发控制方法及*** | |
CN113506035A (zh) | 一种审批流程的确定方法、装置和设备 | |
CN106897306B (zh) | 数据库操作方法及装置 | |
CN113094183B (zh) | Ai训练平台的训练任务创建方法、装置、***及介质 | |
CN110599166A (zh) | 一种区块链内获取交易依赖关系的方法及装置 | |
CN109978679A (zh) | 信用共享方法、装置、***及存储介质 | |
CN112000285A (zh) | 强一致存储***、数据强一致存储方法、服务器及介质 | |
CN111932260A (zh) | 一种智能合约版本的管理方法、设备及可读存储介质 | |
CN113448701A (zh) | 一种多进程外呼控制方法、***、电子设备及存储介质 | |
CN110275892A (zh) | 面向区块链的数据管理方法、装置、设备及存储介质 | |
CN106610865A (zh) | 一种数据加锁及解锁的方法及装置 | |
CN112559496A (zh) | 一种分布式数据库事务原子性实现方法及装置 | |
CN115756765A (zh) | 分布式事务处理方法及装置 | |
CN108241671B (zh) | 业务处理方法和***及存储介质 | |
CN112148353B (zh) | 一种数据处理方法及装置 | |
CN106708948A (zh) | 一种用主键唯一性实现事务操作的方法及装置 | |
CN109670151A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20191212 Address after: P.O. Box 31119, grand exhibition hall, hibiscus street, 802 West Bay Road, Grand Cayman, Cayman Islands Patentee after: Innovative advanced technology Co., Ltd Address before: Grand Cayman Islands Patentee before: Alibaba Group Holding Co., Ltd. |
|
TR01 | Transfer of patent right |