CN107203890A - 凭证数据发放方法、装置及系统 - Google Patents

凭证数据发放方法、装置及系统 Download PDF

Info

Publication number
CN107203890A
CN107203890A CN201610152835.8A CN201610152835A CN107203890A CN 107203890 A CN107203890 A CN 107203890A CN 201610152835 A CN201610152835 A CN 201610152835A CN 107203890 A CN107203890 A CN 107203890A
Authority
CN
China
Prior art keywords
voucher
group
credential data
mark
buffer 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.)
Granted
Application number
CN201610152835.8A
Other languages
English (en)
Other versions
CN107203890B (zh
Inventor
叶佳英
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Alibaba Group Holding Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201610152835.8A priority Critical patent/CN107203890B/zh
Publication of CN107203890A publication Critical patent/CN107203890A/zh
Application granted granted Critical
Publication of CN107203890B publication Critical patent/CN107203890B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION 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
    • G06Q30/00Commerce
    • G06Q30/02Marketing; Price estimation or determination; Fundraising
    • G06Q30/0207Discounts or incentives, e.g. coupons or rebates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Accounting & Taxation (AREA)
  • Development Economics (AREA)
  • Finance (AREA)
  • Software Systems (AREA)
  • Strategic Management (AREA)
  • General Physics & Mathematics (AREA)
  • Entrepreneurship & Innovation (AREA)
  • General Business, Economics & Management (AREA)
  • Marketing (AREA)
  • Economics (AREA)
  • Game Theory and Decision Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例提供了一种凭证数据发放方法、装置及系统,该方法包括以下步骤:获取凭证访问请求;从多个凭证组标识中确定一个当前未被锁定的凭证组标识;判断所述当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;如果有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为锁定状态;将所述未发放的凭证加载至缓存队列;将所述缓存队列内的指定凭证发放给所述凭证访问请求所对应的用户,并将所述指定凭证的状态更新为已发放。本申请实施例可降低超高并发访问下凭证发放失败率。

Description

凭证数据发放方法、装置及系统
技术领域
本申请涉及数据处理技术领域,尤其是涉及一种凭证数据发放方法、装置及系统。
背景技术
当前诸如电子优惠券(其是由各商家发放,以各种电子媒介形式制作、传播和使用的促销优惠凭证)这类凭证常是由系统以电子媒介的形式(包括互联网、移动网络、短信和彩信)下发给用户的。当收到用户的索取凭证申请后,系统会自动将凭证发放给该用户,并将该凭证的状态更新为已下发。
然而,但是在遇到高并发的情况下,在某个时刻TPS(Transaction Per Second,每秒事务处理量)会非常高。比如一些秒杀类型的网络活动,往往很多用户可能会同时选到了同一个凭证,并试图去加锁以更新这个凭证为己使用,从而引来很高的锁等待或者超时报错,此时,凭证发放的失败率一般会较大。因此,如何有序的分配凭证,以降低在超高并发访问下的凭证发放失败率。
发明内容
本申请实施例的目的在于提供一种凭证数据发放方法、装置及系统,以有序的分配凭证,降低其在超高并发访问下的发放失败率。
为达到上述目的,一方面,本申请实施例提供了一种凭证数据发放方法,包括以下步骤:
获取凭证访问请求;
从多个凭证组标识中确定一个当前未被锁定的凭证组标识;
判断所述当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;
如果有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为锁定状态;
将所述未发放的凭证加载至缓存队列;
将所述缓存队列内的指定凭证发放给所述凭证访问请求所对应的用户,并将所述指定凭证的状态更新为已发放。
另一方面,本申请实施例还提供了一种凭证数据发放装置,包括:
访问请求获取单元,用于获取凭证访问请求;
凭证组标识锁定单元,用于从多个凭证组标识中确定一个当前未被锁定的凭证组标识;
凭证组标识更新单元,用于判断所述当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;如果有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为锁定状态;
凭证加载单元,用于将所述未发放的凭证加载至缓存队列;
凭证发放单元,用于将所述缓存队列内的指定凭证发放给所述凭证访问请求所对应的用户,并将所述指定凭证的状态更新为已发放。
再一方面,本申请实施例还提供了一种凭证数据发放系统,其包括上述的凭证数据发放装置。
本申请实施例的凭证数据发放方案中,所有待发放的凭证被预先划分成若干个凭证组存储于数据库中,其中每个凭证组对应有一个凭证组标识,在获取凭证访问请求后,查询凭证组标识的当前状态,如果查询到当前凭证组标识的状态为未锁定状态,则选择该当前未被锁定的凭证组标识;并进一步判断当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;如果有,则将当前未被锁定的凭证组标识的状态更新为锁定状态,然后将该凭证组标识对应的凭证组的内凭证组加载入缓存队列以供发放。由一旦凭证组标识被锁定,在锁定状态下,其对应凭证组内所有未发放的凭证只能被锁定该凭证组标识的那个服务器使用,因此,即使在高并发访问的情况下,同一个凭证组标识下的所有未发放的凭证也不可能有其他服务器竞争,因此,本申请实施例极大的降低了凭证发放失败的概率。
附图说明
此处所说明的附图用来提供对本申请实施例的进一步理解,构成本申请实施例的一部分,并不构成对本申请实施例的限定。在附图中:
图1为本申请实施例的凭证数据发放方法的流程图;
图2为本申请实施例的凭证数据发放装置的结构框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本申请实施例做进一步详细说明。在此,本申请实施例的示意性实施例及其说明用于解释本申请实施例,但并不作为对本申请实施例的限定。
下面结合附图,对本申请实施例的具体实施方式作进一步的详细说明。
参考图1所示,本申请实施例的凭证数据发放方法包括以下步骤:
步骤S101,获取凭证访问请求。在本申请的一个实施例中,凭证访问请求可以是用户通过PC终端、移动终端(比如智能手机、笔记本电脑、平板电脑等)、自助服务终端等终端在线发起的,在本申请的另一个实施例中,凭证访问请求也可以是用户通过安装于这些终端上的客户端发起的。
步骤S102,从多个凭证组标识中确定一个当前未被锁定的凭证组标识。
本申请实施例中,所有待发放的凭证被预先划分成若干个凭证组存储于数据库中,其中每个凭证组对应有一个凭证组标识。在获取凭证访问请求后,查询凭证组标识的当前状态,如果查询到当前凭证组标识的状态为未锁定状态,则选择该当前未被锁定的凭证组标识;而如果查询到当前凭证组标识的状态为锁定状态,则继续查询下一个凭证组标识的状态并进行类似的判断,以选择出一个当前未被锁定的凭证组标识。
步骤S103,判断所述当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证。如果有,则执行步骤S104。本步骤中,通过查询当前未被锁定的凭证组标识对应的凭证组内的凭证的状态可以获知当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证。
步骤S104,将所述当前未被锁定的凭证组标识的状态更新为锁定状态。一旦凭证组标识被锁定,集群中的其他服务器均不能选定该凭证组标识,除非该凭证组标识状态发生变化,即被更新为未锁定状态,以防止出现凭证组标识选择冲突。
步骤S105,将所述未发放的凭证加载至缓存队列。一般的,将所述当前未被锁定的凭证组标识对应的凭证组内所有未发放的凭证全部加载入缓存队列。
步骤S106,将所述缓存队列内的指定凭证发放给所述凭证访问请求所对应的用户,并将所述指定凭证的状态更新为已发放。一般的,凭证发放可以是针对一个请求发放一个凭证,所述的指定凭证,一般为缓存队列内的第一个凭证,当然,根据需要也可以是一个请求发放多个凭证,比如针对一请求发放5个凭证,则此时指定凭证则可以为缓存队列内的前5个凭证。在本申请实施例中,每个凭证组内的凭证一旦被发放,该凭证的状态就会被更新为已发放状态,以防止已发放的凭证后续被重复发放。
在步骤S103之后,本申请实施例的凭证数据发放方法还可以包括步骤S107:如果所述当前未被锁定的凭证组标识对应的凭证组内没有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为不可用状态,然后跳转执行步骤S102。而一旦当前未被锁定的凭证组标识对应的凭证组内没有未发放的凭证,则说明该凭证组标识对应的凭证组内的凭证已全部发放,因此,该凭证组标识应状态更新为不可用状态,以免其被再次选择而浪费系统资源。
在本申请另一实施例中,在所述将未发放的凭证加载至缓存队列之后,本申请实施例的凭证数据发放方法还可以包括一个凭证过期回收机制,其包括以下步骤:
判断当前所述缓存队列是否超出预设的缓存更新时间;所述判断当前所述缓存队列是否超出预设的缓存更新时间,具体可以依据当前所述缓存队列中第一个凭证的加载入队时间(加载入队时,每个凭证都有一个加载入队时间)判断该缓存队列是否超出预设的缓存更新时间;如果超出,则清空所述缓存队列,并将该缓存队列中的每个凭证所对应的凭证组标识的状态更新为未锁定状态。
在本申请一实施例中,上述的锁定状态包括锁定时间;对应的,如果当前所述缓存队列未超出预设的缓存更新时间,则将当前所述缓存队列内每个凭证所对应的凭证组标识的锁定时间更新为当前时间。这里更新为当前时间,是指集群中某台处理器,在维护本地的凭证缓存队列共业务调用消耗的过程中,如果凭证缓存队列的数量较低的时候,就需要预加载一批凭证上来以防止本地缓存队列马上就要为空从而导致业务失败的情况,那么这台处理器就需要去查询一个可用的凭证组,确定其可用的前提下,先更新数据库状态,在这条凭证组记录上机器名和时间,这样,则其他处理器则不可再使用这批凭证,保证凭证使用时候的唯一性。
上述凭证过期回收机制目的是为了防止单个服务器加载凭证后由于自身宕机或者集群出现了负载不均而导致的凭证无消耗或消耗中断(这里的无消耗是指没有下发凭证,消耗中断是指凭证下发处理中途中止),因此,需要在一段时间后强制从宕机或有问题的服务器上对加载的凭证进行放回数据库的操作,以保证集群中其他有能力的服务器可以及时获取到宝贵资源。
在本申请另一实施例中,本申请实施例的凭证数据发放方法还可以包括:
当所述缓存队列内的凭证个数低于设定值时,异步加载一个新的当前未被锁定的凭证组标识至所述缓存队列,以提高凭证发放效率,防止出现缓存队列中无凭证可发放而导致服务器空闲等待。
在本申请另一实施例中,本申请实施例的凭证数据发放方法还可以包括:
在多凭证发放线程环境下,当同时有多个缓存队列内的凭证个数低于设定值时,同时只有一个凭证发放线程进行异步加载。多线程下,只允许一个线程进行异步加载的目的是为了保证缓存队列的长度不会太长。
在本申请实施例中,所述凭证组标识包括所述凭证组标识所对应凭证组的分表分组位,所述分表分组位表示所述凭证组标识对应的凭证组所属的凭证数据表的标识及其在该凭证数据表中所属的分组的标识,因此,该分表分组位在作为凭证组识别标识的同时,还兼作为路由查询位置,从而有利于提高系统的凭证发放处理效率。
在本申请实施例中,各个凭证组可预先根据凭证组标识存入数据库(DB),而每个所述凭证组标识可预先通过以下方式获得:
获取一个待处理的凭证;
将所述待处理的凭证的特征信息进行哈希运算(HASH),获取特征映射值;其中,所述凭证的特征信息包括:凭证标识和/或凭证密码;其中,凭证标识例如可以是凭证卡号。
取所述特征映射值的绝对值,并将该绝对值对预设的凭证数据表数量进行取模,获得所述待处理的凭证所属的分表位;
根据函数y=α/β*γ+1,获取单个凭证数据表的分组上限y,其中,α为预设的凭证总数量,β为预设的凭证数据表数量,γ为预设的单个凭证组内的凭证上限;
取所述单个凭证数据表的分组上限y内的随机数作为所述待处理的凭证所属凭证组在对应分表位内的分组标识。
比如当前有1亿个凭证需存入数据库,假设当前一个凭证的卡号为QSER1342ERT,则对该值先做HASH,然后取绝对值,再将获得的绝对值对预设的分表个数1000进行取模,假设可得到的分表位为984。假设根据上述公式计算得到的单个凭证数据表的分组上限为1000,并且当前取到的该单个凭证数据表的分组上限内的随机数为999,则该凭证所述的凭证组的凭证组标识即为984_999,其代表该凭证所属的凭证组在第984表的第999个分组中。
通过上述方式获得的凭证组标识可以有利于将这些凭证组均匀的写入到数据库的分表分组中存储,以防止产生数据倾斜。此外,由于既要保障系统尽量高效的运行,又尽量小的产生碎片,必须给单个凭证组内的凭证上限设定一个合理的值。比如一集群处理请求的能力是10万个/秒,该集群有1000台服务器,则每台服务器每秒需要处理10万/1000=100个请求。如果1秒加载10个请求进一台服务器,则1秒中内仅会有10次请求I/O到数据库进行加载,效率较低,而如果我们1秒加载1000个请求一台进服务器,虽然数据库的加载性能提高了,但是该台服务器的瞬间内存消耗较高,从而容易出现故障(比如宕机)。而一旦服务器宕机,或者集群的处理负载不均,或者业务流量突然进入低谷,则可能会导致大量的凭证积压在集群中的一台或多台服务器上无法发放,而集群中其他正常的服务器这个时候即使加载了请求也有可能因为没有凭证可加载而导致业务处理失败。因此,单个凭证组内的凭证上限应该尽量的与集群的处理能力相匹配。
此外,基于上述凭证组标识获得方式,在每个凭证进行入库存储时,当生成凭证组标识后,要先查询数据库中是否以存在相同的凭证组标识,如果不存在,则先将新生成的凭证组标识写入,再将该凭证对应写入;而如果已存在相同的凭证组标识,则直接将该凭证对应写入即可。
虽然上文描述的过程流程包括以特定顺序出现的多个操作,但是,应当清楚了解,这些过程可以包括更多或更少的操作,这些操作可以顺序执行或并行执行(例如使用并行处理器或多线程环境)。
本申请实施例的凭证数据发放方法中,所有待发放的凭证被预先划分成若干个凭证组存储于数据库中,其中每个凭证组对应有一个凭证组标识,在获取凭证访问请求后,查询凭证组标识的当前状态,如果查询到当前凭证组标识的状态为未锁定状态,则选择该当前未被锁定的凭证组标识;并进一步判断当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;如果有,则将当前未被锁定的凭证组标识的状态更新为锁定状态,然后将该凭证组标识对应的凭证组的内凭证组加载入缓存队列以供发放。由一旦凭证组标识被锁定,在锁定状态下,其对应凭证组内所有未发放的凭证只能被锁定该凭证组标识的那个服务器使用,因此,即使在高并发访问的情况下,同一个凭证组标识下的所有未发放的凭证也不可能有其他服务器竞争,因此,本申请实施例极大的降低了凭证发放失败的概率。此外,由于本申请实施例的凭证数据发放方法还设置有凭证过期回收机制,该凭证过期回收机制可在设定时间达到后强制有问题的服务器上对加载的凭证进行放回数据库的操作,以保证集群中其他有能力的服务器可以及时获取到宝贵资源,从而进一步降低了凭证发放失败的概率。
本申请实施例的凭证数据发放系统包括凭证数据发放装置,结合图2所示,该凭证数据发放装置包括:
访问请求获取单元21,用于获取凭证访问请求。在本申请的一个实施例中,凭证访问请求可以是用户通过PC终端、移动终端(比如智能手机、笔记本电脑、平板电脑等)、自助服务终端等终端在线发起的,在本申请的另一个实施例中,凭证访问请求也可以是用户通过安装于这些终端上的客户端发起的。
凭证组标识锁定单元22,用于从多个凭证组标识中确定一个当前未被锁定的凭证组标识。本申请实施例中,所有待发放的凭证被预先划分成若干个凭证组存储于数据库中,其中每个凭证组对应有一个凭证组标识。在访问请求获取单元21获取凭证访问请求后,凭证组标识锁定单元22查询凭证组标识的当前状态,如果查询到当前凭证组标识的状态为未锁定状态,则选择该当前未被锁定的凭证组标识;而如果查询到当前凭证组标识的状态为锁定状态,则继续查询下一个凭证组标识的状态并进行类似的判断,以选择出一个当前未被锁定的凭证组标识。
凭证组标识更新单元23,用于判断所述当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;如果有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为锁定状态。通过查询当前未被锁定的凭证组标识对应的凭证组内的凭证的状态可以获知当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证。一旦凭证组标识被锁定,集群中的其他服务器均不能选定该凭证组标识,除非该凭证组标识状态发生变化,即被更新为未锁定状态,以防止出现凭证组标识选择冲突。
凭证加载单元24,用于将所述未发放的凭证加载至缓存队列。一般的,将所述当前未被锁定的凭证组标识对应的凭证组内所有未发放的凭证全部加载入缓存队列。
凭证发放单元25,用于将所述缓存队列内的指定凭证发放给所述凭证访问请求所对应的用户,并将所述指定凭证的状态更新为已发放。一般的,凭证发放可以是针对一个请求发放一个凭证,所述的指定凭证,一般为缓存队列内的第一个凭证,当然,根据需要也可以是一个请求发放多个凭证,比如针对一请求发放5个凭证,则此时指定凭证则可以为缓存队列内的前5个凭证。在本申请实施例中,每个凭证组内的凭证一旦被发放,该凭证的状态就会被更新为已发放状态,以防止已发放的凭证后续被重复发放。
在本申请另一实施例中,所述凭证组标识更新单元还可以用于当所述当前未被锁定的凭证组标识对应的凭证组内没有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为不可用状态。而一旦当前未被锁定的凭证组标识对应的凭证组内没有未发放的凭证,则说明该凭证组标识对应的凭证组内的凭证已全部发放,因此,该凭证组标识应状态更新为不可用状态,以免其被再次选择而浪费系统资源。
在本申请另一实施例中,为了防止单个服务器加载凭证后由于自身宕机或者集群出现了负载不均而导致的凭证无消耗或消耗中断(这里的无消耗是指没有下发凭证,消耗中断是指凭证下发处理中途中止),因此,需要在一段时间后强制从宕机或有问题的服务器上对加载的凭证进行放回数据库的操作,以保证集群中其他有能力的服务器可以及时获取到宝贵资源。所述凭证组标识更新单元还用于在所述将所述未发放的凭证加载至缓存队列之后,判断当前所述缓存队列是否超出预设的缓存更新时间;如果超出,则清空所述缓存队列,并将该缓存队列中的每个凭证所对应的凭证组标识的状态更新为未锁定状态。
在本申请另一实施例中,所述凭证组标识更新单元判断当前所述缓存队列是否超出预设的缓存更新时间,包括:
所述凭证组标识更新单元依据当前所述缓存队列中第一个凭证的加载入队时间(加载入队时,每个凭证都有一个加载入队时间)判断该缓存队列是否超出预设的缓存更新时间。
在本申请另一实施例中,所述锁定状态包括锁定时间;
对应的,如果当前所述缓存队列未超出预设的缓存更新时间,则所述凭证组标识更新单元可将当前所述缓存队列内每个凭证所对应的凭证组标识的锁定时间更新为当前时间。这里更新为当前时间,是指集群中某台处理器,在维护本地的凭证缓存队列共业务调用消耗的过程中,如果凭证缓存队列的数量较低的时候,就需要预加载一批凭证上来以防止本地缓存队列马上就要为空从而导致业务失败的情况,那么这台处理器就需要去查询一个可用的凭证组,确定其可用的前提下,先更新数据库状态,在这条凭证组记录上机器名和时间,这样,则其他处理器则不可再使用这批凭证,保证凭证使用时候的唯一性。
在本申请另一实施例中,所述凭证加载单元还用于当所述缓存队列内的凭证个数低于设定值时,异步加载一个新的当前未被锁定的凭证组标识至所述缓存队列,以提高凭证发放效率,防止出现缓存队列中无凭证可发放而导致服务器空闲等待。
在本申请另一实施例中,在多凭证发放线程环境下,当同时有多个缓存队列内的凭证个数低于设定值时,所述凭证加载单元同时只对一个凭证发放线程进行异步加载。多线程下,只允许一个线程进行异步加载的目的是为了保证缓存队列的长度不会太长。
在本申请另一实施例中,所述凭证组标识包括所述凭证组标识所对应凭证组的分表分组位,所述分表分组位表示所述凭证组标识对应的凭证组所属的凭证数据表的标识及其在该凭证数据表中所属的分组的标识。因此,该分表分组位在作为凭证组识别标识的同时,还兼作为路由查询位置,从而有利于提高系统的凭证发放处理效率。
在本申请实施例中,各个凭证组可预先根据凭证组标识存入数据库(DB),而每个所述凭证组标识可预先通过以下方式获得:
获取一个待处理的凭证;
将所述待处理的凭证的特征信息进行哈希运算(HASH),获取特征映射值;其中,所述凭证的特征信息包括:凭证标识和/或凭证密码;其中,凭证标识例如可以是凭证卡号。
取所述特征映射值的绝对值,并将该绝对值对预设的凭证数据表数量进行取模,获得所述待处理的凭证所属的分表位;
根据函数y=α/β*γ+1,获取单个凭证数据表的分组上限y,其中,α为预设的凭证总数量,β为预设的凭证数据表数量,γ为预设的单个凭证组内的凭证上限;
取所述单个凭证数据表的分组上限y内的随机数作为所述待处理的凭证所属凭证组在对应分表位内的分组标识。
比如当前有1亿个凭证需存入数据库,假设当前一个凭证的卡号为QSER1342ERT,则对该值先做HASH,然后取绝对值,再将获得的绝对值对预设的分表个数1000进行取模,假设可得到的分表位为984。假设根据上述公式计算得到的单个凭证数据表的分组上限为1000,并且当前取到的该单个凭证数据表的分组上限内的随机数为999,则该凭证所述的凭证组的凭证组标识即为984_999,其代表该凭证所属的凭证组在第984表的第999个分组中。
通过上述方式获得的凭证组标识可以有利于将这些凭证组均匀的写入到数据库的分表分组中存储,以防止产生数据倾斜。此外,由于既要保障系统尽量高效的运行,又尽量小的产生碎片,必须给单个凭证组内的凭证上限设定一个合理的值。比如一集群处理请求的能力是10万个/秒,该集群有1000台服务器,则每台服务器每秒需要处理10万/1000=100个请求。如果1秒加载10个请求进一台服务器,则1秒中内仅会有10次请求I/O到数据库进行加载,效率较低,而如果我们1秒加载1000个请求一台进服务器,虽然数据库的加载性能提高了,但是该台服务器的瞬间内存消耗较高,从而容易出现故障(比如宕机)。而一旦服务器宕机,或者集群的处理负载不均,或者业务流量突然进入低谷,则可能会导致大量的凭证积压在集群中的一台或多台服务器上无法发放,而集群中其他正常的服务器这个时候即使加载了请求也有可能因为没有凭证可加载而导致业务处理失败。所以单个凭证组内的凭证上限应该尽量的与集群的处理能力相匹配。
此外,基于上述凭证组标识获得方式,在每个凭证进行入库存储时,当生成凭证组标识后,要先查询数据库中是否以存在相同的凭证组标识,如果不存在,则先将新生成的凭证组标识写入,再将该凭证对应写入;而如果已存在相同的凭证组标识,则直接将该凭证对应写入即可。
本申请实施例的凭证数据发放装置中,所有待发放的凭证被预先划分成若干个凭证组存储于数据库中,其中每个凭证组对应有一个凭证组标识,在访问请求获取单元获取凭证访问请求后,凭证组标识锁定单元查询凭证组标识的当前状态,如果查询到当前凭证组标识的状态为未锁定状态,则选择该当前未被锁定的凭证组标识;凭证组标识更新单元判断当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;如果有,则将当前未被锁定的凭证组标识的状态更新为锁定状态,然后凭证加载单元将该凭证组标识对应的凭证组的内凭证组加载入缓存队列以供凭证发放单元发放。由一旦凭证组标识被锁定,在锁定状态下,其对应凭证组内所有未发放的凭证只能被锁定该凭证组标识的那个服务器使用,因此,即使在高并发访问的情况下,同一个凭证组标识下的所有未发放的凭证也不可能有其他服务器竞争,因此,本申请实施例极大的降低了凭证发放失败的概率。此外,由于本申请实施例的凭证数据发放装置中的凭证组标识更新单元还用于凭证过期回收,其可在设定时间达到后强制有问题的服务器上对加载的凭证进行放回数据库的操作,以保证集群中其他有能力的服务器可以及时获取到宝贵资源,从而进一步降低了凭证发放失败的概率。
本领域技术人员还可以了解到本申请实施例列出的各种说明性逻辑块、单元和步骤可以通过硬件、软件或两者的结合来实现。至于是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本申请实施例保护的范围。
本申请实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(ASIC),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。
本申请实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于ASIC中,ASIC可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。
在一个或多个示例性的设计中,本申请实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于RAM、ROM、EEPROM、CD-ROM或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(DSL)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、DVD、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。
以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请实施例的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (23)

1.一种凭证数据发放方法,其特征在于,包括以下步骤:
获取凭证访问请求;
从多个凭证组标识中确定一个当前未被锁定的凭证组标识;
判断所述当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;
如果有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为锁定状态;
将所述未发放的凭证加载至缓存队列;
将所述缓存队列内的指定凭证发放给所述凭证访问请求所对应的用户,并将所述指定凭证的状态更新为已发放。
2.根据权利要求1所述的凭证数据发放方法,其特征在于,还包括:
如果所述当前未被锁定的凭证组标识对应的凭证组内没有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为不可用状态。
3.根据权利要求1所述的凭证数据发放方法,其特征在于,在所述将所述未发放的凭证加载至缓存队列之后,还包括:
判断当前所述缓存队列是否超出预设的缓存更新时间;
如果超出,则清空所述缓存队列,并将该缓存队列中的每个凭证所对应的凭证组标识的状态更新为未锁定状态。
4.根据权利要求3所述的凭证数据发放方法,其特征在于,所述判断当前所述缓存队列是否超出预设的缓存更新时间,包括:
依据当前所述缓存队列中第一个凭证的加载入队时间判断该缓存队列是否超出预设的缓存更新时间。
5.根据权利要求3或4所述的凭证数据发放方法,其特征在于,所述锁定状态包括锁定时间;
对应的,如果当前所述缓存队列未超出预设的缓存更新时间,则将当前所述缓存队列内每个凭证所对应的凭证组标识的锁定时间更新为当前时间。
6.根据权利要求1所述的凭证数据发放方法,其特征在于,还包括:
当所述缓存队列内的凭证个数低于设定值时,异步加载一个新的当前未被锁定的凭证组标识至所述缓存队列。
7.根据权利要求6所述的凭证数据发放方法,其特征在于,还包括:
在多凭证发放线程环境下,当同时有多个缓存队列内的凭证个数低于设定值时,同时只有一个凭证发放线程进行异步加载。
8.根据权利要求1所述的凭证数据发放方法,其特征在于,所述凭证组标识包括所述凭证组标识所对应凭证组的分表分组位,所述分表分组位表示所述凭证组标识对应的凭证组所属的凭证数据表的标识及其在该凭证数据表中所属的分组的标识。
9.根据权利要求8所述的凭证数据发放方法,其特征在于,每个所述凭证组标识预先通过以下方式获得:
获取一个待处理的凭证;
将所述待处理的凭证的特征信息进行哈希运算,获取特征映射值;
取所述特征映射值的绝对值,并将该绝对值对预设的凭证数据表数量进行取模,获得所述待处理的凭证所属的分表位;
根据函数y=α/β*γ+1,获取单个凭证数据表的分组上限y,其中,α为预设的凭证总数量,β为预设的凭证数据表数量,γ为预设的单个凭证组内的凭证上限;
取所述单个凭证数据表的分组上限y内的随机数作为所述待处理的凭证所属凭证组在对应分表位内的分组标识。
10.根据权利要求9所述的凭证数据发放方法,其特征在于,所述预设的单个凭证组内的凭证上限与系统的处理能力相匹配。
11.根据权利要求9所述的凭证数据发放方法,其特征在于,所述凭证的特征信息包括:凭证标识和/或凭证密码。
12.一种凭证数据发放装置,其特征在于,包括:
访问请求获取单元,用于获取凭证访问请求;
凭证组标识锁定单元,用于从多个凭证组标识中确定一个当前未被锁定的凭证组标识;
凭证组标识更新单元,用于判断所述当前未被锁定的凭证组标识对应的凭证组内是否有未发放的凭证;如果有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为锁定状态;
凭证加载单元,用于将所述未发放的凭证加载至缓存队列;
凭证发放单元,用于将所述缓存队列内的指定凭证发放给所述凭证访问请求所对应的用户,并将所述指定凭证的状态更新为已发放。
13.根据权利要求12所述的凭证数据发放装置,其特征在于,所述凭证组标识更新单元还用于当所述当前未被锁定的凭证组标识对应的凭证组内没有未发放的凭证,则将所述当前未被锁定的凭证组标识的状态更新为不可用状态。
14.根据权利要求12所述的凭证数据发放装置,其特征在于,所述凭证组标识更新单元还用于在所述将所述未发放的凭证加载至缓存队列之后,判断当前所述缓存队列是否超出预设的缓存更新时间;如果超出,则清空所述缓存队列,并将该缓存队列中的每个凭证所对应的凭证组标识的状态更新为未锁定状态。
15.根据权利要求14所述的凭证数据发放装置,其特征在于,所述凭证组标识更新单元判断当前所述缓存队列是否超出预设的缓存更新时间,包括:
所述凭证组标识更新单元依据当前所述缓存队列中第一个凭证的加载入队时间判断该缓存队列是否超出预设的缓存更新时间。
16.根据权利要求14或15所述的凭证数据发放装置,其特征在于,所述锁定状态包括锁定时间;
对应的,如果当前所述缓存队列未超出预设的缓存更新时间,则所述凭证组标识更新单元将当前所述缓存队列内每个凭证所对应的凭证组标识的锁定时间更新为当前时间。
17.根据权利要求12所述的凭证数据发放装置,其特征在于,所述凭证加载单元还用于当所述缓存队列内的凭证个数低于设定值时,异步加载一个新的当前未被锁定的凭证组标识至所述缓存队列。
18.根据权利要求17所述的凭证数据发放装置,其特征在于,还包括:
在多凭证发放线程环境下,当同时有多个缓存队列内的凭证个数低于设定值时,所述凭证加载单元同时只对一个凭证发放线程进行异步加载。
19.根据权利要求12所述的凭证数据发放装置,其特征在于,所述凭证组标识包括所述凭证组标识所对应凭证组的分表分组位,所述分表分组位表示所述凭证组标识对应的凭证组所属的凭证数据表的标识及其在该凭证数据表中所属的分组的标识。
20.根据权利要求19所述的凭证数据发放装置,其特征在于,每个所述凭证组标识预先通过以下方式获得:
获取一个待处理的凭证;
将所述待处理的凭证的特征信息进行哈希运算,获取特征映射值;
取所述特征映射值的绝对值,并将该绝对值对预设的凭证数据表数量进行取模,获得所述待处理的凭证所属的分表位;
根据函数y=α/β*γ+1,获取单个凭证数据表的分组上限y,其中,α为预设的凭证总数量,β为预设的凭证数据表数量,γ为预设的单个凭证组内的凭证上限;
取所述单个凭证数据表的分组上限y内的随机数作为所述待处理的凭证所属凭证组在对应分表位内的分组标识。
21.根据权利要求20所述的凭证数据发放装置,其特征在于,所述预设的单个凭证组内的凭证上限与系统的处理能力相匹配。
22.根据权利要求20所述的凭证数据发放装置,其特征在于,所述凭证的特征信息包括:凭证标识和/或凭证密码。
23.一种凭证数据发放系统,其特征在于,其包括权利要求12-22任一项所述的凭证数据发放装置。
CN201610152835.8A 2016-03-17 2016-03-17 凭证数据发放方法、装置及系统 Active CN107203890B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610152835.8A CN107203890B (zh) 2016-03-17 2016-03-17 凭证数据发放方法、装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610152835.8A CN107203890B (zh) 2016-03-17 2016-03-17 凭证数据发放方法、装置及系统

Publications (2)

Publication Number Publication Date
CN107203890A true CN107203890A (zh) 2017-09-26
CN107203890B CN107203890B (zh) 2021-02-23

Family

ID=59903750

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610152835.8A Active CN107203890B (zh) 2016-03-17 2016-03-17 凭证数据发放方法、装置及系统

Country Status (1)

Country Link
CN (1) CN107203890B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109214884A (zh) * 2018-08-02 2019-01-15 阿里巴巴集团控股有限公司 需求撮合方法及装置、电子设备
CN110956484A (zh) * 2018-09-27 2020-04-03 北京嘀嘀无限科技发展有限公司 对象发放方法、装置及设备
CN114598484A (zh) * 2020-12-01 2022-06-07 中移(苏州)软件技术有限公司 一种证书更新方法、装置、集群及存储介质

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1360703A (zh) * 1999-07-06 2002-07-24 达纳·B·邓肯 用于交易业务的在线交互式系统与方法
CN101989213A (zh) * 2009-08-07 2011-03-23 阿里巴巴集团控股有限公司 账户并发处理方法及账户并发处理系统
CN102436441A (zh) * 2010-10-26 2012-05-02 微软公司 同步在线文档编辑
CN103248667A (zh) * 2012-02-14 2013-08-14 阿里巴巴集团控股有限公司 一种分布式系统的资源访问方法和系统
CN103297456A (zh) * 2012-02-24 2013-09-11 阿里巴巴集团控股有限公司 一种分布式系统下共享资源的访问方法及分布式系统
CN103825835A (zh) * 2013-11-29 2014-05-28 中邮科通信技术股份有限公司 一种互联网高并发秒杀系统
CN104065636A (zh) * 2013-07-02 2014-09-24 腾讯科技(深圳)有限公司 数据处理方法和系统
CN104809510A (zh) * 2015-05-21 2015-07-29 武汉大学 一种提供票务支持的票池中间件的构建、购票及锁票方法
CN105005624A (zh) * 2015-07-31 2015-10-28 天脉聚源(北京)传媒科技有限公司 一种生成索引文档id的方法及装置

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1360703A (zh) * 1999-07-06 2002-07-24 达纳·B·邓肯 用于交易业务的在线交互式系统与方法
CN101989213A (zh) * 2009-08-07 2011-03-23 阿里巴巴集团控股有限公司 账户并发处理方法及账户并发处理系统
CN102436441A (zh) * 2010-10-26 2012-05-02 微软公司 同步在线文档编辑
CN103248667A (zh) * 2012-02-14 2013-08-14 阿里巴巴集团控股有限公司 一种分布式系统的资源访问方法和系统
CN103297456A (zh) * 2012-02-24 2013-09-11 阿里巴巴集团控股有限公司 一种分布式系统下共享资源的访问方法及分布式系统
CN104065636A (zh) * 2013-07-02 2014-09-24 腾讯科技(深圳)有限公司 数据处理方法和系统
CN103825835A (zh) * 2013-11-29 2014-05-28 中邮科通信技术股份有限公司 一种互联网高并发秒杀系统
CN104809510A (zh) * 2015-05-21 2015-07-29 武汉大学 一种提供票务支持的票池中间件的构建、购票及锁票方法
CN105005624A (zh) * 2015-07-31 2015-10-28 天脉聚源(北京)传媒科技有限公司 一种生成索引文档id的方法及装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109214884A (zh) * 2018-08-02 2019-01-15 阿里巴巴集团控股有限公司 需求撮合方法及装置、电子设备
CN109214884B (zh) * 2018-08-02 2022-04-15 创新先进技术有限公司 需求撮合方法及装置、电子设备
CN110956484A (zh) * 2018-09-27 2020-04-03 北京嘀嘀无限科技发展有限公司 对象发放方法、装置及设备
CN114598484A (zh) * 2020-12-01 2022-06-07 中移(苏州)软件技术有限公司 一种证书更新方法、装置、集群及存储介质
CN114598484B (zh) * 2020-12-01 2024-03-19 中移(苏州)软件技术有限公司 一种证书更新方法、装置、集群及存储介质

Also Published As

Publication number Publication date
CN107203890B (zh) 2021-02-23

Similar Documents

Publication Publication Date Title
US20220188332A1 (en) Distributed transaction database log with immediate reads and batched writes
CN105247529B (zh) 在目录服务之间同步凭证散列
CN105205014B (zh) 一种数据存储方法和装置
US8635250B2 (en) Methods and systems for deleting large amounts of data from a multitenant database
KR101959153B1 (ko) 데이터베이스에서의 계좌와 관련된 거래 요청의 효율적인 처리를 위한 시스템
CN103020257B (zh) 数据操作的实现方法和装置
JP2020521252A (ja) シャード化された許可型の分散型台帳
CN107395665A (zh) 一种区块链业务受理及业务共识方法及装置
WO2020181810A1 (zh) 应用于集群内多级缓存的数据处理方法和装置
CN108900464A (zh) 电子装置、基于区块链的数据处理方法和计算机存储介质
EP3380937A1 (en) Techniques for analytics-driven hybrid concurrency control in clouds
CN110399383A (zh) 应用于服务器的数据处理方法、装置、计算设备、介质
CN104798045B (zh) 用于在并行优先级队列中使用定序器的系统和方法
JP2004303211A (ja) データベース結果および導出オブジェクトをキャッシュし、無効にするためのシステムおよび方法
CN103312624A (zh) 一种消息队列服务系统和方法
KR102139551B1 (ko) 유언장을 관리하는 서버 및 방법
CN111416825A (zh) 线程间无锁日志管理方法和系统、终端、存储介质
CN105683928A (zh) 多承租人企业资源规划系统中的数据高速缓存策略
CN107203890A (zh) 凭证数据发放方法、装置及系统
CN106936931A (zh) 分布式锁的实现方法、相关设备及系统
CN101763390A (zh) 基于Berkeley DB的数据库存储系统及方法
WO2016078388A1 (zh) 一种数据老化方法及装置
US8127079B2 (en) Intelligent cache injection
CN107408239A (zh) 通过多个邮箱在通信应用中进行海量数据管理的架构
CN104063271A (zh) 具有事务能力的排队

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1244575

Country of ref document: HK

TA01 Transfer of patent application right

Effective date of registration: 20200925

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20200925

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Applicant after: Advanced innovation technology Co.,Ltd.

Address before: Greater Cayman, British Cayman Islands

Applicant before: Alibaba Group Holding Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant