一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种高并发下存储大数据的分片及聚合控制方法与流程

2022-02-20 05:32:27 来源:中国专利 TAG:


1.本发明涉及计算机软件应用领域,特别涉及一种高并发下存储大数据的分片及聚合控制方法。


背景技术:

2.在现有技术中,由于非关系型数据库(key-value数据库)取数的高效性,在使用中十分普遍,但是存储的value不能无限大,如果value用序列化,数据超过10m还是会序列化报错,如果value不序列化,那么取value的时候也会造成io的阻塞,影响其他线程读写的效率。在当前业务中,如大商户的交易信息,同一个商户短时间内可能就有百万级的交易量级;某个热点ip 下所有个人手机号;爆款活动的交易分布等等,由于时效性的要求,这些数据一般都缓存在系统中,用于规则使用。基于这个背景,为了保证非关系型数据库的正常使用,以及规则的准确性,故需将大的存储value切片分段存储,保证每段的数据不重合,同时将数据序列化,减少存储空间,还可以将分段内的数据进行聚合计算,减少数据的重复抽取,但是由于切片-聚合模式对数据的处理,必须保证在高并发情况下数据的一致性。


技术实现要素:

3.本发明要解决的技术问题是克服现有技术的缺陷,提供一种高并发下存储大数据的分片及聚合控制方法。
4.本发明提供了如下的技术方案:
5.本发明提供一种高并发下存储大数据的分片及聚合控制方法,包括以下:
6.(1).配置平台,配置需要切片的指标的分片单位:
7.分片是取整计算,每笔数据进入统计时都有其自带业务属性的时间戳,这个时间戳是一个long类型的数据,然后定义切片单位为毫秒,秒,分钟,小时,天,则这些时间单位对应的时间跨度分别是1,1000,60000,360000,86400000,然后时间跨度(分片)duration=入参时间戳/切片单位,则每个 duration都是整个时间跨度的一部分,且各个duration都不相交;
8.(2).2.数据切割分片:
9.数据流进入系统时,先判断是否需要分片,如果需要分片,则先计算出所属切片的值sort,然后以维度_真实数据_切片单位为缓存的key,先判断该key下面的该切片是否存在,不存在就新建,存在就merge新的的值,zset 一个所属切片的值,排序为sort;
10.(3).高并发下merge值:
11.高并发下每次从缓存中取数可能不一样,造成数据失真;这里提供一种快照加自旋锁的方法,确保数据一致,并减少数据计算等待时间。
12.与现有技术相比,本发明的有益效果如下:
13.1.解决非关系型数据库大value存储问题;
14.2.进行初步聚合计算,减少后期取数的计算,同时减少数据的存储空间;
15.3.用时间戳分段存储,取数可直接取区间,减少与缓存交互;
16.4.支持lua算法,将过期数据从缓存中清除。
附图说明
17.附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
18.图1是本发明的高并发下merge值示意图;
19.图2是本发明的时间单位切片示意图;
20.图3是本发明的数据流转图;
21.图4是本发明的聚合控制方法示意图。
具体实施方式
22.以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。其中附图中相同的标号全部指的是相同的部件。
23.实施例1
24.大value的key可以是各种各样的指标数据,我们后面称之为指标,例如同一个商户,同一个ip等等,这些指标往往由于该维度下统计时间段内的数据太多,导致大value的出现,所以我们要对这些时间段进行分片,每个时间段就是一个分片,所有的分片就是这个大value。每个分片都是整体数据的一段,到这里其实已经解决了大value的问题,但是由于大部分统计并不需要记录所有的数据节点,为了节省存储空间,同时也为了给后续计算节省时间,对每个分片内的数据进行聚合,计算出这个分片区间内统计值,在高并发下可能存在数据统计不准,故需要引入类似数据库mvcc机制,加入快照及版本号,控制数据的一致性,利用自旋锁,减少数据等待,并重新统计。
25.如图1-4,本发明提供一种高并发下存储大数据的分片及聚合控制方法,包括以下:
26.(1).配置平台,配置需要切片的指标的分片单位:
27.分片是取整计算,每笔数据进入统计时都有其自带业务属性的时间戳,这个时间戳是一个long类型的数据,然后定义切片单位为毫秒,秒,分钟,小时,天,则这些时间单位对应的时间跨度分别是1,1000,60000,360000, 86400000,然后时间跨度(分片)duration=入参时间戳/切片单位,则每个 duration都是整个时间跨度的一部分,且各个duration都不相交;
28.(2).2.数据切割分片:
29.数据流进入系统时,先判断是否需要分片,如果需要分片,则先计算出所属切片的值sort,然后以维度_真实数据_切片单位为缓存的key,先判断该key下面的该切片是否存在,不存在就新建,存在就merge新的的值,zset 一个所属切片的值,排序为sort;
30.(3).高并发下merge值:
31.高并发下每次从缓存中取数可能不一样,造成数据失真;这里提供一种快照加自旋锁的方法,确保数据一致,并减少数据计算等待时间。
32.本发明的核心在于按照时间流的自然切片,从而实现大数据的聚合存储,从而减少数据量,同时为后面的聚合计算节省时间,具体实施步骤如下:
33.1.基于时间单位的切片方法
34.s1数据进入处理器时,会判断该数据所属维度,同时从内存中读取该维度的配置单位(按照自然的天,小时,分钟,秒等的切片,如果没有则不切片,本例只讨论切片)
35.s2数据从配置中取出切片配置,数据所在时间戳取整来判断所属切片,由于维度-key-切片这三个值组成的新缓存的key唯一,所以不存在重复切片问题,同时时间戳唯一所以数据不会被多次统计。
36.s3对于规则计算,比如近商户a两小时的交易总量,商户是一个维度,a 是具体维度下面的key,如果切片按照小时则至多两个key即可存下所有数据的聚合值,但同时数据精度只到小时颗粒,如果颗粒度是分钟,则至多 120个key即可存下所有聚合值,颗粒度是分钟,同理如果颗粒度是秒则至多7200个值。同时为了检索便利提供一种排序的队列存储这些切片数据,按照切片值去排序,同时可以根据时间段去取排序好的数据。
37.2.高并发下数据的聚合计算方法
38.s21在s2取得切片时,首先根据切片拼接的key去缓存中查缓存中是否存在这个值,如果不存在,则set这个值到相应的切片,如果已存在值,则需要merge值到相同的切片,但是高并发下,可能会存在数据统计不准确的情况。
39.s21用快照版本及自旋锁解决高并发下数据计算问题,高并发下,从主内存中取出的数据在写回去的时候,主内存可能已经变更,如果强制写回,会造成数据计算不准。基于这个问题,参考数据库的mvcc原理,设计出了快照版本,即每次从主内存取数都有一个版本号及时间戳,记录取到数据的一致性,写回时比较该快照版本是否变更,如果变更,则增加一个自旋锁,等待锁定期重新获取主内存数据,计算好后重复上面步骤,直至版本号一致。自旋锁方法原理,自主生成一个自循环函数,循环期间获取s3写入数据是否锁定,不锁定则取出主内存数据。
40.s3利用cas原理将要存储的数据加锁,确保期间数据不会被污染,数据写完之后升级版本号,确保数据精准。
41.最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献