一种数据库的写入方法及装置、电子设备制造方法及图纸

技术编号:17733910 阅读:70 留言:0更新日期:2018-04-18 11:24
一种数据库的写入方法及装置、电子设备;所述数据库的写入方法包括:将向数据库写入新数据的写请求封装成事务,放入事务队列;按照事务在所述事务队列中的顺序为事务中的各数据行生成自增标识;依次提交所述事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。本申请,能够保证严格的串行自增,并且可以保证高并发时的处理性能。

A method of writing and a device and electronic device for a database.

Method and device for electronic equipment, write a database; including the writing method of database: writes the new data write request package into transactions to the database into the transaction queue; according to the transaction in the transaction queue in order for each row of data generated from the increase in the transaction in the transaction identifier; submit in the queue transaction, each data transaction in line since the increase in the data row after filling to mark into the database. This application can guarantee a strict serial self increase, and can guarantee the performance of high concurrency.

【技术实现步骤摘要】
一种数据库的写入方法及装置、电子设备
本专利技术涉及数据库领域,尤其涉及一种数据库的写入方法及装置、电子设备。
技术介绍
目前,数据库中一般可以实现自增列,自增列是指表中每一行的该列中的数据是自动递增的,比如第一行中自增列的值为1,第二行中自增列的值为2。传统数据库MySQL中实现的自增列有两种锁:表级别自增值锁和轻量级自增值锁;使用表级别自增值锁,在操作前加锁,操作完成后放锁,可以保证串行递增,但严重影响并发性能,实际场景中很少使用。轻量级锁只在申请自增值时加锁,允许高并发,但不能保证先申请自增值的请求先写入,不满足串行自增的需求。已有的单机数据库中所提供的主键列自增功能(比如在新记录插入表中时生成一个唯一的数字,该数字是一个递增的自然数),可以满足主键唯一性的要求,但无法满足串行自增的要求;如果需要满足串行自增,则需要串行执行所有事务,这会降低数据库的并发能力,导致数据库在高并发场景基本不可用。但在某些高并发场景下,需要严格的串行自增,并且能保证高并发性能。例如一个通信业务场景,多个用户都在向用户A发送消息,即多线程并发插入数据到数据库的同一个分区下,同时后台在不断地将用户A的新到达消息增量读出来。在没有自增列功能的场景下,为了保证后台不会丢失消息,需要保证发送给该用户的每条消息是串行的,方案复杂且并发性能不好。如果采用目前数据库所提供的自增功能,无法同时满足串行自增和保证高并发性能这两个要求。
技术实现思路
本申请提供一种数据库的写入方法及装置、电子设备,能够保证严格的串行自增,并且可以保证高并发时的处理性能。本申请采用如下技术方案。一种数据库的写入方法,包括:将向数据库写入新数据的写请求封装成事务,放入事务队列;按照事务在所述事务队列中的顺序为事务中的各数据行生成自增标识id;依次提交所述事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。可选地,先放入事务队列的事务中各数据行的自增id小于后放入事务队列的事务中各数据行的自增id;一个事务中包含多个数据行时,该事务中排序在先的数据行的自增id小于排序在后的数据行的自增id。可选地,所述依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库包括:将事务队列中的事务对应的日志数据依次写入日志,所述日志数据中包括对应的事务中各数据行的自增id;对日志中的日志数据对应的事务依次进行提交,对所述数据库进行写入,写入时在事务中各数据行里分别填充该数据行的自增id。可选地,当数据库包括多个分区时,每个分区各自独立维护自增id;所述将向数据库写入新数据的写请求封装成事务,放入事务队列包括:将向数据库写入新数据的写请求封装成事务,将封装得到的事务放到该事务所属分区对应的事务队列中。可选地,所述按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:对于事务队列中的每个事务,依次根据系统时间以及该事务所包含的数据行数,为该事务中的各数据行生成一批自增id。可选地,所述按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:对于事务队列中的每个事务中的各数据行,所生成的自增id的范围为:从1到该事务所包含的数据行数,加上以下两个数值中的较大的一个值:上次生成的自增id的值、系统时间。一种数据库的写入装置,包括:封装模块,用于将向数据库写入新数据的写请求封装成事务,放入事务队列;生成模块,用于按照事务在事务队列中的顺序为事务中的各数据行生成自增标识id;提交模块,用于依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。可选地,先放入事务队列的事务中各数据行的自增id小于后放入事务队列的事务中各数据行的自增id;一个事务中包含多个数据行时,该事务中排序在先的数据行的自增id小于排序在后的数据行的自增id。可选地,所述提交模块包括:写日志单元,用于将事务队列中的事务对应的日志数据依次写入日志,所述日志数据中包括对应的事务中各数据行的自增id;写数据库单元,用于对日志中的日志数据对应的事务依次进行提交,对所述数据库进行写入,写入时在事务中各数据行里分别填充该数据行的自增id。可选地,当数据库包括多个分区时,每个分区各自独立维护自增id;所述封装模块将向数据库写入新数据的写请求封装成事务,放入事务队列包括:所述封装模块将向数据库写入新数据的写请求封装成事务,将封装得到的事务放到该事务所属分区对应的事务队列中。可选地,所述生成模块按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:所述生成模块对于事务队列中的每个事务,依次根据系统时间以及该事务所包含的数据行数,为该事务中的各数据行生成一批自增id。可选地,所述生成模块按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:所述生成模块对于事务队列中的每个事务中的各数据行,所生成的自增id的范围为:从1到该事务所包含的数据行数,加上以下两个数值中的较大的一个值:上次生成的自增id的值、系统时间。一种进行数据库写入的电子设备,包括:存储器和处理器;所述存储器用于保存用于进行数据库写入的程序;所述用于进行数据库写入的程序在被所述处理器读取执行时,执行以下操作:将向数据库写入新数据的写请求封装成事务,放入事务队列;按照事务在事务队列中的顺序为事务中的各数据行生成自增标识id;依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。本申请包括以下优点:本申请至少一个实施例中,将对于数据库的写请求封装成事务后放入事务队列,给事务分配自增id后,再对数据库进行写入,写入的数据行中包含所分配给该数据行的自增id,当主键列包含该自增id所在的列时,能保证数据库中的主键列严格串行自增;而且每个事务进入事务队列后再统一分配单调增加的自增id,因此不需要对数据行进行加锁,可以保证高并发场景下的性能。本申请实施例的一种实现方式中,通过先将事务队列中的事务写入日志,再对数据库进行写入的方式,可以保证在系统故障的情况下,能够通过日志获知已生成的最大的自增id,从而保证后续生成的自增id是单调增长的。本申请实施例的一种实现方式中,可以针对分布式数据库中的不同分区分别设置自增id生成器和写日志队列,从而实现分区内的主键列串行自增。本申请实施例的一种实现方式中,自增id可以根据系统时间生成,这样得到的自增列不连续但能保证严格串行;配合预写式日志实现时,可以在系统故障导致系统时间回退的情况下,仍保证自增列是串行自增的。当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有优点。附图说明图1是实施例一的数据库的写入方法的流程图;图2是实施例一的例子中各事务的处理示意图;图3是实施例一的例子中写请求的处理流程图;图4是实施例二的数据库的写入装置的示意图。具体实施方式下面将结合附图及实施例对本申请的技术方案进行更详细的说明。需要说明的是,如果不冲突,本申请实施例以及实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。在一个典型的配置中,进行数据库写入的计算设备可包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存(mem本文档来自技高网...
一种数据库的写入方法及装置、电子设备

【技术保护点】
一种数据库的写入方法,包括:将向数据库写入新数据的写请求封装成事务,放入事务队列;按照事务在所述事务队列中的顺序为事务中的各数据行生成自增标识id;依次提交所述事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。

【技术特征摘要】
1.一种数据库的写入方法,包括:将向数据库写入新数据的写请求封装成事务,放入事务队列;按照事务在所述事务队列中的顺序为事务中的各数据行生成自增标识id;依次提交所述事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。2.如权利要求1所述的写入方法,其特征在于:先放入事务队列的事务中各数据行的自增id小于后放入事务队列的事务中各数据行的自增id;一个事务中包含多个数据行时,该事务中排序在先的数据行的自增id小于排序在后的数据行的自增id。3.如权利要求1所述的写入方法,其特征在于,所述依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库包括:将事务队列中的事务对应的日志数据依次写入日志,所述日志数据中包括对应的事务中各数据行的自增id;对日志中的日志数据对应的事务依次进行提交,对所述数据库进行写入,写入时在事务中各数据行里分别填充该数据行的自增id。4.如权利要求1所述的写入方法,其特征在于,当数据库包括多个分区时,每个分区各自独立维护自增id;所述将向数据库写入新数据的写请求封装成事务,放入事务队列包括:将向数据库写入新数据的写请求封装成事务,将封装得到的事务放到该事务所属分区对应的事务队列中。5.如权利要求1所述的写入方法,其特征在于,所述按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:对于事务队列中的每个事务,依次根据系统时间以及该事务所包含的数据行数,为该事务中的各数据行生成一批自增id。6.如权利要求1所述的写入方法,其特征在于,所述按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:对于事务队列中的每个事务中的各数据行,所生成的自增id的范围为:从1到该事务所包含的数据行数,加上以下两个数值中的较大的一个值:上次生成的自增id的值、系统时间。7.一种数据库的写入装置,其特征在于,包括:封装模块,用于将向数据库写入新数据的写请求封装成事务,放入事务队列;生成模块,用于按照事务在事务队列中的顺序为事务中的各数据行生成自增标识id;提交模块,用于依次提交事务队列中的事务...

【专利技术属性】
技术研发人员:杨恋敬少强杨世泉
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:开曼群岛,KY

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1