著录项信息
专利名称 | 一种彩票兑奖方法 |
申请号 | CN201610875837.X | 申请日期 | 2016-09-30 |
法律状态 | 授权 | 申报国家 | 暂无 |
公开/公告日 | 2017-02-22 | 公开/公告号 | CN106447883A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G07C15/00 | IPC分类号 | G;0;7;C;1;5;/;0;0查看分类表>
|
申请人 | 北京中体骏彩信息技术有限公司 | 申请人地址 | 北京市朝阳区东三环南路23号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京中体骏彩信息技术有限公司 | 当前权利人 | 北京中体骏彩信息技术有限公司 |
发明人 | 刘传博 |
代理机构 | 北京华夏正合知识产权代理事务所(普通合伙) | 代理人 | 韩登营;张焕亮 |
摘要
本发明提供了一种彩票兑奖方法,包括步骤:A、当彩票的销售时间在竞猜赛事开赛之前的指定时间时,在彩票兑奖前提前读取所述彩票到缓存中;B、彩票兑奖时,读取所述缓存中的彩票。由上,本发明极大的减少了彩票兑奖时磁盘IO的操作频率,提高了彩票兑奖的效率。
1.一种彩票兑奖的方法,包括创建一个用于进行彩票缓存的兑奖缓存区,其特征在于,还包括步骤:
A、彩票兑奖时,判断所述彩票是否预先存储在兑奖缓存区;若是,则从所述兑奖缓存区读取该兑奖的彩票;
B、若否,则在从磁盘中读取该兑奖的彩票的同时,判断该兑奖的彩票是否为在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票;若是,将该兑奖的彩票在磁盘中的相邻位置的指定数量的彩票读取到兑奖缓存区。
2.根据权利要求1所述的方法,其特征在于,创建的所述兑奖缓存区包括各个逻辑单元;
其中,每个逻辑单元可以存储指定数量的彩票;
其中,根据在竞猜赛事开赛之前销售的彩票的数量确定逻辑单元的数量;
所述步骤A之前,还包括:
初始化指定数量的用于管理所述逻辑单元的哈希槽。
3.根据权利要求2所述的方法,其特征在于,步骤A所述读取该兑奖彩票包括:
a、根据彩票的票号定位所述哈希槽;
b、在所述哈希槽中定位该彩票;若定位成功则将所述彩票的票号与所述哈希槽中定位的该彩票建立映射关系,以读取该兑奖彩票。
4.根据权利要求3所述的方法,其特征在于,步骤b还包括:
若定位失败则自动获取一个空闲节点,并将该空闲节点分配到该哈希槽中。
5.根据权利要求3所述的方法,其特征在于,所述定位所述哈希槽的公式为:
(彩票在投注文件中的偏移量/逻辑单元大小)×(1/N)
其中,N为哈希槽的个数。
6.根据权利要求4所述的方法,其特征在于,所述空闲节点的获取方法包括以下任一项:
在兑奖缓存区查找并获取空闲节点、
在步骤a中定位的哈希槽中回收可以利用的节点、或者
在所述兑奖缓存区除所述步骤a中定位的哈希槽之外的其他哈希槽中回收可以利用的节点。
7.根据权利要求3所述的方法,其特征在于,所述哈希槽为设置有双向链表的哈希槽。
8.根据权利要求3或7所述的方法,其特征在于,所述在哈希槽中定位彩票,包括:
使用跳表的方式查找彩票。
9.根据权利要求8所述的方法,其特征在于,所述使用跳表的方式查找彩票,具体为:
分别将指定数量的彩票设置为带有标识的各个跳表节点;
根据所述标识查找跳表节点;
在查找到的跳表节点中进一步查找彩票。
一种彩票兑奖方法\n技术领域\n[0001] 本发明涉及彩票兑奖管理技术领域,特别涉及一种彩票兑奖方法。\n背景技术\n[0002] 随着竞猜彩票行业的蓬勃发展,吸引了越来越多的彩民的关注,然而,目前的竞猜彩票的兑奖方式需要频繁读取存储上的彩票文件,例如,每次兑奖都需要读取一次彩票,进行一次磁盘IO操作,查票速度慢,兑奖性能低。因此,目前亟需设计一种根据竞猜彩票特殊业务场景,优化读取存储的方式,减少磁盘IO操作,并有效利用缓存管理彩票,提高兑奖性能。\n发明内容\n[0003] 有鉴于此,本发明的主要目的在于,提供一种彩票兑奖方法,包括步骤:\n[0004] A、彩票兑奖时,判断所述彩票是否预先存储在兑奖缓存区;若是,则从所述兑奖缓存区读取该兑奖的彩票;\n[0005] B、若否,则在从磁盘中读取该兑奖的彩票的同时,判断该兑奖的彩票是否为在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票;若是,将该兑奖的彩票在磁盘中的相邻位置的指定数量的彩票读取到兑奖缓存区。\n[0006] 由上,由于在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票通常会集中兑奖,因此会造成频繁的磁盘IO操作,导致兑奖性能降低。因此,在彩票兑奖时,若当前兑奖的彩票为在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票;则在对该当前彩票兑奖读取的同时,将该兑奖的彩票在磁盘中的相邻位置的指定数量的彩票读取到兑奖缓存区。在下次彩票兑奖时,可以从兑奖缓存区直接读取,减少磁盘IO的操作,提高了兑奖性能。\n[0007] 优选地,所述步骤A之前,还包括:\n[0008] 创建一个兑奖缓存区;所述兑奖缓存区包括各个逻辑单元;\n[0009] 其中,每个逻辑单元可以存储指定数量的彩票;\n[0010] 其中,根据在竞猜赛事开赛之前销售的彩票的数量确定逻辑单元的数量;\n[0011] 初始化指定数量的用于管理所述逻辑单元的哈希槽。\n[0012] 由上,兑奖缓存区可以提前存取彩票,以供兑奖时直接读取,减少兑奖时磁盘IO的操作。使用逻辑单元管理保证了同一张彩票不需要读取两次投注文件。初始化指定数量的用于管理所述逻辑单元的哈希槽。\n[0013] 优选地,步骤A所述读取该兑奖彩票包括:\n[0014] a、根据彩票的票号定位所述哈希槽;\n[0015] b、在所述哈希槽中定位该彩票;若定位成功则将所述彩票的票号与所述哈希槽中定位的该彩票建立映射关系,以读取该兑奖彩票。\n[0016] 优选地,步骤b还包括:\n[0017] 若定位失败则自动获取一个空闲节点,并将该空闲节点分配到该哈希槽中。\n[0018] 优选地,所述定位所述哈希槽的公式为:\n[0019] (彩票在投注文件中的偏移量/逻辑单元大小)×(1/N)\n[0020] 其中,N为哈希槽的个数。\n[0021] 优选地,所述空闲节点的获取方法包括以下任一项:\n[0022] 在兑奖缓存区查找并获取空闲节点、\n[0023] 在步骤a中定位的哈希槽中回收可以利用的节点、或者\n[0024] 在所述兑奖缓存区除所述步骤a中定位的哈希槽之外的其他哈希槽中回收可以利用的节点。\n[0025] 优选地,所述哈希槽为设置有双向链表的哈希槽。\n[0026] 由上,通过将哈希槽为设置有双向链表的哈希槽。以解决HASH冲突的问题。\n[0027] 优选地,所述在哈希槽中定位彩票,包括:\n[0028] 使用跳表的方式查找彩票。\n[0029] 优选地,所述使用跳表的方式查找彩票,具体为:\n[0030] 分别将指定数量的彩票设置为带有标识的各个跳表节点;\n[0031] 根据所述标识查找跳表节点;\n[0032] 在查找到的跳表节点中进一步查找彩票。\n[0033] 由上,有利于快速查找彩票。\n[0034] 综上所述,本发明极大的减少了彩票兑奖时磁盘IO的操作,提高了彩票兑奖的效率。\n附图说明\n[0035] 图1为本申请的彩票兑奖方法的流程图;\n[0036] 图2为本申请的哈希槽的示意图;\n[0037] 图3为本申请的异步读取彩票的流程图。\n具体实施方式\n[0038] 本申请通过使用适合竞猜彩票的异步读取和缓存管理方法,把彩民可能集中兑奖的彩票提前缓存到内存中,并使用HASH算法快速定位彩票,极大的减少了异步读取票文件的次数和缓存的命中率。\n[0039] 例如,根据竞猜彩票售票特性,会有大约60%的彩票集中在开赛前的一段时间内集中销售。本申请在处理兑奖请求时,若当前兑奖的彩票的销售时间在赛事的开赛之前H小时内时;则会提前读取该兑奖彩票在磁盘中临近位置的彩票到缓存中;其中,H可以根据实际环境配置;在后续的彩票的兑奖时,可以直接读取该缓存中的彩票,减少了磁盘IO操作,提高了兑奖性能。\n[0040] 具体地方法的步骤如下:\n[0041] S101,创建一个兑奖缓存区;所述兑奖缓存区包括多个逻辑单元;其中,每个逻辑单元可以存储指定数量的彩票;初始化指定数量的用于管理所述逻辑单元的哈希槽。其中,根据在竞猜赛事开赛之前销售的彩票的数量确定逻辑单元的数量。哈希槽管理的是一个逻辑单元的列表,每张彩票会根据彩票在投注文件中的位置和逻辑单元大小,确定从投注文件中异步读出后保存的逻辑单元,然后把该逻辑单元使用哈希槽管理。在应用启动时,创建成功哈希槽后,把每个槽进行初始化,默认不管理任何逻辑单元。例如,创建一个可以支持M个逻辑单元的兑奖缓存区M0,每个逻辑单元可以保存多张彩票。其中M的大小可以根据实际票量进行配置,默认为800000。如图2所示,初始化一个HASH槽的数组,槽的个数为N个,用于管理兑奖缓存中的逻辑单元,初始的时候每个槽都是空的。\n[0042] S102,彩票兑奖时,判断所述彩票是否预先存储在兑奖缓存区;若是,则执行S103,读取该兑奖的彩票;若否,则执行S104。\n[0043] S103,读取该兑奖的彩票,具体包括:\n[0044] a、兑奖缓存管理器根据HASHKEY定位哈希槽;其中,定位所述哈希槽的公式为:\n[0045] (彩票在投注文件中的偏移量/逻辑单元大小)×(1/N)\n[0046] 其中,彩票在投注文件中的偏移量为彩票在投注文件中的位置。逻辑单元大小为逻辑单元存储的彩票的量。N为哈希槽的个数。\n[0047] 每天使用一个投注文件保存当天的彩票,可以根据票号确定彩票在投注文件中的位置信息。每张彩票会根据彩票在投注文件中的位置和逻辑单元大小,确定从投注文件中异步读出后保存的逻辑单元,各个的逻辑单元由相应的哈希槽管理。\n[0048] 其中,每个逻辑单元可以保存多张彩票,使用逻辑单元管理是为了确保同一张彩票不需要读取两次投注文件,即同一张彩票确保可以保存在同一个逻辑单元中,如果当前使用的逻辑单元剩余的位置无法保存一张彩票,则把该彩票保存到下一个逻辑单元,当前逻辑单元的剩余位置不再使用。\n[0049] b、在所述哈希槽中定位该彩票;若定位成功则将所述彩票的票号与所述哈希槽中定位的该彩票建立映射关系,以读取该兑奖彩票。此处,为了解决HASH冲突的问题,在每个HASH槽中都设置一个双向链表,并使用跳表的方式加快查找。\n[0050] 具体的,每m张彩票定义一个跳表节点,每个跳表节点设置有该节点包含的彩票票号的标记,查找彩票的时候不需要遍历所有的彩票,而是首先先遍历跳表节点,确认包含要查找的彩票的跳表节点,进一步的再在该跳表节点中查找需要的彩票。例如,第一跳表节点包含着彩票票号为1-5的彩票,该第一跳表节点的标记为1-5;第二个跳表节点包含着彩票票号为6-10的彩票,该第二跳表节点的标记为6-10;那么要查找彩票票号为8的彩票,则遍历各个跳表节点,发现要查找的彩票的票号在6-10之间,则定位于第二跳表节点,再进一步的遍历该第二跳表节点以定位需要查找的彩票。\n[0051] 若定位失败则自动获取一个空闲节点,并将该空闲节点分配到该哈希槽中。\n[0052] 其中,所述空闲节点的获取方法包括以下方法中的任一种:\n[0053] 方法1、在兑奖缓存区查找并获取空闲节点;或者\n[0054] 方法2、在步骤b中定位的哈希槽中回收可以利用的节点;或者\n[0055] 方法3、在所述兑奖缓存区除所述步骤b中定位的哈希槽之外的其他哈希槽中回收可以利用的节点。\n[0056] 值得注意的是:对于方法2和方法3中的HASH槽中节点的回收,只要还有空闲节点,就不进行节点回收处理,以便于最大程度的利用已经从文件中异步读取的彩票,提高查票速度,回收机制中保证尽量不回收售票时间在开赛之前H小时的彩票,以方便后续的读取。\n[0057] 为了解决HASH冲突的问题,在每个HASH槽中都设置一个双向链表,并使用跳表的方式加快查找。\n[0058] S104-S106,若S102中所述彩票并未预先存储在兑奖缓存区;则从磁盘中读取该兑奖的彩票;同时,判断该兑奖的彩票是否为在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票。\n[0059] 若该兑奖的彩票为在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票,将该兑奖的彩票在磁盘中的相邻位置的指定数量的彩票读取到兑奖缓存区;此处,由于该兑奖的彩票是在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票,因此会出现特别集中的兑奖的情况,因此需要多读取一些相邻的彩票到兑奖缓存区。例如,将该兑奖的彩票在磁盘中的相邻位置的200万张彩票读取到兑奖缓存区。\n[0060] 若该兑奖的彩票不是在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票,则将该兑奖的彩票在磁盘中的相邻位置的少量的彩票读取到兑奖缓存区;此处,由于该兑奖的彩票不是在竞猜赛事开赛之前的指定时间阈值范围内销售的彩票,因此不会出现特别集中的兑奖的情况,因此只需读取少量的相邻的彩票到兑奖缓存区即可,例如,将该兑奖的彩票在磁盘中的相邻位置的5至10张的彩票读取到兑奖缓存区。\n[0061] 其中,如图3所示,本申请读取彩票采用异步读取的方式,创建T个线程,采用epoll事件驱动的机制,在读取临近的彩票时,不影响其他彩票兑奖的性能,T可以根据实际环境配置。\n[0062] 原有兑奖设计,每次兑奖都需要读取一次彩票,进行一次IO操作,导致性能很低,大约可以支持200票/秒;按照本申请的兑奖方法,彩票兑奖时,缓冲区的命中率可以达到\n70%左右,性能提高到1000票/秒(随机兑奖的场景),提高5倍左右。通过本申请的兑奖方法,可以极大的减少兑奖时磁盘IO的读取次数,加快在缓存中定位彩票的速度,提高兑奖缓存的命中率。\n[0063] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2009-07-29
|
2008-12-26
| | |
2
| |
2002-09-18
|
2002-03-22
| | |
3
| |
2014-05-28
|
2014-03-10
| | |
4
| | 暂无 |
1994-10-18
| | |
5
| | 暂无 |
1994-06-30
| | |
6
| | 暂无 |
2015-06-12
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |