CN107918620A - 一种数据库的写入方法及装置、电子设备 - Google Patents
一种数据库的写入方法及装置、电子设备 Download PDFInfo
- Publication number
- CN107918620A CN107918620A CN201610884605.0A CN201610884605A CN107918620A CN 107918620 A CN107918620 A CN 107918620A CN 201610884605 A CN201610884605 A CN 201610884605A CN 107918620 A CN107918620 A CN 107918620A
- Authority
- CN
- China
- Prior art keywords
- affairs
- data
- write
- increasing
- data row
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2308—Concurrency control
- G06F16/2336—Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2358—Change logging, detection, and notification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据库的写入方法及装置、电子设备;所述数据库的写入方法包括:将向数据库写入新数据的写请求封装成事务,放入事务队列;按照事务在所述事务队列中的顺序为事务中的各数据行生成自增标识;依次提交所述事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。本申请,能够保证严格的串行自增,并且可以保证高并发时的处理性能。
Description
技术领域
本发明涉及数据库领域,尤其涉及一种数据库的写入方法及装置、电子设备。
背景技术
目前,数据库中一般可以实现自增列,自增列是指表中每一行的该列中的数据是自动递增的,比如第一行中自增列的值为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)、输入/输出接口、网络接口和内存(memory)。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。内存可能包括模块1,模块2,……,模块N(N为大于2的整数)。
计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM),快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
下面先对本申请中出现的概念进行说明。
主键:表中每一行的唯一标识,可以包含一或多列,建表时必须明确指定主键的组成,包含主键中每列的名称和数据类型以及它们在主键中的顺序。
主键列:主键所包含的列称为主键列。
自增标识(id):在分配时能自动增加的值。
自增列:以自增id作为内容(或称为值)的列;可以是一或多列。自增列需要保证表中不同行的内容的大小顺序与写入顺序保持一致。
当主键列中包含自增列时,认为主键列也是自增的。
为了能清楚表达上述概念,下面用一个表1作为示例进行说明。
表1、示例表
表1中,可以将前两列作为主键列,假设这两列在主键中的顺序是第一列(名称为“分区键”的列)在先,第二列(名称为“自增id”的列)在后,则第一行中,(8,105)就可以作为该行的主键。其中,第二列中的“105”、“106”、“107”为自增id,第二列就是自增列。表1中主键列是自增的。
主键列串行自增是指:并发执行的数据库事务中,每一个成功提交的事务,其主键列要求大于之前所有已经成功提交的事务的主键列。当主键列里包含自增列时,主键列串行自增可以是指,每一个成功提交的事务,自增列的值大于之前所有已成功提交的事务的自增列的值。
事务(transaction,Txn):是数据库系统执行过程的一个逻辑单元,满足原子性、一致性、隔离性和持久性。其中:
原子性是指事务对数据修改,要么全都执行,要么全都不执行。
一致性是指事务执行之前和执行之后数据库都必须处于一致性状态。
隔离性是指事务查看数据时数据所处的状态,必须是另一并发事务修改它之前或之后的状态,事务不会查看中间状态的数据。
持久性是指事务完成之后,它对于系统的影响是永久性的,即使出现系统故障该事务也将一直保持。
分区:是表格存储中负载均衡的基本调度单位,通过分区可以实现数据存储的水平扩展,保证性能和可用性。
分区键:用于表示所属分区的值;分区键的范围与分区一一对应;比如分区键1~100对应于第一分区,分区键101~200对应于第二分区。
预写式日志(Write Ahead Log,WAL):是数据库中一种高效的日志记录方式,由于在事务提交时所有修改先写入日志文件中,因此在数据库重新启动后可以通过日志重放恢复重启之前的状态。
实施例一、一种数据库的写入方法,如图1所示,包括步骤S110~S130。
S110、将向数据库写入新数据的写请求封装成事务,放入事务队列;
S120、按照事务在所述事务队列中的顺序为事务中的各数据行生成自增标识(id);
S130、依次提交所述事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。
本实施例中,每个向数据库写入新数据的写请求所封装成的事务进入事务队列后,再统一分配单调增加的自增id,因此不需要对数据行进行加锁就实现自增,可以保证高并发场景下的性能。写入数据库的数据中包含所生成的自增id,由于自增id的排序和事务的提交顺序(亦即事务在事务队列中的排序)是一致的,因此当主键列包含该自增id所在的列时,能保证数据库中的主键列严格串行自增。本实施例不仅可以同时满足串行自增和高并发,而且方案简单易行。
本实施例中,一个事务可以包含一或多个数据行;所生成的自增id是和数据行一一对应的;比如一个事务中包含3个数据行时,为该事务中的各数据行生成的自增id一共是3个。其中,当一个事务中包含多个数据行时,该事务中排序在先的数据行的自增id可以小于排序在后的数据行的自增id;比如上述包含3个数据行的事务中3个自增id的排序,和3个数据行在事务中的排序是一致的。比如为该事务中各数据行生成的自增id为10、11、12,则该事务的第1、2、3个数据行的自增id依次为10、11、12。该事务提交后,将该事务所包含的三个数据行分别填充自增id后写入数据库,也就是说,在数据库中写入的的三个数据行里,自增列的值分别是10、11、12。
本实施例中,事务在事务队列中的顺序,与事务封装的顺序可以是一致的,即:先封装的事务在事务队列中的位置先于后封装的事务。不同事务中各数据行的自增id的排序,和事务在事务队列中的顺序也可以是一致的,即:在事务队列中位置在先(先放入事务队列)的事务中各数据行的自增id(比如1、2、……、100),小于位置在后(后放入事务队列)的事务中各数据行的自增id(比如101、102、……);或者说,位置在先的事务中最后一个数据行的自增id,小于位置在后的事务中第一个数据行的自增id。通常,先收到的写请求会先封装成事务,因此不同事务中各数据行的自增id的排序与封装成该事务的写请求的接收顺序也是一致的,即:对于向数据库写入新数据的的写请求,先接收到的写请求所封装成的事务中各数据行的自增id,小于后接收到的写请求所封装成的事务中各数据行的自增id。
本实施例中,写入数据库时也可以按照事务在事务队列中的顺序进行写入,提交后的事务将从事务队列中删除;也就是说事务队列可以是一个先进先出队列。一个向数据库写入新数据的写请求所封装成的事务提交后,将在数据库的表中新增一或多个数据行,事务中各数据行的自增id将填充在数据行中的自增列里。因此,表中各数据行的自增列中的自增id的排序,和向数据库写入新数据的写请求的接收顺序是一致的。
例如在多个用户都向用户A发送消息的场景中,发送给用户A的消息需要先由服务器写入数据库再通过后台进程读取给用户A,这里可以将所发送的消息视为向数据库写入新数据的写请求。这些消息到达服务器的顺序,和数据库中相应数据行的自增id的排序是一致的。这样当后台进程读取数据库中的数据时,如果按照自增id从小到大的顺序进行读取,则可以保证先被服务器接收到的消息先被发送给用户A,保证了发送给用户A的每条消息是串行的,而且可以保证消息不会丢失。
本实施例中,当用户希望对之前写入数据库的数据进行修改时,可以发送请求更新数据的写请求。请求更新数据的写请求中可以包含自增id以指示所要修改的数据行,该自增id是用户希望修改的数据行中的自增id。而向数据库写入新数据的写请求中,可以没有自增id,或者可以自增id为空值。
本实施例对于数据库的类型没有限制,比如可以适用于分布式数据库或单机数据库、可以适用于关系型数据库或非关系型数据库。
本实施例中,上述步骤S110~S130通常是在服务器中执行,从客户端接收向数据库写入新数据的写请求,并根据写请求对数据库进行写入。上述步骤S110~S130可以在一个设备中执行,也可以分布在不同设备中执行。执行上述步骤S110~S130的设备可以复用数据库所在设备,也可以是另外的独立设备。
一种实现方式中,所述依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库可以包括:
将事务队列中的事务对应的日志数据依次写入日志,所述日志数据中包括对应的事务中各数据行的自增id;
对日志中的日志数据对应的事务依次进行提交,对所述数据库进行写入,写入时在事务中各数据行里分别填充该数据行的自增id。
本实现方式采用预写式日志的方式,可以保证在系统故障的情况下,从日志中获知已生成的最大的自增id,从而保证后续生成的自增id是单调增长的。
在其它实现方式中,也可以不采用预写式日志,而是用其它方式保存最新(即最大)的自增id并进行备份,在系统故障切换(failover)的情况下可以通过读取备份的自增id得知已生成的最大的自增id。
一种实现方式中,当数据库包括多个分区时,每个分区可以各对应一个事务队列;每个分区的事务分别放入该分区对应的事务队列中。即,所述将向数据库写入新数据的写请求封装成事务,放入事务队列可以包括:
将向数据库写入新数据的写请求封装成事务,将封装得到的事务放到该事务所属分区对应的事务队列中。
其中,每个分区可以各自独立维护自增id;即:所生成的自增id在本分区内是串行自增的,但不同分区之间的自增id分别自增,互不影响。
本实现方式中,可以针对数据库中的不同分区分别设置自增id生成器和事务队列,相同分区下的事务进入到事务队列后串行申请自增id进行填充,从而实现分区内的主键列串行自增。其中,主键列可以包含分区键所在的列和自增列。其中,不同分区的自增id生成器可以是不同的对象。
本实现方式中,可以根据分区键将事务放入所属分区对应的事务队列,然后调用该事务所属分区所对应的自增id生成器为该事务中各数据行生成自增id。
其它实现方式中,也可以所有分区的事务混同进行自增id的生成。另外对于不分区的数据库,本实施例可以采用一个事务队列和一个自增id生成器实现。
一种实现方式中,所述按照事务在事务队列中的顺序为事务中的各数据行生成自增id可以包括:
对于事务队列中的每个事务,依次根据系统时间以及该事务所包含的数据行数,为该事务中的各数据行生成一批自增id。
本实施例中,为一个事务中各数据行所生成的一批自增id中,自增id的个数和事务中的数据行数相同;比如事务中有3个数据行,则对于该事务一批生成3个自增id;如果事务只有一个数据行,则生成的一批自增id中只有一个自增id。
本实现方式中,自增id根据系统时间得到,这样得到的自增列不一定连续但能保证严格串行;使用系统时间为基础的原因是希望能够提供给用户更多信息,通过自增id可以知道数据行写入的大致时间。
本实现方式中,系统时间是指在生成自增id时的当前系统时间,可以是时间格式的(比如某年某月某日某分某秒),也可以是数值格式的,比如是当前时刻与预定的起始时刻之间相隔的时间长度(可以但不限于以微秒us为单位)。
本实现方式中,根据事务在事务队列中的排序,依次生成自增id,这意味着对于越先进入事务队列的事务,将越早生成自增id,自增id中的系统时间将越小;因此在当前的事务队列中,越先进入事务队列的事务中各数据行的自增id越小。
其它实现方式中,也可以根据其它方式生成自增id,比如用一个递增的自然数作为自增id。再比如对于事务队列中的事务中各数据行,一次只为一个事务的一个数据行生成自增id,即:生成一个数据行的自增id后再生成下一个数据行的自增id,这样可以直接用系统时间作为自增id。
一种实现方式中,所述按照事务在事务队列中的顺序为事务中的各数据行生成自增id可以包括:
对于事务队列中的每个事务中的各数据行,所生成的自增id的范围为:从1到该事务所包含的数据行数,加上以下两个数值中的较大的一个值:上次生成的自增id的值、系统时间。
本实现方式中,如果事务中只有一个数据行,则为该事务中各数据行生成的自增id也只有一个,就是1加上系统时间、和上次生成的自增id中较大的一个值。如果事务中有多个数据行,则为该事务中各数据行生成的一批自增id中,最小的自增id是1加上系统时间、和上次生成的自增id中较大的一个值;最大的自增id是该事务所包含的数据行数加上系统时间、和上次生成的自增id中较大的一个值。
比如事务队列中依次有3个事务A、B、C,事务A有1个数据行,事务B有100个数据行,事务C有10个数据行,假设为事务A、B、C中各数据行生成自增id时,系统时间分别是Ta、Tb、Tc,Ta<Tb<Tc。假设Ta大于上次生成的自增id,则为事务A中各数据行生成的自增id为Ta+1;假设Tb大于Ta+1,则为事务B中各数据行生成的自增id为Tb+1~Tb+100。当Tc大于Tb+100时,为事务C中各数据行生成的自增id为Tc+1~Tc+10;当Tc小于Tb+100时,为事务C中各数据行生成的自增id为Tb+101~Tb+110。
本实现方式相当于是用系统时间和上次生成的自增id中的较大值,分别加上1~事务所包含的数据行数后作为事务中各数据行的自增id。可以但不限于将最新的自增id保存在内存中,每次新生成自增id后,用新生成的自增id更新内存中保存的自增id。在准备生成自增id时,最新的自增id就是内存中所保存的、上次生成的自增id。
本实现方式中,自增id的初始值可以为0,也可以为第一次生成自增id时的当前系统时间。比如在系统启动后为第一个事务中的各数据行生成自增id时,生成的自增id是当前系统时间加上1~当前系统时间加上该事务中的数据行数。
本实现方式配合预写式日志实现时,可以在系统故障导致系统时间回退的情况下,仍保证自增列是串行自增的。系统故障后重新加载的时候,会从日志中解析出最后一条日志数据中的自增id,作为上次生成的自增id,这样可以保证即使系统时间回退,自增id也不会回退。
本实现方式中,生成已提交事务中各数据行的自增id时的系统时间,小于当前的系统时间,也就是说对于之前已经提交而从事务队列中删除的事务而言,各数据行的自增id中的“系统时间”,必然小于目前还在事务队列中的事务中各数据行的自增id中的“系统时间”。如果事务中的数据行数太多则有可能导致“系统时间+行数”不单调自增(比如一个事务中的数据行数为100,生成自增id时的系统时间为80,则该事务中最后一个数据行的自增id为180;如果一段时间后为下一个事务中各数据行生成自增id时,系统时间为100,则对于该事务中第一个数据行而言,系统时间加行数为101,这样会导致排序在后的事务中数据行的自增id反而减小),但本实现方式由于是在“上次生成的自增id”和“系统时间”中取较大值作为得到自增id的基础,因此可以保证新生成的自增id必然大于之前的自增id,保证严格的串行自增。
本实现方式中,如果不同分区的自增id各自独立维护,则“上次生成的自增id”也是每个分区各自独立的;在生成自增id时所用的“上次生成的自增id”是指本分区的最新自增id。
其它实现方式中,也可以直接使用上次生成的自增id加1~事务所包含的数据行数的结果作为一批自增id。
下面用一个例子说明上述实施例。
本例子中,数据库采用构建在阿里云飞天分布式系统之上的非关系型数据库表格存储(TableStore),可以通过数据分片和负载均衡技术,实现规模上的无缝扩展。在表格存储中,使用的是WAL,每个写请求先写日志后写内存(即对数据库进行写入)。其中,表格存储中每张表的第一列主键列为分区键,分区键在同一个范围内的数据一定在同一个分区内。表格存储会根据表中每一行分区键的值所属范围自动将这一行数据分配到对应的分区上。本例中,一个分区中的事务中各数据行的自增id,通过该分区的自增id生成器分配。
在实际应用时,不限于本例的做法。本实施例的写入方法不限于使用在分布式系统的数据库中,不限于使用在非关系型数据库中,不限于使用在具有分区的数据库中,也不限于在采用WAL的数据库中使用。
本例子的实现过程如图2所示,首先将写请求封装成一个标准事务。假设依次封装了事务1~事务100,且这100个事务中各数据行的自增id都为空值;即:事务1的PK0为1,PK1为X;事务2的PK0为2,PK1为X;……;事务100的PK0为100,PK1为X。其中,PK0是分区键,本例中分区键的值0~100在同一个范围内,即:事务1~100都属于同一个分区。PK1是自增id,X表示是空值。
事务按照封装完成的顺序依次放入所在分区对应的事务队列中,即:事务队列中依次为:事务1、事务2、事务3、……。相应分区的自增id生成器为事务队列中的事务依次分配自增id。本例中假设每个事务只包含一个数据行,分配给一个事务中的数据行的自增id为:max(上次生成的自增id+1,系统时间+1),max表示取较大的一个值。
本例中,假设该分区上次生成的自增id或系统时间为98,则分配给事务1、2、3的自增id分别为99、100、101。
上述事务队列是一个先进先出队列,按照事务在事务队列中的顺序,依次将事务对应的日志数据写入日志,对应的日志数据已写入日志的事务将从事务队列中删除。可以看出,本例中每个分区的所有写请求在写日志时是串行的,可以保证写请求的先后顺序。
在写入日志时,日志数据中包含事务标识、事务的PK0和PK1。其中,PK1更新成分配给事务中数据行的自增id。上述事务1和事务2对应的日志数据写入日志后,日志中将依次包含以下日志数据:
Txn1:PK0:1;PK1:99
Txn2:PK0:2;PK1:100
……
写入日志后,再按照事务对应的日志数据在日志中的排列顺序,依次提交各事务;即:写入内存,也就是在数据库中增加新的数据行,一个事务对应一个数据行,事务中的数据行的自增id放在数据库相应数据行的一列中,该列即自增列,也是主键列之一;事务的分区键也放在一列中,作为表中第一列。本例中,数据库里的表可以参见表1。其中分区键、自增id所在的列分别是第一列和第二列,都是主键列。可以看出,属于相同范围的分区键下的不同数据行的自增值(即自增id)的大小顺序与该数据行写入数据库的顺序保持一致、与所属事务进入事务队列的顺序保持一致,也就是与向数据库写入新数据的写请求封装成事务的顺序保持一致。
写请求的处理流程如图3所示,包括步骤301~304:
301、将写请求封装成一个标准事务,比如得到图2中的事务1~事务100。
302、判断事务中的自增列是否为空(即自增id是否为空值)。
如果自增列为空(本例中即PK1为X),表明该事务对应的写请求是向数据库写入新数据,需要系统生成自增id,直接将该事务放入所属分区的事务队列。
如果自增列不为空,表明该事务对应的写请求是对已经写入数据库的数据行进行更新,以自增id来标识需要更新的数据行;因此自增id不为空值时需要申请事务锁,将数据库表中该自增id对应的数据行锁定,以避免在写入时其它写请求更新或查询相同行的数据。申请事务锁成功后,将该事务放入所属分区的事务队列。
303、事务进入到事务队列后,依次为每个自增id为空值的事务中的数据行生成自增id;生成时,根据事务所包含的数据行数从所属分区的自增id生成器中获取一批自增id,比如有事务包含3个数据行就获取三个自增id。对于自增id不为空值的事务,不再生成新的自增id。将事务队列中已获取自增id的事务对应的日志数据,按照事务在事务队列中的顺序依次写入日志,事务中各数据行的自增id伴随该事务对应的日志数据写入到日志中。
304、写入日志后,按照日志中的顺序依次提交事务,在数据库中进行写入,对于向数据库写入新数据的写请求对应的事务,提交后将会在数据库中新增一或多个数据行,写入时将各数据行的自增id分别填充到相应数据行中后写入数据库,各数据行的自增id形成自增列;写入完成后,对应的写请求即完成。对于请求更新数据的写请求对应的事务,提交后将会对数据库中相应数据行进行修改,修改完成后,对应的写请求即完成,释放事务锁。
实施例二、一种数据库的写入装置,如图4所示,包括:
封装模块41,用于将向数据库写入新数据的写请求封装成事务,放入事务队列;
生成模块42,用于按照事务在事务队列中的顺序为事务中的各数据行生成自增标识id;
提交模块43,用于依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。
本实施例中,封装模块41是上述装置中负责封装事务放入事务队列的部分,可以是软件、硬件或两者的结合。
本实施例中,生成模块42是上述装置中负责生成自增id的部分,可以是软件、硬件或两者的结合。
本实施例中,提交模块43是上述装置中负责提交事务的部分,可以是软件、硬件或两者的结合。
一种实现方式中,先放入事务队列的事务中各数据行的自增id小于后放入事务队列的事务中各数据行的自增id;
一个事务中包含多个数据行时,该事务中排序在先的数据行的自增id小于排序在后的数据行的自增id。
一种实现方式中,所述提交模块可以包括:
写日志单元,用于将事务队列中的事务对应的日志数据依次写入日志,所述日志数据中包括对应的事务中各数据行的自增id;
写数据库单元,用于对日志中的日志数据对应的事务依次进行提交,对所述数据库进行写入,写入时在事务中各数据行里分别填充该数据行的自增id。
本实施例中,写日志单元是提交模块中负责将事务对应的日志数据写入日志的部分,可以是软件、硬件或两者的结合。
本实施例中,写数据库单元是提交模块中负责在数据库写入数据的部分,可以是软件、硬件或两者的结合。
一种实现方式中,当数据库包括多个分区时,每个分区可以各自独立维护自增id;
所述封装模块将向数据库写入新数据的写请求封装成事务,放入事务队列可以包括:
所述封装模块将向数据库写入新数据的写请求封装成事务,将封装得到的事务放到该事务所属分区对应的事务队列中。
一种实现方式中,所述生成模块按照事务在事务队列中的顺序为事务中的各数据行生成自增id可以包括:
所述生成模块对于事务队列中的每个事务,依次根据系统时间以及该事务所包含的数据行数,为该事务中的各数据行生成一批自增id。
一种实现方式中,所述生成模块按照事务在事务队列中的顺序为事务中的各数据行生成自增id可以包括:
所述生成模块对于事务队列中的每个事务中的各数据行,所生成的自增id的范围为:从1到该事务所包含的数据行数,加上以下两个数值中的较大的一个值:上次生成的自增id的值、系统时间。
本实施例的写入装置的各模块的操作分别对应于实施例一中的步骤S110~S130,各模块操作的其它实现细节可参见实施例一。
实施例三、一种进行数据库写入的电子设备,包括:存储器和处理器;
所述存储器用于保存用于进行数据库写入的程序;所述用于进行数据库写入的程序在被所述处理器读取执行时,执行以下操作:
将向数据库写入新数据的写请求封装成事务,放入事务队列;
按照事务在事务队列中的顺序为事务中的各数据行生成自增id;其中,先放入事务队列的事务中各数据行的自增id小于后放入事务队列的事务中各数据行的自增id;
依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。
本实施例中,用于进行数据库写入的程序在被处理器读取执行时,所执行的操作对应于实施例一中的步骤S110~S130;该程序所执行的操作的其它细节可参见实施例一。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请不限制于任何特定形式的硬件和软件的结合。
当然,本申请还可有其他多种实施例,在不背离本申请精神及其实质的情况下,熟悉本领域的技术人员当可根据本申请作出各种相应的改变和变形,但这些相应的改变和变形都应属于本申请的权利要求的保护范围。
Claims (13)
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;
提交模块,用于依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。
8.如权利要求7所述的写入装置,其特征在于:
先放入事务队列的事务中各数据行的自增id小于后放入事务队列的事务中各数据行的自增id;
一个事务中包含多个数据行时,该事务中排序在先的数据行的自增id小于排序在后的数据行的自增id。
9.如权利要求7所述的写入装置,其特征在于,所述提交模块包括:
写日志单元,用于将事务队列中的事务对应的日志数据依次写入日志,所述日志数据中包括对应的事务中各数据行的自增id;
写数据库单元,用于对日志中的日志数据对应的事务依次进行提交,对所述数据库进行写入,写入时在事务中各数据行里分别填充该数据行的自增id。
10.如权利要求7所述的写入装置,其特征在于,当数据库包括多个分区时,每个分区各自独立维护自增id;
所述封装模块将向数据库写入新数据的写请求封装成事务,放入事务队列包括:
所述封装模块将向数据库写入新数据的写请求封装成事务,将封装得到的事务放到该事务所属分区对应的事务队列中。
11.如权利要求7所述的写入装置,其特征在于,所述生成模块按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:
所述生成模块对于事务队列中的每个事务,依次根据系统时间以及该事务所包含的数据行数,为该事务中的各数据行生成一批自增id。
12.如权利要求7所述的写入装置,其特征在于,所述生成模块按照事务在事务队列中的顺序为事务中的各数据行生成自增id包括:
所述生成模块对于事务队列中的每个事务中的各数据行,所生成的自增id的范围为:从1到该事务所包含的数据行数,加上以下两个数值中的较大的一个值:上次生成的自增id的值、系统时间。
13.一种进行数据库写入的电子设备,包括:存储器和处理器;
其特征在于:所述存储器用于保存用于进行数据库写入的程序;所述用于进行数据库写入的程序在被所述处理器读取执行时,执行以下操作:
将向数据库写入新数据的写请求封装成事务,放入事务队列;
按照事务在事务队列中的顺序为事务中的各数据行生成自增标识id;
依次提交事务队列中的事务,将事务中各数据行的自增标识填充到数据行中后写入数据库。
Priority Applications (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610884605.0A CN107918620B (zh) | 2016-10-10 | 2016-10-10 | 一种数据库的写入方法及装置、电子设备 |
US15/729,599 US11640384B2 (en) | 2016-10-10 | 2017-10-10 | Database processing method, apparatus, and electronic device |
EP17860652.1A EP3523726A4 (en) | 2016-10-10 | 2017-10-10 | APPARATUS, METHOD FOR PROCESSING DATABASE AND ELECTRONIC DEVICE |
JP2019516411A JP6935491B2 (ja) | 2016-10-10 | 2017-10-10 | データベース処理方法、機器、及び電子装置 |
PCT/US2017/055915 WO2018071406A1 (en) | 2016-10-10 | 2017-10-10 | Database processing method, apparatus, and electronic device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610884605.0A CN107918620B (zh) | 2016-10-10 | 2016-10-10 | 一种数据库的写入方法及装置、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107918620A true CN107918620A (zh) | 2018-04-17 |
CN107918620B CN107918620B (zh) | 2022-04-19 |
Family
ID=61829642
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610884605.0A Active CN107918620B (zh) | 2016-10-10 | 2016-10-10 | 一种数据库的写入方法及装置、电子设备 |
Country Status (5)
Country | Link |
---|---|
US (1) | US11640384B2 (zh) |
EP (1) | EP3523726A4 (zh) |
JP (1) | JP6935491B2 (zh) |
CN (1) | CN107918620B (zh) |
WO (1) | WO2018071406A1 (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241193A (zh) * | 2018-09-26 | 2019-01-18 | 联想(北京)有限公司 | 分布式数据库的处理方法和装置,及服务器集群 |
CN109408480A (zh) * | 2018-09-29 | 2019-03-01 | 武汉达梦数据库有限公司 | 基于oracle多节点rac日志基于scn对齐读取的方法及系统 |
CN110012050A (zh) * | 2018-12-04 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 消息处理、存储方法、装置及系统 |
CN111400333A (zh) * | 2020-03-19 | 2020-07-10 | 嘉兴太美医疗科技有限公司 | 数据并行写入方法、系统和计算机可读介质 |
CN111488366A (zh) * | 2020-04-09 | 2020-08-04 | 百度在线网络技术(北京)有限公司 | 关系型数据库更新方法、装置、设备及存储介质 |
CN111752953A (zh) * | 2020-06-29 | 2020-10-09 | 北京百度网讯科技有限公司 | 标识生成方法、装置、设备以及存储介质 |
CN111858516A (zh) * | 2019-04-30 | 2020-10-30 | 阿里巴巴集团控股有限公司 | 数据处理方法及装置 |
CN112307037A (zh) * | 2019-07-26 | 2021-02-02 | 北京京东振世信息技术有限公司 | 一种数据同步方法和装置 |
CN113254207A (zh) * | 2021-05-26 | 2021-08-13 | 北京达佳互联信息技术有限公司 | 一种标识码生成方法、装置、服务器和存储介质 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109191162A (zh) * | 2018-07-06 | 2019-01-11 | 中国建设银行股份有限公司 | 信息处理方法、系统、装置及存储介质 |
CN112822091B (zh) * | 2019-11-18 | 2023-05-30 | 北京京东尚科信息技术有限公司 | 一种消息处理方法和装置 |
CN111708775B (zh) * | 2020-05-21 | 2023-06-27 | 四川虹美智能科技有限公司 | 自增id生成方法、装置及系统 |
US11763359B2 (en) * | 2021-01-07 | 2023-09-19 | Stripe, Inc. | Invoice numbering |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5327557A (en) * | 1988-07-18 | 1994-07-05 | Digital Equipment Corporation | Single-keyed indexed file for TP queue repository |
US6052695A (en) * | 1995-02-28 | 2000-04-18 | Ntt Data Communications Systems Corporation | Accurate completion of transaction in cooperative type distributed system and recovery procedure for same |
US20060224807A1 (en) * | 2005-03-30 | 2006-10-05 | Canon Kabushiki Kaisha | Recording apparatus and recording control method for executing recording according to setting of print parameters |
US20070061379A1 (en) * | 2005-09-09 | 2007-03-15 | Frankie Wong | Method and apparatus for sequencing transactions globally in a distributed database cluster |
US20090217274A1 (en) * | 2008-02-26 | 2009-08-27 | Goldengate Software, Inc. | Apparatus and method for log based replication of distributed transactions using globally acknowledged commits |
CN101652761A (zh) * | 2007-04-11 | 2010-02-17 | 微软公司 | 使用缓存写和强制串行化次序的事务存储器 |
CN101699439A (zh) * | 2009-11-16 | 2010-04-28 | 中兴通讯股份有限公司 | 一种数据库的事务提交方法和装置 |
US20100257404A1 (en) * | 2009-04-04 | 2010-10-07 | Oracle International Corporation | Method and system for implementing a scalable, high-performance, fault-tolerant locking mechanism in a multi-process environment |
US20110029498A1 (en) * | 2009-07-10 | 2011-02-03 | Xkoto, Inc. | System and Method for Subunit Operations in a Database |
CN102156720A (zh) * | 2011-03-28 | 2011-08-17 | 中国人民解放军国防科学技术大学 | 一种数据恢复的方法、装置和系统 |
CN102193981A (zh) * | 2011-03-25 | 2011-09-21 | 北京世纪互联工程技术服务有限公司 | 图形数据库联机事务中事务过期机制的实现方法 |
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN103885986A (zh) * | 2012-12-21 | 2014-06-25 | 阿里巴巴集团控股有限公司 | 主备数据库同步的方法和装置 |
US20150199415A1 (en) * | 2014-01-16 | 2015-07-16 | International Business Machines Corporation | Parallel transaction messages for database replication |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7480672B2 (en) | 2005-03-31 | 2009-01-20 | Sap Ag | Multiple log queues in a database management system |
US7426653B2 (en) * | 2005-04-13 | 2008-09-16 | Progress Software Corporation | Fault tolerant distributed lock management |
US7801846B2 (en) * | 2006-04-04 | 2010-09-21 | Computer Associates Think, Inc. | Generating log sequence identifiers to apply a transaction to a storage system |
US7539031B2 (en) * | 2006-09-19 | 2009-05-26 | Netlogic Microsystems, Inc. | Inexact pattern searching using bitmap contained in a bitcheck command |
JP5133219B2 (ja) | 2008-11-25 | 2013-01-30 | キヤノンソフトウェア株式会社 | 情報処理装置、文書管理システム、制御方法及びプログラム |
US20110145255A1 (en) * | 2009-12-11 | 2011-06-16 | Sap Ag. | Systems and methods for distribution of data in a database index |
US8868508B2 (en) * | 2010-02-09 | 2014-10-21 | Google Inc. | Storage of data in a distributed storage system |
US8965860B2 (en) * | 2010-04-01 | 2015-02-24 | Salesforce.Com, Inc. | Methods and systems for bulk uploading of data in an on-demand service environment |
US8510270B2 (en) * | 2010-07-27 | 2013-08-13 | Oracle International Corporation | MYSQL database heterogeneous log based replication |
US8442962B2 (en) * | 2010-12-28 | 2013-05-14 | Sap Ag | Distributed transaction management using two-phase commit optimization |
US8838526B2 (en) * | 2011-06-24 | 2014-09-16 | Salesforce.Com, Inc. | Systems and methods for supporting transactional message handling |
US10042910B2 (en) | 2014-02-24 | 2018-08-07 | Sap Se | Database table re-partitioning using two active partition specifications |
US10108657B2 (en) * | 2014-09-12 | 2018-10-23 | Sybase, Inc. | Methods, systems, and apparatus for processing data event streams in a database environment |
US9594644B2 (en) * | 2014-09-19 | 2017-03-14 | Sybase, Inc. | Converting a serial transaction schedule to a parallel transaction schedule |
-
2016
- 2016-10-10 CN CN201610884605.0A patent/CN107918620B/zh active Active
-
2017
- 2017-10-10 WO PCT/US2017/055915 patent/WO2018071406A1/en unknown
- 2017-10-10 JP JP2019516411A patent/JP6935491B2/ja active Active
- 2017-10-10 US US15/729,599 patent/US11640384B2/en active Active
- 2017-10-10 EP EP17860652.1A patent/EP3523726A4/en not_active Withdrawn
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5327557A (en) * | 1988-07-18 | 1994-07-05 | Digital Equipment Corporation | Single-keyed indexed file for TP queue repository |
US6052695A (en) * | 1995-02-28 | 2000-04-18 | Ntt Data Communications Systems Corporation | Accurate completion of transaction in cooperative type distributed system and recovery procedure for same |
US20060224807A1 (en) * | 2005-03-30 | 2006-10-05 | Canon Kabushiki Kaisha | Recording apparatus and recording control method for executing recording according to setting of print parameters |
US20070061379A1 (en) * | 2005-09-09 | 2007-03-15 | Frankie Wong | Method and apparatus for sequencing transactions globally in a distributed database cluster |
CN101652761A (zh) * | 2007-04-11 | 2010-02-17 | 微软公司 | 使用缓存写和强制串行化次序的事务存储器 |
US20090217274A1 (en) * | 2008-02-26 | 2009-08-27 | Goldengate Software, Inc. | Apparatus and method for log based replication of distributed transactions using globally acknowledged commits |
US20100257404A1 (en) * | 2009-04-04 | 2010-10-07 | Oracle International Corporation | Method and system for implementing a scalable, high-performance, fault-tolerant locking mechanism in a multi-process environment |
US20110029498A1 (en) * | 2009-07-10 | 2011-02-03 | Xkoto, Inc. | System and Method for Subunit Operations in a Database |
CN101699439A (zh) * | 2009-11-16 | 2010-04-28 | 中兴通讯股份有限公司 | 一种数据库的事务提交方法和装置 |
CN102193981A (zh) * | 2011-03-25 | 2011-09-21 | 北京世纪互联工程技术服务有限公司 | 图形数据库联机事务中事务过期机制的实现方法 |
CN102156720A (zh) * | 2011-03-28 | 2011-08-17 | 中国人民解放军国防科学技术大学 | 一种数据恢复的方法、装置和系统 |
CN102831156A (zh) * | 2012-06-29 | 2012-12-19 | 浙江大学 | 一种云计算平台上的分布式事务处理方法 |
CN103885986A (zh) * | 2012-12-21 | 2014-06-25 | 阿里巴巴集团控股有限公司 | 主备数据库同步的方法和装置 |
US20150199415A1 (en) * | 2014-01-16 | 2015-07-16 | International Business Machines Corporation | Parallel transaction messages for database replication |
Non-Patent Citations (2)
Title |
---|
云贵全 等: "《企业级Java EE商业项目开发》", 31 August 2015, 西南交通大学出版社 * |
王知明: "基于SyncML的移动数据同步过程的研究与优化", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109241193A (zh) * | 2018-09-26 | 2019-01-18 | 联想(北京)有限公司 | 分布式数据库的处理方法和装置,及服务器集群 |
CN109408480A (zh) * | 2018-09-29 | 2019-03-01 | 武汉达梦数据库有限公司 | 基于oracle多节点rac日志基于scn对齐读取的方法及系统 |
CN110012050A (zh) * | 2018-12-04 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 消息处理、存储方法、装置及系统 |
CN111858516A (zh) * | 2019-04-30 | 2020-10-30 | 阿里巴巴集团控股有限公司 | 数据处理方法及装置 |
CN112307037A (zh) * | 2019-07-26 | 2021-02-02 | 北京京东振世信息技术有限公司 | 一种数据同步方法和装置 |
CN112307037B (zh) * | 2019-07-26 | 2023-09-22 | 北京京东振世信息技术有限公司 | 一种数据同步方法和装置 |
CN111400333A (zh) * | 2020-03-19 | 2020-07-10 | 嘉兴太美医疗科技有限公司 | 数据并行写入方法、系统和计算机可读介质 |
CN111488366A (zh) * | 2020-04-09 | 2020-08-04 | 百度在线网络技术(北京)有限公司 | 关系型数据库更新方法、装置、设备及存储介质 |
CN111488366B (zh) * | 2020-04-09 | 2023-08-01 | 百度在线网络技术(北京)有限公司 | 关系型数据库更新方法、装置、设备及存储介质 |
CN111752953A (zh) * | 2020-06-29 | 2020-10-09 | 北京百度网讯科技有限公司 | 标识生成方法、装置、设备以及存储介质 |
CN113254207A (zh) * | 2021-05-26 | 2021-08-13 | 北京达佳互联信息技术有限公司 | 一种标识码生成方法、装置、服务器和存储介质 |
CN113254207B (zh) * | 2021-05-26 | 2024-05-28 | 北京达佳互联信息技术有限公司 | 一种标识码生成方法、装置、服务器和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
EP3523726A1 (en) | 2019-08-14 |
WO2018071406A1 (en) | 2018-04-19 |
JP6935491B2 (ja) | 2021-09-15 |
EP3523726A4 (en) | 2019-08-14 |
US20180101563A1 (en) | 2018-04-12 |
CN107918620B (zh) | 2022-04-19 |
JP2019537773A (ja) | 2019-12-26 |
US11640384B2 (en) | 2023-05-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107918620A (zh) | 一种数据库的写入方法及装置、电子设备 | |
US10949447B2 (en) | Blockchain-based data synchronizing and data block parsing method and device | |
CN107688999B (zh) | 一种基于区块链的并行交易执行方法 | |
CN112887421A (zh) | 区块链状态数据同步方法及装置、电子设备 | |
US8904006B2 (en) | In-flight block map for a clustered redirect-on-write filesystem | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
CN103092903A (zh) | 数据库日志并行化 | |
US20110153570A1 (en) | Data replication and recovery method in asymmetric clustered distributed file system | |
CN108280080A (zh) | 一种数据同步方法、装置以及电子设备 | |
CN103186554A (zh) | 分布式数据镜像方法及存储数据节点 | |
CN114594914B (zh) | 用于分布式存储系统的控制方法及系统 | |
EP3079065B1 (en) | Redo-logging for partitioned in-memory datasets | |
US12086156B2 (en) | Method and device for storing data in a distributed database | |
CN105426373A (zh) | 一种数据库同步方法与设备 | |
CN106897338A (zh) | 一种针对数据库的数据修改请求处理方法及装置 | |
CN111638995A (zh) | 元数据备份方法、装置及设备、存储介质 | |
CN111880956A (zh) | 一种数据同步方法和装置 | |
CN115756955A (zh) | 一种数据备份、数据恢复的方法、装置及计算机设备 | |
CN103905512B (zh) | 一种数据处理方法和设备 | |
CN111737226B (zh) | 一种基于Redis集群优化HBase集群性能的方法 | |
CN114127707A (zh) | 用于处理写请求的系统、计算节点和方法 | |
CN114328018B (zh) | 快照的创建方法、计算设备及存储介质 | |
Pankowski | Consistency and availability of Data in replicated NoSQL databases | |
CN113590273A (zh) | 事务处理方法、系统、设备及存储介质 | |
CN108616583A (zh) | 一种基于计算机云的存储空间分配方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |