CN115114258A - 数据复制方法、装置、电子设备及计算机存储介质 - Google Patents
数据复制方法、装置、电子设备及计算机存储介质 Download PDFInfo
- Publication number
- CN115114258A CN115114258A CN202110297292.XA CN202110297292A CN115114258A CN 115114258 A CN115114258 A CN 115114258A CN 202110297292 A CN202110297292 A CN 202110297292A CN 115114258 A CN115114258 A CN 115114258A
- Authority
- CN
- China
- Prior art keywords
- target
- transaction
- binary log
- database
- database table
- 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.)
- Pending
Links
Images
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/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/14—Details of searching files based on file metadata
- G06F16/148—File search processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- 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/21—Design, administration or maintenance of databases
- G06F16/219—Managing data history or versioning
-
- 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
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)
- Library & Information Science (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据复制方法、装置、电子设备及计算机存储介质,涉及数据库技术领域。该方法包括:获取待复制数据库中的至少一个二进制日志;遍历二进制日志中的事务,对于每次遍历的目标事务,判断目标事务的位点信息是否存储在预设的第一数据库表中;若确定目标事务的位点信息未存储在第一数据库表中,则在目标数据库中执行目标事务,并将目标事务的位点信息记录至第一数据库表,直至二进制日志中的所有事务遍历完成。本申请实施例可以防止同一事务在目标数据库中重复执行多次,即使程序故障,也不会发生数据错乱,并且保证了数据复制过程中操作的可重入,即使发生多次故障,也能保证数据的正确性。
Description
技术领域
本申请涉及数据库技术领域,具体而言,本申请涉及一种数据复制方法、装置、电子设备及计算机存储介质。
背景技术
在MySQL数据库中,二进制日志记录了所有修改了数据库的操作语句或者改变数据库的操作语句。二进制日志的回放主要应用于数据库之间的数据复制,如对一个主数据库建一个从数据库,将一个数据库的数据复制到另一个数据库中。
在现有技术中,采用基于GTID(Global Transaction ID entidfier,全局事务ID标识符),由数据库关联到每一个提交事务的全局唯一标识符,由GTID标识每一个事务,以使得已经执行过的事务不再重复执行。
对于例如版本过低不支持GTID、GTID被数据库显示禁止无法开启以及云服务提供商在某些版本禁止使用GTID等情况下,无法使用GTID进行二进制日志的回放,还有在与MySQL数据库外部的数据库交互时,GTID需要授权才能使用。这些不适用GTID的场景下,无法进行有效快速的复制数据库中的数据。
发明内容
本发明实施例提供一种克服上述问题或者至少部分地解决上述问题的数据复制方法、装置、电子设备及计算机存储介质。
第一方面,提供了一种数据复制方法,该方法包括:
获取待复制数据库中的至少一个二进制日志,每个二进制日志包括至少一个事务以及每个事务的位点信息,位点信息用于表示事务在待复制数据库中的存储位置;
遍历二进制日志中的事务,对于每次遍历的目标事务,判断目标事务的位点信息是否存储在预设的第一数据库表中;
若确定目标事务的位点信息未存储在第一数据库表中,则在目标数据库中执行目标事务,并将目标事务的位点信息记录至第一数据库表,直至二进制日志中的所有事务遍历完成;
其中,目标事务在目标数据库执行后生成的数据与目标数据在待复制数据库执行时生成的数据相同。
在一个可能的实现方式中,遍历二进制日志中的事务,还包括:
若确定目标事务的位点信息存储在第一数据库表中,则继续遍历下一个事务。
在另一个可能的实现方式中,在目标数据库中执行目标事务,之前还包括:
生成目标操作指令,目标操作指令用于在被执行时,将目标事务的位点信息存储至第一数据库表中;
将目标操作指令插入待执行事务的操作序列中。
在又一个可能的实现方式中,将目标事务所在的二进制日志作为目标二进制日志,目标事务的位点信息包括目标二进制日志的文件名以及目标事务在目标二进制日志中的存储位置;
将目标事务的位点信息存储至第一数据库表,包括:
将目标事务的位点信息存储至预设的第二数据库表;
在第一数据库表中查找目标二进制日志的文件名,若确定第一数据库表中存在目标二进制日志的文件名,则将目标事务在目标二进制日志中的存储位置合并至第一数据库表中的目标二进制日志中已执行的所有事务的存储位置。
在又一个可能的实现方式中,在第一数据库表中查找目标二进制日志的文件名,之后还包括:
若确定第一数据库表中不存在目标二进制日志的文件名,则在第一数据库表中创建目标二进制日志的文件名,并将目标二进制日志中已执行的所有事务的存储位置更新为目标事务在目标二进制日志中的存储位置。
在又一个可能的实现方式中,判断目标事务的位点信息是否存储在预设的第一数据库表中,包括:
若目标二进制日志的文件名存储在第一数据库表中,则判断目标存储位置是否记录在第一数据库表中的目标二进制日志中已执行的所有事务的存储位置中;
若目标存储位置记录在第一数据库表中的目标二进制日志中已执行的所有事务的存储位置中,则目标事务的位点信息存储在第一数据库表中;
其中,目标存储位置为目标事务在目标二进制日志中的存储位置。
在又一个可能的实现方式中,目标事务在二进制日志中的存储位置按照记录的时间顺序排列;
继续遍历下一个事务,包括:
根据目标事务在二进制日志中的排序,顺序确定二进制日志中与目标事务相邻的事务进行遍历。
第二方面,提供了一种数据复制装置,该装置包括:
获取模块,用于获取待复制数据库中的至少一个二进制日志,每个二进制日志包括至少一个事务以及每个事务的位点信息,位点信息用于表示事务在待复制数据库中的存储位置;
判断模块,用于遍历二进制日志中的事务,对于每次遍历的目标事务,判断目标事务的位点信息是否存储在预设的第一数据库表中;
执行模块,用于若确定目标事务的位点信息未存储在第一数据库表中,则在目标数据库中执行目标事务,并将目标事务的位点信息记录至第一数据库表,直至二进制日志中的所有事务遍历完成;
其中,目标事务在目标数据库执行后生成的数据与目标数据在待复制数据库执行时生成的数据相同。
第三方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时实现如第一方面所提供的方法的步骤。
第四方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面所提供的方法的步骤。
本发明实施例提供的数据复制方法、装置、电子设备及存储介质,通过获取待复制数据库中的二进制日志,确定二进制日志中记录的事务以及事务的位点信息,使用二进制日志本身记录的事务的位点信息唯一地标识事务,在数据库之间的数据复制时,通过判断哪些事务的位点信息已经被存储在预设的第一数据库表中,确定哪些事务已在目标数据库中执行过,防止同一事务在目标数据库中重复执行多次,即使程序故障,也不会发生数据错乱,并且保证了数据复制过程中操作的可重入,即使发生多次故障,也能保证数据的正确性。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对本申请实施例描述中所需要使用的附图作简单地介绍。
图1为本申请实施例提供的一种数据复制方法流程示意图;
图2为本申请实施例提供的一种二进制日志文件的格式图;
图3为本申请实施例提供的一种事务的位点信息的格式图;
图4为本申请实施例提供的一种事务的位点信息集合的格式图;
图5为本申请实施例提供的一种事务与事件的关系图;
图6为本申请实施例提供的一种位点信息合并的示意图;
图7为本申请实施例提供的一种数据复制装置的结构示意图;
图8为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
首先对本申请实施例中涉及的几个名词进行介绍和解释:
云技术(Cloud technology)是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术(Cloudtechnology)基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,只能通过云计算来实现。
数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
数据库管理系统(Database Management System,DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML(Extensible Markup Language,即可扩展标记语言);或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依据所用查询语言来作分类,例如SQL(Structured Query Language,结构化查询语言)、XQuery查询语言等;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。
事务,是数据库管理系统执行过程中的一个逻辑单位,数据库中的事务通常包含了一个序列的对数据库的读/写操作。事务具有四大特性,包括原子性、一致性、隔离性以及持久性。
二进制日志,是一个二进制文件,记录了数据库中修改数据库或引起数据库中的数据变更的所有操作,即二进制日志中记载的是事务中对数据库的写操作,而这些操作就是一个个事件。
二进制日志主要用于数据库的数据恢复以及主从复制,例如对一个主数据库建立一个从数据库,将数据库中的数据迁移或复制到从数据库中。在使用二进制日志进行数据库之间的数据复制时,可能因各种因素发生故障,导致数据复制中断,例如突然停电或电子设备老化等原因导致数据复制过程中被突然中断。在这种应用场景下,现有技术一般使用基于GTID(Global Transaction IDentifier,全局事务ID标识符)的二进制日志,在故障恢复后继续之前的数据复制。
具体地,重点在于如何记录数据复制的“位点”,即复制到了什么地方,故障前已经复制了多少数据,在故障修复后应该从哪个地方开始。也即待复制数据库中哪些事务已经在目标数据库中重新执行了,哪些事务还没有执行。基于GTID的复制是对已经在目标数据库中重新执行的事务进行标识,并合并为一个集合。在故障修复后,判断哪些事务已经执行过了,使得已经执行过的事务不在重复执行,继续故障前的数据复制。
但是很多情况下GTID可能无法使用,例如数据库版本过低不支持GTID、GTID被数据库的显示的设置中禁止或无法开启、云服务提供商在某些数据库版本禁止GTID等情况下,无法使用GTID。即使能使用GTID,也可能出现权限不足,例如需要Super权限才能使用GTID机制等情况下,GTID也无法使用,在这些场景下会出现有的事务被多次执行,而有的事务并没有被执行,从而导致数据混乱等问题。
本申请提供的数据复制方法、装置、电子设备及计算机存储介质,旨在解决现有技术的如上技术问题。
本申请实施例可以应用在各种数据库之间的数据复制或数据迁移使用到二进制日志的应用场景中。具体地,在突然断电断网、电子设备老化失灵等不可抗拒原因下,造成数据复制过程突然被中断或发生故障的情况下,本申请实施例提供的数据复制方法可以这种应用场景下保证故障恢复后,继续之前的复制进程。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
本申请实施例提供了一种数据复制方法,图1为本申请实施例提供的一种数据复制方法流程图,如图1所示,该方法包括:
S101、获取待复制数据库中的至少一个二进制日志,每个二进制日志包括至少一个事务以及每个事务的位点信息,位点信息用于表示事务在待复制数据库中的存储位置。
在进行数据库之间的复制时,首先需要从待复制数据库中获取二进制日志,二进制日志中记录了生成待复制数据库中的数据,或对待复制数据库中的数据进行变更的操作,也就是在待复制数据库中生成或变更数据的事务,这些事务就是在目标数据库中待执行的目标事务。
待复制数据库中存在多个二进制日志,一个二进制日中记载了多个事务,一个二进制日志中的事务由多个对数据库的写操作构成,每个操作都是一个事件。应当注意的是,一个事务都是由一个“BEGIN”事件为开始,一个“COMMIT”事件结尾。例如“同学A在商店B中购买了100元的商品”这一事务中包含四个事件,即“BEGIN”事件、“同学A的账户减少100元”事件、“商店B的账户增加100元”事件以及“COMMIT”事件。
图2为本申请实施例提供的一种二进制日志文件的格式图,如图所示,Log_name这一列表示二进制日志的文件名,即图中示例的“binlog.000103”;Position这一列表示事务在二进制日志文件中的起始存储位置,可以使用阿拉伯数字表示,它是严格递增的,即图中示例的“950”、“1034”、“1148”等;Event_type这一列表示事件的类型,即图中示例的“Query”、“Xid”等;Server_id这一列表示数据库服务器的唯一标识,即图中示例的“1”;End_log_position这一列表示事务在二进制日志文件中的结束存储位置,使用阿拉伯数字表示,即图中示例的“1034”、“1148”、“1179”等;Info这一列表示事件的基本信息,即图中示例的“BEGIN”、“Us`huige`INSERT INTO temp VALUSE(2,‘jesen’)”、“COMMIT/*xid=415*/”等。
上述图中二进制日志记载的这些信息组合可以唯一的标识一个事务,即组成了事务的位点信息,事务的位点信息包括数据库的唯一标识、事务所在的二进制日志的文件名以及事务在二进制日志中的存储位置等。具体地,根据二进制日中记录的信息简单的表示一个事务的位点信息,用于表示这一事务,例如图2中最后一个事务Xid,可以用“binlog.000103:1148-1179”来表示,其中“binlog.000103”描述二进制日志的文件名;“000103”是文件名的序号;“1148-1179”表达的是Xid这一事务在文件中的位置范围。
本申请实施例提供了一种特定的表示二进制日志中的事务的位点信息的格式,图3为本申请实施例提供的一种事务的位点信息的格式图,如图所示,其中Server_id表示数据库服务器的唯一标识,即图中示例的“3E11FA47-71CA-11E1-9E33-C80AA9429562”;filenumber表示二进制日志的文件名,它是严格递增的,即图中示例的“001”;Transaction_range表示事务在二进制日志中的位置范围,即图中示例的0-4,用区间表示就是[0,4)的左闭右开区间。具体地,可以使用冒号隔开这三个信息,整体表示为“3E11FA47-71CA-11E1-9E33-C80AA9429562:001:0-4”,用来表示该事务的位点信息,可以唯一地标识这一事务。
进一步地,图4为本申请实施例提供的一种事务的位点信息集合的格式图,与图3的差别在于Transaction_range set表示多个事务在二进制日中的位置范围的集合,在同一数据库中的同一二进制日志文件中的多个事务,在二进制日志中的位置范围可以写在一起,使用逗号隔开组成集合,即图中示例的“0-4,10-14”,同样也可以使用冒号隔开这三个信息,整体表示为“3E11FA47-71CA-11E1-9E33-C80AA9429562:001:0-4,10-14”。
S102、遍历二进制日志中的事务,对于每次遍历的目标事务,判断目标事务的位点信息是否存储在预设的第一数据库表中。
具体的,可以从用户指定的位置开始遍历搜索二进制日志中记录的事务,读取并解析出事务,然后在目标数据库中运行。但由于存在数据复制过程中因故障被中断,有些事务已经在目标数据库中重新执行过,有些事务还未在目标数据库中重新执行。本申请实施例预先建立了第一数据库表,用于存储已经在目标数据库中重新执行的事务的位点信息。对于每次遍历的事务作为目标事务,可以基于第一数据库表中存储的位点信息,判断目标事务的位点信息是否存储在预设的第一数据库表中,进而确定目标事务是否已在目标数据库中重新执行,是一个简单的区间判断,速度很快。
S103、若确定目标事务的位点信息未存储在第一数据库表中,则在目标数据库中执行目标事务,并将目标事务的位点信息记录至第一数据库表,直至二进制日志中的所有事务遍历完成;
其中,目标事务在目标数据库执行后生成的数据与目标事务在待复制数据库执行时生成的数据相同。
若确定目标事务的位点信息未存储在预设的第一数据库表中,即目标事务未在目标数据库中重新执行,则在目标数据库中执行目标事务,目标事务在目标数据库执行后生成的数据与目标事务在待复制数据库中执行时生成的数据相同,从而使得目标数据库中的数据与待复制数据库中的数据相同,实现数据库之间的数据复制。
应当注意的是,在任意目标事务在目标数据库执行后,将目标事务的位点信息记录到第一数据库表中,使得第一数据库表中记录所有在目标数据库中执行过的事务的位点信息。这是一个动态的过程,每次执行完一个事务,都会将该事务的位点信息记录至第一数据库表中,直至二进制日志中的所有事务都遍历完成,这时目标数据库中的数据就与待复制数据库中的数据相同。
本申请实施例通过获取待复制数据库中的二进制日志,确定二进制日志中记录的事务以及事务的位点信息,使用二进制日志本身记录的事务的位点信息唯一地标识事务,在数据库之间的数据复制时,通过判断哪些事务的位点信息已经被存储在预设的第一数据库表中,确定哪些事务已在目标数据库中执行过,防止同一事务在目标数据库中重复执行多次,即使程序故障,也不会发生数据错乱,并且保证了数据复制过程中操作的可重入,即使发生多次故障,也能保证数据的正确性。
本申请实施例中还提供了一种可能的实现方式,遍历二进制日志中的事务,还包括:
若确定目标事务的位点信息存储在第一数据库表中,则继续遍历下一个事务。
若遍历二进制日志得到的目标事务的位点信息已存储在第一数据库表中,即目标事务已经在目标数据库中执行过,生成了相应的数据,不必再重复的执行,则继续遍历二进制日志中的下一个事务,直至二进制日志中所有的事务都判断完毕。
本申请实施例通过不断地遍历二进制日志,通过第一数据库表,确定事务已经在目标数据库执行过,继续判断下一个事务,可以保证数据复制过程的高效性,避免重复多次执行同一事务。
本申请实施例中还提供了一种可能的实现方式,在目标数据库中执行目标事务,之前还包括:
生成目标操作指令,目标操作指令用于在被执行时,将目标事务的位点信息存储至第一数据库表中;
将目标操作指令插入目标事务的操作序列中。
图5为本申请实施例提供的一种事务与事件的关系图,如图5所示,其中,BEGIN、EV1、EV2、COMMIT等表示一个个事件,其中每个事务都以一个BEGIN事件开始,以一个COMMIT事件为结束。
因此,可以通过根据目标事务的位点信息,生成目标操作指令,并将目标操作指令插入目标事务的操作序列中,具体的,本申请实施例将目标操作指令插入到目标事务的最后一个事件即COMMIT事件之前,将目标操作指令插入在COMMIT事件之前不会影响事务中的其他操作的执行,而事务执行COMMIT事件时,在COMMIT事件之前所有的操作都是已经执行完毕的,将COMMIT事件作为事务执行的结束,因此事务执行结束了,目标操作指令也会被执行,这是根据事务的原子性确定的,即一个事务中的所有操作要么都执行了,要么都不会执行,不会出现中间状态,可以保证目标事务在目标数据库执行后,目标操作指令也被执行,而目标操作指令是根据目标事务的位点信息生成的,用于在被执行时,将目标事务的位点信息存储至第一数据库表中。
本申请实施例通过将目标操作指令插入到目标事务的操作序列中,并根据事务的原子性,保证目标事务执行后,目标操作指令也被执行,并将目标事务的位点信息存储至第一数据库表中,避免目标事务重复多次在目标数据库中执行,利用事务本身的特性在逻辑上保证的数据的正确性。
本申请实施例中还提供了一种可能的实现方式,将目标事务所在的二进制日志作为目标二进制日志,目标事务的位点信息包括目标二进制日志的文件名以及目标事务在目标二进制日志中的存储位置;
将目标事务的位点信息存储至第一数据库表,包括:
将目标事务的位点信息存储至预设的第二数据库表;
在第一数据库表中查找目标二进制日志的文件名,若确定第一数据库表中存在目标二进制日志的文件名,则将目标事务在目标二进制日志中的存储位置合并至第一数据库表中的目标二进制日志中已执行的所有事务的存储位置。
在待复制数据库中存在多个二进制日志文件,一个二进制日志文件中包含多个事务,对于遍历二进制日志确定的一个事务,作为目标事务,目标事务所在的二进制日志作为目标二进制日志。在将目标事务的位点信息存储在第一数据库表之前,需要先将将目标事务的位点信息存储至预设的第二数据库表中,然后将第二数据库表中存储的位点信息合并至第一数据库表中。
本申请实施例使用第一数据库表以及第二数据库表两张表的原因是:对于一张数据库表,由于锁机制,同时只能进行一个操作,插入数据与合并数据这两个操作不能同时进行,即将位点信息插入至数据库表与将数据库表中的位点信息进行合并这两个操作不能同时进行。但在实际实现过程中,在数据库表中插入位点信息的速度很快,一秒钟可能插入上万次,如果同时还需合并位点信息的话,会产生锁等待的问题,降低了效率,因此本申请实施例通过使用第一数据库表以及第二数据库表两张表分别进行插入位点信息和合并位点信息,有效提高了程序性能。
在故障恢复重新开始复制时,首先就须将第二数据库表中的位点信息合并至第一数据库表中,可以保证操作上的可重入,即是发生多次故障也不会重复执行目标事务。在第二数据库表中存储的数据过多时,可以定期对其中存储的已经在目标数据库中执行的目标事务的位点信息进行删除。
应当注意的是,由于一个事务执行后,该事务的位点信息就插入到了第二数据库表中,其中的位点信息分布是离散的,即一个一个的,例如图3中示例的“3E11FA47-71CA-11E1-9E33-C80AA9429562:001:0-4”。而将第二数据库表中存储的位点信息合并至第一数据库表中时,第一数据库表中的位点信息是聚合的,是一个集合,可以基于二进制日志的文件名来表示一个集合,例如图4中示例的“3E11FA47-71CA-11E1-9E33-C80AA9429562:001:0-4,10-14”。
图6为本申请实施例提供的一种位点信息合并的示意图,其中,“3E11FA47-71CA-11E1-9E33-C80AA9429562:001:0-4,10-14”是指待复制数据库“3E11FA47-71CA-11E1-9E33-C80AA9429562”中的二进制日志“001”的“0-4,10-14”位置范围的事务。在一个待复制数据库,数据库服务器的唯一标识相同,对于同一个二进制日文件中的事务,二进制日志文件名也相同,因此合并的其实就是事务在二进制日志中的位置范围。特别的,本申请实施例中以“0”表示文件的结尾,例如“14-0”表示文件中位置为“14”至文件结尾“0”。
如图6所示,第一次合并:二进制日志文件“001”的“0-4,10-14”位置范围的事务、二进制日志文件“001”的“6-10”的事务、二进制日志“002”的“0-6”位置范围的事务进行合并,得到:二进制日志“001”的“0-4,6-14”位置范围的事务,二进制日志“002”的“0-6”位置范围的事务。
第二次合并:二进制日志文件“001”的“0-4,6-14”位置范围的事务、二进制日志“002”的“0-6”位置范围的事务、二进制日志“001”的“4-6”位置范围的事务、二进制日志“001”的“14-0”位置范围的事务进行合并,得到:二进制日“002”的“0-6”位置范围的事务。其中,二进制日志“001”的位置范围合并成为了0-0,不再显示。
本申请实施例通过结合第一数据库表与第二数据库表,分别完成不同的工作,提高了程序运行的效率,保证了操作的可重入。并基于二进制日志文件的文件名,将相同二进制日志文件中的事务的位点信息进行合并,可以便于判断目标事务是否在目标数据库中执行,加快了判断的速度。
本申请实施例中还提供了一种可能的实现方式,在第一数据库表中查找目标二进制日志的文件名,之后还包括:
若确定第一数据库表中不存在目标二进制日志的文件名,则在第一数据库表中创建目标二进制日志的文件名,并将目标二进制日志中已执行的所有事务的存储位置更新为目标事务在目标二进制日志中的存储位置。
根据上述的第一数据库表中存储的事务的位点信息的格式,其中数据库服务器的唯一标识就是待复制数据库的数据库服务器的唯一标识,即在本实施例中所有事务的位点信息中数据库服务器的唯一标识都相同。而对于在不同的二进制日志文件中的事务,它们的位点信息中的二进制日志的文件名是不同的,当然它们的位点信息中的在二进制日志文件中的位置范围也是不同的。
因此,在第一数据库表中查找目标二进制日志,首先需确定第一数据库表中是否存在目标二进制日志的文件名,若第一数据库表中不存在目标二进制日志的文件名,则在第一数据库表中创建目标二进制日志的文件名,并将目标二进制日志中已经执行的所有事务的存储位置更新为在目标二进制日志中的存储位置,即将目标数据库中已经执行的事务的位点信息存储在第一数据库表中所创建的目标二进制日志的文件名的存储位置下,并根据目标二进制日志的文件名对事务的位点信息进行合并,成为一个名称包括目标二进制日志文件名的位点信息集合。
本申请实施例通过在第一数据库表中创建目标事务所在的目标二进制日志的文件名,建立了存储位置,以存储所有位点信息中二进制日志文件名为目标二进制日志文件名的事务,使得第一数据库表中的数据更为简洁明了,便于进行事务的位点信息是否存储第一数据库表中的判断。
本申请实施例中还提供了一种可能的实现方式,判断目标事务的位点信息是否存储在预设的第一数据库表中,包括:
若目标二进制日志的文件名存储在第一数据库表中,则判断目标存储位置是否记录在第一数据库表中的目标二进制日志中已执行的所有事务的存储位置中;
若目标存储位置记录在第一数据库表中的目标二进制日志中已执行的所有事务的存储位置中,则目标事务的位点信息存储在第一数据库表中;
其中,目标存储位置为目标事务在目标二进制日志中的存储位置。
判断目标事务的位点信息是否存储在预设的第一数据库表中,具体地,首先需要判断目标事务所在的目标二进制日志的文件名是否存在第一数据库表中,即第一数据库表在是否已创建目标二进制日志的文件名。
若目标二进制日志的文件名存在第一数据库表中,因目标事务的位点信息还包括目标事务在目标二进制日志中的存储位置,将目标事务在目标二进制日志中的存储位置作为目标存储位置,还需判断目标存储位置是否记录在第一数据库表中的目标二进制日志中已执行的所有事务的存储位置中,即目标事务的位点信息是否已存储在第一数据库表中。
若目标存储位置记录在第一数据库表中的目标二进制日志中已执行的所有事务的存储位置中,则目标事务的位点信息存储在第一数据库表中。
本申请实施例通过分别判断目标事务的位点信息中的目标二进制日志的文件名以及目标事务在目标二进制日中的存储位置,可以准确判断目标事务的位点信息是否存储在第一数据库表中,以确定目标事务是否已在目标数据库中执行,避免了目标事务在目标数据库中重复执行,而导致数据错乱的问题,保证了目标数据库中的数据与待复制数据库中数据相同,提高了数据的准确性。
本申请实施例中还提供了一种可能的实现方式,目标事务在二进制日志中的存储位置按照记录的时间顺序排列;
继续遍历下一个事务,包括:
根据目标事务在二进制日志中的排序,顺序确定二进制日志中与目标事务相邻的事务进行遍历。
二进制日志中记录事务的顺序一般是按照时间顺序记录的,在遍历二进制日志时,可以从用户指定的位置开始进行遍历目标事务,遍历完目标事务后,顺序确定与目标事务相邻的下一个事务进行遍历,即遍历按照时间顺序排列的下一个事务,这样可以从二进制日文件的开始遍历到结尾,将所有的事务以及事务的位点信息读取出来。
本申请实施例通过按照顺序遍历二进制日志,将二进制日志中所有事务以及事务的位点信息读取出来,可以方便快速的进行下一步的判断。
本申请实施例中还提供了一种可能的实现方式,待复制数据库中的二进制日志的文件名以依次递增的阿拉伯数字进行标识。
二进制日志的文件名是严格递增的,通常采用的是阿拉伯数字,按照数字的大小严格递增进行排列的,例如图5中的“001”、“002”等,因此本申请实施例中以依次递增的阿拉伯数字来标识二进制日志的文件名,即使用数字直接表示二进制日志的文件名。
本申请实施例通过使用严格递增的阿拉伯数字表示二进制日志的文件名,非常简洁明了,也可以准确表达出事务的位点信息中包含的事务所在的二进制日志的文件名。
本申请实施例提供了一种数据复制装置,如图7所示,该装置可以包括:获取模块11、判断模块12以及执行模块13,具体地:
获取模块11,用于获取待复制数据库中的至少一个二进制日志,每个二进制日志包括至少一个事务以及每个事务的位点信息,位点信息用于表示事务在待复制数据库中的存储位置;
判断模块12用于遍历二进制日志中的事务,对于每次遍历的目标事务,判断目标事务的位点信息是否存储在预设的第一数据库表中;
执行模块13,用于若确定目标事务的位点信息未存储在第一数据库表中,则在目标数据库中执行目标事务,并将目标事务的位点信息记录至第一数据库表,直至二进制日志中的所有事务遍历完成;
其中,目标事务在目标数据库执行后生成的数据与目标数据在待复制数据库执行时生成的数据相同.
本发明实施例提供的数据复制装置,具体执行上述方法实施例流程,具体请详见上述数据复制方法实施例的内容,在此不再赘述。本发明实施例提供的数据复制装置,通过获取待复制数据库中的二进制日志,确定二进制日志中记录的事务以及事务的位点信息,使用二进制日志本身记录的事务的位点信息唯一地标识事务,在数据库之间的数据复制时,通过判断哪些事务的位点信息已经被存储在预设的第一数据库表中,确定哪些事务已在目标数据库中执行过,防止同一事务在目标数据库中重复执行多次,即使程序故障,也不会发生数据错乱,并且保证了数据复制过程中操作的可重入,即使发生多次故障,也能保证数据的正确性。
在一个可能的实现方式中,判断模块12包括:
遍历模块,用于若确定目标事务的位点信息存储在第一数据库表中,则继续遍历下一个事务。
在另一个可能的实现方式中,执行模块13包括:
插入模块,用于生成目标操作指令,目标操作指令用于在被执行时,将目标事务的位点信息存储至第一数据库表中;
将目标操作插入指令待执行事务的操作序列中。
在又一个可能的实现方式中,执行模块13还包括:
存储模块,用于将目标事务所在的二进制日志作为目标二进制日志,目标事务的位点信息包括目标二进制日志的文件名以及目标事务在目标二进制日志中的存储位置;
将目标事务的位点信息存储至第一数据库表,包括:
将目标事务的位点信息存储至预设的第二数据库表;
在第一数据库表中查找目标二进制日志的文件名,若确定第一数据库表中存在目标二进制日志的文件名,则将目标事务在目标二进制日志中的存储位置合并至第一数据库表中的目标二进制日志中已执行的所有事务的存储位置。
在又一个可能的实现方式中,存储模块包括:
创建子单元,用于若确定第一数据库表中不存在目标二进制日志的文件名,则在第一数据库表中创建目标二进制日志的文件名,并将目标二进制日志中已执行的所有事务的存储位置更新为目标事务在目标二进制日志中的存储位置。
在又一个可能的实现方式中,存储模块还包括:
判断子单元,用于判断目标事务的位点信息是否存储在预设的第一数据库表中,包括:
若目标二进制日志的文件名存储在第一数据库表中,则判断目标存储位置是否记录在第一数据库表中的目标二进制日志中已执行的所有事务的存储位置中;
若目标存储位置记录在第一数据库表中的目标二进制日志中已执行的所有事务的存储位置中,则目标事务的位点信息存储在第一数据库表中;
其中,目标存储位置为目标事务在目标二进制日志中的存储位置。
在又一个可能的实现方式中,遍历模块包括:
顺序遍历子单元,用于目标事务在二进制日志中的存储位置按照记录的时间顺序排列;
继续遍历下一个事务,包括:
根据目标事务在二进制日志中的排序,顺序确定二进制日志中与目标事务相邻的事务进行遍历。
本申请实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,与现有技术相比可实现:通过获取待复制数据库中的二进制日志,确定二进制日志中记录的事务以及事务的位点信息,使用二进制日志本身记录的事务的位点信息唯一地标识事务,在数据库之间的数据复制时,通过判断哪些事务的位点信息已经被存储在预设的第一数据库表中,确定哪些事务已在目标数据库中执行过,防止同一事务在目标数据库中重复执行多次,即使程序故障,也不会发生数据错乱,并且保证了数据复制过程中操作的可重入,即使发生多次故障,也能保证数据的正确性。
在一个可选实施例中提供了一种电子设备,如图8所示,图8所示的电子设备4000包括:处理器4001和存储器4003。其中,处理器4001和存储器4003相连,如通过总线4002相连。可选地,电子设备4000还可以包括收发器4004。需要说明的是,实际应用中收发器4004不限于一个,该电子设备4000的结构并不构成对本申请实施例的限定。
处理器4001可以是CPU(Central Processing Unit,中央处理器),通用处理器,DSP(Digital Signal Processor,数据信号处理器),ASIC(Application SpecificIntegrated Circuit,专用集成电路),FPGA(Field Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器4001也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线4002可包括一通路,在上述组件之间传送信息。总线4002可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线或EISA(ExtendedIndustry Standard Architecture,扩展工业标准结构)总线等。总线4002可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器4003可以是ROM(Read Only Memory,只读存储器)或可存储静态信息和指令的其他类型的静态存储设备,RAM(Random Access Memory,随机存取存储器)或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM(Electrically ErasableProgrammable Read Only Memory,电可擦可编程只读存储器)、CD-ROM(Compact DiscRead Only Memory,只读光盘)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器4003用于存储执行本申请方案的应用程序代码,并由处理器4001来控制执行。处理器4001用于执行存储器4003中存储的应用程序代码,以实现前述方法实施例所示的内容。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,通过获取待复制数据库中的二进制日志,确定二进制日志中记录的事务以及事务的位点信息,使用二进制日志本身记录的事务的位点信息唯一地标识事务,在数据库之间的数据复制时,通过判断哪些事务的位点信息已经被存储在预设的第一数据库表中,确定哪些事务已在目标数据库中执行过,防止同一事务在目标数据库中重复执行多次,即使程序故障,也不会发生数据错乱,并且保证了数据复制过程中操作的可重入,即使发生多次故障,也能保证数据的正确性。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (10)
1.一种数据复制方法,其特征在于,所述方法包括:
获取待复制数据库中的至少一个二进制日志,每个所述二进制日志包括至少一个事务以及每个所述事务的位点信息,所述位点信息用于表示所述事务在所述待复制数据库中的存储位置;
遍历所述二进制日志中的事务,对于每次遍历的目标事务,判断所述目标事务的位点信息是否存储在预设的第一数据库表中;
若确定所述目标事务的位点信息未存储在所述第一数据库表中,则在所述目标数据库中执行所述目标事务,并将所述目标事务的位点信息记录至所述第一数据库表,直至所述二进制日志中的所有事务遍历完成;
其中,所述目标事务在所述目标数据库执行后生成的数据与所述目标数据在所述待复制数据库执行时生成的数据相同。
2.根据权利要求1所述的数据复制方法,其特征在于,所述遍历所述二进制日志中的事务,还包括:
若确定所述目标事务的位点信息存储在所述第一数据库表中,则继续遍历下一个事务。
3.根据权利要求1所述的数据复制方法,其特征在于,所述在所述目标数据库中执行所述目标事务,之前还包括:
生成目标操作指令,所述目标操作指令用于在被执行时,将所述目标事务的位点信息存储至所述第一数据库表中;
将所述目标操作指令插入所述待执行事务的操作序列中。
4.根据权利要求1-3任意一项所述的数据复制方法,其特征在于,将所述目标事务所在的二进制日志作为目标二进制日志,所述目标事务的位点信息包括目标二进制日志的文件名以及所述目标事务在所述目标二进制日志中的存储位置;
所述将所述目标事务的位点信息存储至所述第一数据库表,包括:
将所述目标事务的位点信息存储至预设的第二数据库表;
在所述第一数据库表中查找所述目标二进制日志的文件名,若确定所述第一数据库表中存在所述目标二进制日志的文件名,则将所述目标事务在所述目标二进制日志中的存储位置合并至所述第一数据库表中的所述目标二进制日志中已执行的所有事务的存储位置。
5.根据权利要求4所述的数据复制方法,其特征在于,所述在所述第一数据库表中查找所述目标二进制日志的文件名,之后还包括:
若确定所述第一数据库表中不存在所述目标二进制日志的文件名,则在所述第一数据库表中创建所述目标二进制日志的文件名,并将所述目标二进制日志中已执行的所有事务的存储位置更新为所述目标事务在所述目标二进制日志中的存储位置。
6.根据权利要求4所述的数据复制方法,其特征在于,所述判断所述目标事务的位点信息是否存储在预设的第一数据库表中,包括:
若所述目标二进制日志的文件名存储在所述第一数据库表中,则判断所述目标存储位置是否记录在所述第一数据库表中的所述目标二进制日志中已执行的所有事务的存储位置中;
若所述目标存储位置记录在所述第一数据库表中的所述目标二进制日志中已执行的所有事务的存储位置中,则所述目标事务的位点信息存储在所述第一数据库表中;
其中,所述目标存储位置为所述目标事务在所述目标二进制日志中的存储位置。
7.根据权利要求2所述的数据复制方法,其特征在于,所述目标事务在所述二进制日志中的存储位置按照记录的时间顺序排列;
所述继续遍历下一个事务,包括:
根据所述目标事务在所述二进制日志中的排序,顺序确定二进制日志中与所述目标事务相邻的事务进行遍历。
8.一种数据复制装置,其特征在于,所述装置包括:
获取模块,用于获取待复制数据库中的至少一个二进制日志,每个所述二进制日志包括至少一个事务以及每个所述事务的位点信息,所述位点信息用于表示所述事务在所述待复制数据库中的存储位置;
判断模块,用于遍历所述二进制日志中的事务,对于每次遍历的目标事务,判断所述目标事务的位点信息是否存储在预设的第一数据库表中;
执行模块,用于若确定所述目标事务的位点信息未存储在所述第一数据库表中,则在所述目标数据库中执行所述目标事务,并将所述目标事务的位点信息记录至所述第一数据库表,直至所述二进制日志中的所有事务遍历完成;
其中,所述目标事务在所述目标数据库执行后生成的数据与所述目标数据在所述待复制数据库执行时生成的数据相同。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述数据库中的数据复制方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如权利要求1至7中任意一项所述数据库中的数据复制方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110297292.XA CN115114258A (zh) | 2021-03-19 | 2021-03-19 | 数据复制方法、装置、电子设备及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110297292.XA CN115114258A (zh) | 2021-03-19 | 2021-03-19 | 数据复制方法、装置、电子设备及计算机存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115114258A true CN115114258A (zh) | 2022-09-27 |
Family
ID=83322773
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110297292.XA Pending CN115114258A (zh) | 2021-03-19 | 2021-03-19 | 数据复制方法、装置、电子设备及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115114258A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117555884A (zh) * | 2024-01-12 | 2024-02-13 | 腾讯科技(深圳)有限公司 | 数据页的读取方法、装置、设备及可读存储介质 |
-
2021
- 2021-03-19 CN CN202110297292.XA patent/CN115114258A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117555884A (zh) * | 2024-01-12 | 2024-02-13 | 腾讯科技(深圳)有限公司 | 数据页的读取方法、装置、设备及可读存储介质 |
CN117555884B (zh) * | 2024-01-12 | 2024-04-26 | 腾讯科技(深圳)有限公司 | 数据页的读取方法、装置、设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7113040B2 (ja) | 分散型データストアのバージョン化された階層型データ構造 | |
JP3270216B2 (ja) | ファイル名検出方式 | |
Moss | Nested transactions: An approach to reliable distributed computing | |
CN107122355B (zh) | 数据迁移系统和方法 | |
US11977532B2 (en) | Log record identification using aggregated log indexes | |
US9400733B2 (en) | Pattern matching framework for log analysis | |
US11531594B2 (en) | Data recovery method and apparatus, server, and computer-readable storage medium | |
CN111078667B (zh) | 一种数据迁移的方法以及相关装置 | |
CN110162512B (zh) | 一种日志检索方法、装置及存储介质 | |
CN111259004B (zh) | 一种存储引擎中数据索引的方法以及相关装置 | |
US20230394027A1 (en) | Transaction execution method, computing device, and storage medium | |
WO2022242372A1 (zh) | 对象处理方法、装置、计算机设备和存储介质 | |
CN115391337A (zh) | 数据库分区的方法、装置、存储介质及电子设备 | |
CN111753141B (zh) | 一种数据管理方法及相关设备 | |
US20070174329A1 (en) | Presenting a reason why a secondary data structure associated with a database needs rebuilding | |
CN115114258A (zh) | 数据复制方法、装置、电子设备及计算机存储介质 | |
CN113468143A (zh) | 数据迁移方法、系统、计算设备及存储介质 | |
CN108256019A (zh) | 数据库主键生成方法、装置、设备及其存储介质 | |
CN107402841A (zh) | 大规模分布式文件系统数据修复方法及设备 | |
CN113806309B (zh) | 基于分布式锁的元数据删除方法、系统、终端及存储介质 | |
CN111770158B (zh) | 云平台恢复方法、装置、电子设备及计算机可读存储介质 | |
CN114385657A (zh) | 数据存储方法、装置及存储介质 | |
CN109582330B (zh) | 数据模型升级方法、装置、设备及可读存储介质 | |
US10824671B2 (en) | Organizing multiple versions of content | |
CN116719482B (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 | ||
TA01 | Transfer of patent application right | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20230920 Address after: 309 West, floor 3, No. 49, Zhichun Road, Haidian District, Beijing 100080 Applicant after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd. Address before: 518000 Tencent Building, No. 1 High-tech Zone, Nanshan District, Shenzhen City, Guangdong Province, 35 Floors Applicant before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd. |