[发明专利]一种数据库的写入方法及装置、电子设备有效
| 申请号: | 201610884605.0 | 申请日: | 2016-10-10 |
| 公开(公告)号: | CN107918620B | 公开(公告)日: | 2022-04-19 |
| 发明(设计)人: | 杨恋;敬少强;杨世泉 | 申请(专利权)人: | 阿里巴巴集团控股有限公司 |
| 主分类号: | G06F16/22 | 分类号: | G06F16/22;G06F16/23;G06F16/27;G06F16/28 |
| 代理公司: | 北京安信方达知识产权代理有限公司 11262 | 代理人: | 李红爽;栗若木 |
| 地址: | 英属开曼群岛大开*** | 国省代码: | 暂无信息 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 数据库 写入 方法 装置 电子设备 | ||
一种数据库的写入方法及装置、电子设备;所述数据库的写入方法包括:将向数据库写入新数据的写请求封装成事务,放入事务队列;按照事务在所述事务队列中的顺序为事务中的各数据行生成自增标识;依次提交所述事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。本申请,能够保证严格的串行自增,并且可以保证高并发时的处理性能。
技术领域
本发明涉及数据库领域,尤其涉及一种数据库的写入方法及装置、电子设备。
背景技术
目前,数据库中一般可以实现自增列,自增列是指表中每一行的该列中的数据是自动递增的,比如第一行中自增列的值为1,第二行中自增列的值为2。传统数据库MySQL中实现的自增列有两种锁:表级别自增值锁和轻量级自增值锁;使用表级别自增值锁,在操作前加锁,操作完成后放锁,可以保证串行递增,但严重影响并发性能,实际场景中很少使用。轻量级锁只在申请自增值时加锁,允许高并发,但不能保证先申请自增值的请求先写入,不满足串行自增的需求。
已有的单机数据库中所提供的主键列自增功能(比如在新记录插入表中时生成一个唯一的数字,该数字是一个递增的自然数),可以满足主键唯一性的要求,但无法满足串行自增的要求;如果需要满足串行自增,则需要串行执行所有事务,这会降低数据库的并发能力,导致数据库在高并发场景基本不可用。
但在某些高并发场景下,需要严格的串行自增,并且能保证高并发性能。例如一个通信业务场景,多个用户都在向用户A发送消息,即多线程并发插入数据到数据库的同一个分区下,同时后台在不断地将用户A的新到达消息增量读出来。在没有自增列功能的场景下,为了保证后台不会丢失消息,需要保证发送给该用户的每条消息是串行的,方案复杂且并发性能不好。如果采用目前数据库所提供的自增功能,无法同时满足串行自增和保证高并发性能这两个要求。
发明内容
本申请提供一种数据库的写入方法及装置、电子设备,能够保证严格的串行自增,并且可以保证高并发时的处理性能。
本申请采用如下技术方案。
一种数据库的写入方法,包括:
将向数据库写入新数据的写请求封装成事务,放入事务队列;
按照事务在所述事务队列中的顺序为事务中的各数据行生成自增标识id;
依次提交所述事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。
可选地,先放入事务队列的事务中各数据行的自增id小于后放入事务队列的事务中各数据行的自增id;
一个事务中包含多个数据行时,该事务中排序在先的数据行的自增id小于排序在后的数据行的自增id。
可选地,所述依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库包括:
将事务队列中的事务对应的日志数据依次写入日志,所述日志数据中包括对应的事务中各数据行的自增id;
对日志中的日志数据对应的事务依次进行提交,对所述数据库进行写入,写入时在事务中各数据行里分别填充该数据行的自增id。
可选地,当数据库包括多个分区时,每个分区各自独立维护自增id;
所述将向数据库写入新数据的写请求封装成事务,放入事务队列包括:
将向数据库写入新数据的写请求封装成事务,将封装得到的事务放到该事务所属分区对应的事务队列中。
可选地,所述按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:
对于事务队列中的每个事务,依次根据系统时间以及该事务所包含的数据行数,为该事务中的各数据行生成一批自增id。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里巴巴集团控股有限公司,未经阿里巴巴集团控股有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610884605.0/2.html,转载请声明来源钻瓜专利网。





