本发明涉及计算机仿真,具体涉及一种演出座位库存mysql存储优化方法。
背景技术:
1、目前的线上购票选座系统,大多会选择mysql数据库作为底层存储介质,一方面是因为mysql的优秀性能及事务支持,另一方面是因为mysql的开源特性。
2、座位的数据结构往往采用类似商品库存存储结构(单个座位单条记录的方式)来记录座位的库存,以此来避免购票时甚至热门活动抢票时,出现多人一位的错误情况。但是一个成熟的线上购票系统会同时售卖多个活动的门票,以大型演唱会举例,一场的活动人数可以达到将近一万人上下,如果在一天内同时开放十场活动的门票售卖,那么一天内所有的座位数据将会达到十万上下,连续售卖三个月后数据可能会达到千万级,数据库也将会承担很大的存储压力及并发压力。
技术实现思路
1、本发明主要是为了解决目前市面上线上购票系统数据库承担的存储压力及并发压力过大的问题,提供了一种演出座位库存mysql存储优化方法,在获取整个场地座位布局后,对座位布局进行数字建模,再按照固定规则、顺序对座位进行编号,然后进行分区及分组,接着计算各座位区域的库存值,最后将计算结果结构化后存入数据库,该方案将原本分散的多条座位库存数据合成一条座位库存数据,达到降低数据库存储压力及并发压力的目的。在实际使用及压测过程中,此发明可以减少数据库存储压力70-80倍左右,并发压力降低3-4倍。
2、为了实现上述目的,本发明采用以下技术方案。
3、一种演出座位库存mysql存储优化方法,包括以下步骤:
4、s1:根据场地设计布局图在系统内进行数字建模;
5、s2:对结构化的点阵数据进行分区,最终得到三个分区;
6、s3:将s2中每个分区划分为4个分组,每个分组25个点位;
7、s4:依次计算s3中划分的4个分组的库存位值;
8、s5:依次计算s3中划分的4个分组的不可用点位位值;
9、s6:将计算得到的结果放入分区结构化整合数据格式中,area(1/2/3/4)字段分别代表分组1/2/3/4的库存位值;area(1/2/3/4)_n字段分别代表分组1/2/3/4的不可用点位位值;
10、本发明提供了一种演出座位库存mysql存储优化方法,在获取整个场地座位布局后,对座位布局进行数字建模,再按照固定规则、顺序,对座位进行编号,以每100个(具体大小可调整)座位为单位大小进行分区,再将100个座位分成4组后,使用本发明中设计的算法计算各座位区域的库存值,最后将计算结果结构化后存入数据库,该方案将原本分散的100条座位库存数据合成一条座位库存数据,达到降低数据库存储压力及并发压力的目的。在实际使用及压测过程中,此发明可以减少数据库存储压力70-80倍左右,并发压力降低3-4倍。
11、作为优选,s1中,将实际可用的座位,过道、障碍等不可用点位的位值由排座编号,转化、填充,依次从上到下逐行从左到右遍历,遍历时遇到右侧有障碍,则右侧所有x坐标+1;遇到下方有障碍时,则下方所有y坐标+1,形成系统xy坐标的点位列表,最终形成21*12的矩形坐标点阵,将列表数据转化为json字符串存储到数据库中,在前端查询整体场地布局时使用,前端可以直接获得布局排座编号及系统xy坐标值。
12、作为优选,s2中,以区域大小为100个座位,每个区域4个分组,每个分组大小为25个点位为例,21*12的矩形坐标点阵从左上角(1,1)点开始从上到下逐行从左到右遍历计算,(1,1)点在整个矩形坐标点阵中的序列值index为(y坐标-1)*列数+x坐标=(1-1)*21+1=1,当遍历到(17,5)点时计算得到序列值index为(5-1)*21+17=101,满足座位数量101大于区域座位数量100的条件,将(1,1)到(17,5)左闭右开之间的所有点位,归入第一分区座位。
13、作为优选,s2还包括:使用同样的方式从上一次结束点开始继续向下遍历,直到遍历完整个21*12矩形坐标点阵,最后总共得到(1,1)到(17,5)左闭右开、(17,5)到(12,10)左闭右开、(12,10)到(22,12)左闭右开三个分区。
14、作为优选,s3中,依次对s2中获得的每个分区进行分组,将一个分区根据序列值index划分为1-25、26-50、51-75、76-100四个分组。
15、作为优选,s4中,每个分组大小为25个点位,按照顺序从高位到低位,将可用点位置1,不可用点位置0,得到分组库存位值的二进制表示。如25个点位全部为可选座位(可用点位),则该分组库存位置的二进制表示为1 1111 1111 1111 1111 1111 1111,顺序从高位到低位,十进制数值为33554431;如中间第5、10、15位置分别为过道、障碍、损坏座位等不可用点位,则将二进制中的第5、10、15位置置为0,得到库存位值二进制表示为1 111111111011 1101 1110 1111,十进制数值为33537519。
16、作为优选,s5中,将s4得到的各分组库存位值二进制表示与1 1111 1111 11111111 11111111进行异或操作,得到分组的不可用点位位值。以5、10、15不可用为例,与库存位值33537519异或操作后,得到不可用点位位值为16912。
17、作为优选,s6中,所述分区结构化整合数据格式包括:area(1/2/3/4)字段分别代表分组1/2/3/4的库存位值;area(1/2/3/4)_n字段分别代表分组1/2/3/4的不可用点位位值;left_(x/y)代表该分区开始点位的xy坐标;right(x/y)代表该分区结束点位的xy坐标;(x/y)_size代表整个场地矩形点阵的x宽度、y高度限制;pre_size代表分组点位数量。
18、因此,本发明的优点是:将原本分散的多条座位库存数据合成一条座位库存数据,达到降低数据库存储压力及并发压力的目的。在实际使用及压测过程中,此发明可以减少数据库存储压力70-80倍左右,并发压力降低3-4倍。
1.一种演出座位库存mysql存储优化方法,其特征在于,包括以下步骤:
2.根据权利要求1所述的一种演出座位库存mysql存储优化方法,其特征在于,s1中,将实际可用的座位,过道、障碍等不可用点位的位值由排座编号,转化、填充,依次从上到下逐行从左到右遍历,遍历时遇到右侧有障碍,则右侧所有x坐标+1;遇到下方有障碍时,则下方所有y坐标+1,形成系统xy坐标的点位列表,最终形成21*12的矩形坐标点阵,将列表数据转化为json字符串存储到数据库中,在前端查询整体场地布局时使用,前端可以直接获得布局排座编号及系统xy坐标值。
3.根据权利要求2所述的一种演出座位库存mysql存储优化方法,其特征在于,s2中,以区域大小为100个座位,每个区域4个分组,每个分组大小为25个点位为例,21*12的矩形坐标点阵从左上角(1,1)点开始从上到下逐行从左到右遍历计算,(1,1)点在整个矩形坐标点阵中的序列值index为(y坐标-1)*列数+x坐标=(1-1)*21+1=1,当遍历到(17,5)点时计算得到序列值index为(5-1)*21+17=101,满足座位数量101大于区域座位数量100的条件,将(1,1)到(17,5)左闭右开之间的所有点位,归入第一分区座位。
4.根据权利要求3所述的一种演出座位库存mysql存储优化方法,其特征在于,s2还包括:使用同样的方式从上一次结束点开始继续向下遍历,直到遍历完整个21*12矩形坐标点阵,最后总共得到(1,1)到(17,5)左闭右开、(17,5)到(12,10)左闭右开、(12,10)到(22,12)左闭右开三个分区。
5.根据权利要求3或4所述的一种演出座位库存mysql存储优化方法,其特征在于,s3中,依次对s2中获得的每个分区进行分组,将一个分区根据序列值index划分为1-25、26-50、51-75、76-100四个分组。
6.根据权利要求1所述的一种演出座位库存mysql存储优化方法,其特征在于,s4中,每个分组大小为25个点位,按照顺序从高位到低位,将可用点位置1,不可用点位置0,得到分组库存位值的二进制表示。
7.根据权利要求6所述的一种演出座位库存mysql存储优化方法,其特征在于,s5中,将s4得到的各分组库存位值二进制表示与1 1111 1111 1111 1111 1111 1111进行异或操作,得到分组的不可用点位位值。
8.根据权利要求1所述的一种演出座位库存mysql存储优化方法,其特征在于,s6中,所述分区结构化整合数据格式包括:area(1/2/3/4)字段分别代表分组1/2/3/4的库存位值;