CN112395284A - 数据处理方法、装置、数据库系统、电子设备及存储介质 - Google Patents
数据处理方法、装置、数据库系统、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112395284A CN112395284A CN201910754776.5A CN201910754776A CN112395284A CN 112395284 A CN112395284 A CN 112395284A CN 201910754776 A CN201910754776 A CN 201910754776A CN 112395284 A CN112395284 A CN 112395284A
- Authority
- CN
- China
- Prior art keywords
- sql statement
- statement
- task
- record
- generating
- 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/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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种数据处理方法、装置、数据库系统、电子设备及存储介质。数据处理方法包括:接收用于指示针对数据库的数据处理请求,生成对应的分布式事务,其中,所述分布式事务包括指示针对数据表的第一预提交任务,和,指示针对与所述数据表对应的外置索引表的第二预提交任务;接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息;若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。该数据处理方法可以保证数据表和外置索引表的数据一致性。
Description
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种数据处理方法、装置、数据库系统、电子设备及存储介质。
背景技术
随着技术的发展,数据库被广泛用于数据记录的存储、查询和分析。在使用数据库进行数据存储的过程中,随着数据量的增多,单个运行数据库的设备的数据处理能力成为瓶颈。为了解决这一问题,采用分库分表策略(如sharding算法),即将数据库和/或数据表进行拆分,形成多个分片,不同的分片可以是一个单独的实例,配置在不同的设备上。
现有采用上述分库分表策略的数据库在运行过程中,需要使用全局二级索引表。全局二级索引表是一种辅助索引,其可以是非聚簇索引,是用户可以根据具体需求创建的索引表。
现有的未进行分库分表的数据库(例如,MySQL数据库)在进行了数据处理(例如插入数据、删除数据或更新数据)如更新数据后,更新全局二级索引表的方法是,存储引擎在更新数据库中用于存储数据的主表中的记录的同时,把相同数据也更新到全局二级索引表中。但是在分布式MySQL sharding中间件更新全局二级索引表的场景下,这种全局二级索引表的更新方法存在以下问题:
首先,由于存储引擎的数据不对外暴露,导致分布式MySQL sharding中间件无法获取到存储引擎写入主表的数据,也就无法将这些数据更新到全局二级索引表中。
其次,由于只能写入一种数据源,导致全局二级索引表只能使用与主表相同的存储格式。
发明内容
有鉴于此,本发明实施例提供一种数据处理方案,以解决上述部分或全部问题。
根据本发明实施例的第一方面,提供了一种数据处理方法,其包括:接收针对数据库的数据处理请求,生成对应的分布式事务,其中,所述分布式事务包括指示针对数据表的第一预提交任务,和,指示针对与所述数据表对应的外置索引表的第二预提交任务;接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息;若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。
根据本发明实施例的第二方面,提供了一种数据处理装置,其包括:事务生成模块,用于接收用于指示针对数据库的数据处理请求,生成对应的分布式事务,其中,所述分布式事务包括指示针对数据表的第一预提交任务,和,指示针对与所述数据表对应的外置索引表的第二预提交任务;信息接收模块,用于接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息;提交模块,用于若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。
根据本发明实施例的第三方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如第一方面所述的数据处理方法对应的操作。
根据本发明实施例的第四方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的数据处理方法。
根据本发明实施例提供的数据处理方案,根据接收的数据处理请求生成对应的分布式事务,以指示数据库对数据表和外置索引表进行处理,并根据第一执行状态信息和第二执行状态信息确定数据表和外置状态表是否可以执行成功,在第一执行状态信息和第二执行状态信息均指示执行成功时,才提交分布式事务对数据表和外置索引表执行数据处理,确保了在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为根据本发明实施例一的一种数据处理方法的步骤流程图;
图2为根据本发明实施例二的一种数据处理方法的步骤流程图;
图3为根据本发明实施例三的一种数据处理方法的步骤流程图;
图4为根据本发明实施例四的一种数据处理方法的步骤流程图;
图5为根据本发明实施例五的一种数据处理方法的步骤流程图;
图6为根据本发明实施例六的一种数据处理装置的结构框图;
图7为根据本发明实施例七的一种数据处理装置的结构框图;
图8a为根据本发明实施例八的一种数据库系统的结构示意图;
图8b为根据本发明实施例八的一种数据库系统执行数据处理方法的示意图;
图8c为根据本发明实施例八的一种数据库系统执行数据处理方法的流程示意图;
图9为根据本发明实施例九的一种电子设备的结构示意图。
具体实施方式
为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。
下面结合本发明实施例附图进一步说明本发明实施例具体实现。
实施例一
参照图1,示出了根据本发明实施例一的一种数据处理方法的步骤流程图。
本实施例的数据处理方法包括以下步骤:
步骤S102:接收用于指示针对数据库的数据处理请求,生成对应的分布式事务。
在本实施例中,以分布式数据库系统中的代理层(如DRDS proxy,DistributedRelational Database Services proxy)作为执行主体,对本发明实施例提供的数据处理方法进行说明。其中,分布式数据库系统可以是基于MySQL sharding的场景,也可以为其他类型场景。
在本实施例的分布式数据库中设置有独立的代理层(如DRDS proxy),代理层是在客户端和数据库之间加入的一个服务进程,主要为用户提供分布式数据库的路由能力,客户端的一个SQL语句会根据DRDS proxy的sharding算法路由到一个或多个分库(如MySQL实例)上,通过DRDS proxy用户可以很方便地管理和操作多个MySQL实例。
代理层接收的数据处理请求可以是指示向数据表中插入记录的请求、或者指示更新数据表中记录的请求、或者指示删除数据表中记录的请求等。
在代理层接收到指示更新数据表中记录的数据处理请求时,对于数据表和外置索引表的分表方式不同的分布式数据库系统,数据处理请求会涉及对多个分库中的记录进行数据处理,为了避免一部分分库的记录可以成功被更新而另一部分记录不能成功被更新的情况出现而导致外置索引表与数据表中的数据不一致,代理层根据数据处理请求生成对应的分布式事务。
所述分布式事务包括第一预提交任务和第二预提交任务。第一预提交任务用于指示对所述数据表进行处理,第二预提交任务用于指示对所述数据表对应的外置索引表进行处理。该分布式事务只有在其包括的所有预提交任务都被成功执行时才能成功执行,由此保证了外置索引表和数据表的数据一致性。所述处理与前述数据处理请求所请求的处理相对应,如,插入记录的请求、更新记录的请求、删除记录的请求等。
需要说明的是,根据数据处理请求中内容的不同,第一预提交任务和第二预提交任务中均可以包括一个或一个以上的分支任务,每个分支任务可以对应一个MySQL实例。不同的分支任务可以对应相同或不同的MySQL实例。
步骤S104:接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息。
第一执行状态信息用于指示第一预提交任务涉及的各MySQL实例是否成功执行第一预提交任务。例如,第一预提交任务指示向某MySQL实例的数据表中插入记录A,则第一执行状态信息用于指示该记录A是否成功插入数据表中。
同样地,第二执行状态信息用于指示第二预提交任务涉及的各MySQL实例是否成功执行第二预提交任务。例如,第二预提交任务指示向某MySQL实例中的外置索引表中插入记录A,则第二执行状态信息用于指示该记录A是否成功插入外置索引表中。
在实际应用中,第一执行状态信息和第二执行状态信息可以采用任意适当的形式表示,如,1表示执行成功,0表示执行失败;或者,True表示执行成功,False表示执行失败,等等。本发明实施例不对第一执行状态信息和第二执行状态信息的具体形式进行限制。
在获取到第一执行状态信息和第二执行状态信息后,可以根据第一执行状态信息和第二执行状态信息确定是否提交分布式事务。例如,若第一执行状态信息和第二执行状态信息均指示任务执行成功,表示对数据表和外置索引表的数据处理均成功,能够保证两个表的数据一致性,则可以执行步骤S106。反之,若第一执行状态信息和第二执行状态信息中的至少一个指示任务执行失败,表示对数据表和外置索引表中的至少一个的数据处理失败,两者的数据一致性不能保证,则可以指示不提交分布式事务。当然,在至少一个任务执行失败时执行时,本领域技术人员可以根据需要配置执行任何适当的操作,本实施例对此不作限定。
步骤S106:若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。
若第一执行状态信息和第二执行状态信息均指示任务执行成功,则表示分布式事务可以被完整地成功执行,代理层可以指示提交分布式事务,以使该分布式事务涉及的各MySQL实例正式执行任务提交,完成对所述数据表和所述外置索引表的数据处理。
由于只有在第一执行状态信息和第二执行状态信息均指示任务执行成功时才会提交分布式事务,也就是说,只有在数据表和外置索引表均可以成功进行数据处理的情况下才会提交分布式事务,保证了数据表与外置索引表之间的数据一致性,且由于数据表和外置索引表是同时进行数据处理的,因此在保证数据表和外置索引表数据处理的原子性的同时,还可以保证数据表与外置索引表的强一致性。
其中,强一致性与现有技术中最终一致性相对,强一致性是指在任意时刻数据表和外置索引表都处于完全一致状态。相较于最终一致性在达到最终一致之前会存在不一致的中间状态,强一致性可以保证用户任意时刻使用数据库均可以获得准确的数据。
通过本实施例,根据接收的数据处理请求生成对应的分布式事务,以指示数据库对数据表和外置索引表进行处理,并根据第一执行状态信息和第二执行状态信息确定数据表和外置状态表是否可以执行成功,在第一执行状态信息和第二执行状态信息均指示执行成功时,才提交分布式事务对数据表和外置索引表执行数据处理,确保了在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题。
本实施例的数据处理方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例二
参照图2,示出了根据本发明实施例二的一种数据处理方法的步骤流程图。
本实施例的数据处理方法包括前述的步骤S102~步骤S106。
其中,所述方法在根据第一执行状态信息和第二执行状态信息确定是否提交分布式事务时,若第一执行状态信息和第二执行状态信息均指示任务执行成功,则执行步骤S106;反之,若第一执行状态信息和第二执行状态信息中至少一个指示任务执行失败,则执行下述的步骤S108。
步骤S108:若所述第一执行状态信息和所述第二执行状态信息中至少一个指示任务执行失败,则生成回滚消息,以通过所述回滚消息指示对所述第一预提交任务和/或所述第二预提交任务进行回滚操作。
当第一执行状态信息和第二执行状态信息中指示一个指示任务执行失败时,例如,第一执行状态信息指示任务执行成功,第二执行状态信息指示任务执行失败时,表示对数据表的数据处理成功,对外置索引表的数据处理失败。此时数据表与对应的外置索引表的数据不一致,分布式事务不能提交,可以生成回滚消息,将回滚消息发送给涉及的各MySQL实例,使其对第一预提交任务和/或第二预提交任务进行回滚操作,从而使回滚操作后的数据表和外置索引表的数据一致。
需要说明的是,在本实施例中,外置索引表可以是外置全局二级索引表,在其他实施例中,该外置索引表也可以是其他任何适当的外置索引表。分布式数据库中的外置全局二级索引表可以拆分到多个MySQL实例上,且其采用的分片方式可以与数据表的分片方式不相同。
同样地,数据表可以是数据库中的主表,也可以是其他任何适当的数据表。
在某些情况下,数据表使用的存储结构(例如行存数据源或列存数据源)和外置索引表使用的存储结构可能不同。此种情况下,代理层可以生成与存储结构相适应的预提交任务。
例如,数据表为行存MySQL数据源,外置索引表为列存postgreSQL数据源,代理层在执行某个数据处理请求时,根据该数据处理请求生成MySQL数据源能够识别的第一预提交任务,并生成postgreSQL数据源能够识别的第二预提交任务,从而适应不同的存储结构。由此,使得对数据处理请求的处理更具有灵活性和兼容性。
通过本实施例,在确保了在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题的基础上,由于代理层可以根据数据表使用的存储结构生成与之适应的第一预提交任务,根据外置索引表使用的存储结构生成与之适应的第二预提交任务,从而适应外置索引表与数据表使用不同的存储结构的情况,提高了对数据处理请求的处理的灵活性和兼容性。
而且,在第一预提交任务和第二预提交任务中的任意一个执行失败时,可以生成回滚消息,指示涉及的MySQL实例执行回滚操作,确保了外置索引表和数据表的数据强一致性,不存在数据不一致的中间状态。
本实施例的数据处理方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例三
参照图3,示出了根据本发明实施例三的一种数据处理方法的步骤流程图。
本实施例的数据处理方法包括前述的步骤S102~步骤S106。根据需要其可以包括或不包括步骤S108。
在本实施例中,所述步骤S102包括以下子步骤:
子步骤S1021:获取所述数据处理请求中的SQL语句。
第一种情况中,数据处理请求中不包含动态函数,所述步骤S1021包括:直接将数据处理请求中的原始SQL语句作为获取的SQL语句。
第二种情况中,数据处理请求包含动态函数,所述子步骤S1021包括:从所述数据处理请求中获取原始SQL语句,并将所述原始SQL语句中的动态函数替换为常量;根据替换结果生成替换后的SQL语句。
例如,原始SQL语句中包括NOW()函数,该函数是指示获取当前系统时间的动态函数,如果不提前计算NOW()函数的值,而是分别在数据表和外置索引表上独立计算,可能因为计算时的系统时间不一样,导致数据表和外置索引表中对应的记录内容不一致,而导致两者数据不一致。为了防止这种情况的出现,在包含动态函数时,先确定动态函数的值(该值为不会变化的常量),将原始SQL语句中的动态函数替换为该值,生成替换后的SQL语句。该替换后的SQL语句即为从数据处理请求中获取的SQL语句。
可选地,为了进一步提升可靠性,确保数据表和外置索引表的数据一致性,可以对数据处理请求所涉及的数据表的主键是否为自增主键进行判断,以根据判断结果进行适当的操作。
例如,在第二种情况中,根据所述原始SQL语句确定待处理的所述数据表,并确定所述数据表的主键是否为自增主键,且原始SQL语句中是否存在包含插入操作的语句;若是自增主键且存在包含插入操作的语句,则生成全局唯一的自增值,并根据所述自增值和所述替换结果生成替换后的SQL语句。
自增主键是一种主键值自动增加的主键。对于数据表的主键是自增主键且存在包含插入操作的语句的情况,在代理层(即DRDS proxy)中生成自增主键的值,保证该自增主键的值是全局唯一的自增值,从而防止在后续步骤中数据表和外置索引表独立生成的自增主键的值可能不一致的情况,确保数据一致性。
在根据替换结果和自增值生成替换后的SQL语句时,可以将生成的自增值加入替换了常量的SQL语句中,以形成替换后的SQL语句。
例如,替换了常量的SQL语句为:insert into t_primary(name,date)values('a','20190803')。
其中,t_primary表示数据表的表名,name和date表示数据表中的字段名,a表示name字段的值,20190803表示date字段值,而数据表t_primary的主键的字段名为“id”,代理层生成的自增值为“1”,则替换后的SQL语句为:insert into t_primary(id,name,date)values(1,'a','20190803')。
子步骤S1022:判断所述SQL语句是否为包含插入操作的SQL语句。
SQL语句包括但不限于插入语句(insert)、更新语句(update)、替换语句(replace)和删除语句(delete)等。其中,插入语句和替换语句均是包含插入操作的SQL语句。
本领域技术人员可以根据需要采用任何适当的方式确定SQL语句是否为包含插入操作的SQL语句,本实施例对此不作限定。例如,可以根据所有包含插入操作的SQL语句创建一个表,通过确定某个SQL语句是否在表中确定其是否为包含插入操作的SQL语句。
子步骤S1023:根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务。
第一种情况中,若判断结果指示SQL语句为包含插入操作的SQL语句,则表示SQL语句可能是插入语句、替换语句等,对于这些语句在执行过程中需要在数据表和外置索引表中插入新的记录,因此需要先确定数据表和/或外置索引表中是否存在冲突记录,以防止在插入新的记录时由于冲突记录的存在而导致部分或全部插入失败从而影响数据表和外置索引表之间的数据一致性。
基于此,第一种情况中,根据判断结果确定根据所述SQL语句生成第一查询语句,第一查询语句用于指示查询与SQL语句指示的待处理记录冲突的记录。在确定查询语句后,本领域技术人员可以根据需要,采用任何适当的方式生成对应的分布式事务。
第二种情况中,若判断结果指示SQL语句不为包含插入操作的SQL语句,则表示SQL语句可能是更新语句、删除语句等,这些语句操作的对象是数据表和/或外置索引表中已经存在的记录,且这些语句通常都包含条件子句(where子句)。
基于此,第二种情况中,根据判断结果确定根据所述SQL语句生成第二查询语句,第二查询语句用于指示获取数据表中符合SQL语句中的条件子句的记录。在确定查询语句后,本领域技术人员可以根据需要,采用任何适当的方式生成对应的分布式事务。
通过本实施例,确保了在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题。
此外,先对从数据处理请求中获取的原始SQL语句进行动态函数替换、自增主键的自增值生成等处理防止了由于自增值不一致或动态函数计算结果不一致等问题导致后续处理中造成数据表和外置索引表的数据不一致,确保了可靠性。在生成分布式事务之前,对SQL语句是否包含插入操作进行判断,根据判断结果生成对应的查询语句,再根据生成的查询语句和SQL语句生成分布式事务,提升了方案的适应性。
本实施例的数据处理方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例四
参照图4,示出了根据本发明实施例四的一种数据处理方法的步骤流程图。
本实施例的数据处理方法包括前述的步骤S102~步骤S106。根据需要其可以包括或不包括步骤S108。其中,所述步骤S102可以采用实施例一或三的实现方式实现,或者采用其他任何适当的实现方式实现。
在本实施例中,在所述步骤S102采用实施例三中的实现方式实现时,所述子步骤S1023,即根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务的第一种实现方式如下。
所述子步骤S1023包括:若所述判断结果指示为包含插入操作的SQL语句,则确定根据所述SQL语句生成第一查询语句,其中,所述第一查询语句用于指示查询与所述SQL语句指示的待处理记录冲突的记录;根据所述第一查询语句获得第一查询结果;根据所述第一查询结果和所述SQL语句,生成所述分布式事务。
如实施例三中所述,在判断结果指示SQL语句包括插入操作时,为了防止数据表和/或外置索引表中已有记录与新的记录冲突而影响插入操作的执行造成数据表和外置索引表的数据不一致,确定根据SQL语句生成用于指示查询冲突记录中的第一查询语句。
在生成第一查询语句时,若SQL语句涉及的表中具有全局唯一索引,则生成的第一查询语句用于查询数据表和外置索引表,此时,第一查询语句包括分支查询语句A和分支查询语句B。分支查询语句A可以根据SQL语句中涉及的数据表的表名、数据表的主键和其他唯一键生成,用于查询数据表中冲突记录。分支查询语句B可以根据SQL语句中涉及的外置索引表的表名和全局唯一索引键生成,用于查询外置索引表中的冲突记录。
若不存在全局唯一索引,则生成的第一查询语句仅用于查询数据表,其可以根据SQL语句中涉及的数据表的表名、数据表的主键和其他唯一键生成,用于查询数据表中冲突记录,冲突记录例如数据表中已经存在的某个或某些个记录的主键值与SQL语句指示的待处理记录的主键值相同,由于主键具有唯一性,因此这些记录为冲突记录。
通过将第一查询语句发送给涉及的各MySQL实例,由其进行执行,可以获得各MySQL实例返回的查询结果,其总和即为第一查询结果。
根据所述第一查询结果和所述SQL语句,就可以生成所述分布式事务。对于本领域技术人员而言,其可以采用任何适当的方式生成分布式事务,本实施例对此不作限定。
下面例举几种根据所述第一查询结果和所述SQL语句,生成所述分布式事务的情况。
其中,第一查询结果可以进包括表冲突记录(记作查询结果A),其可以是根据数据表的主键或者主键和其他唯一键进行查询获得的冲突记录。第一查询结果也可以包括表冲突记录(记作查询结果A)和索引冲突记录(记作查询结果B)。索引冲突记录可以是根据全局唯一索引键对外置索引表进行查询获得的冲突记录。
情况一,SQL语句为基本插入语句,如,SQL语句为insert intot_primary(id,name,date)values(1,'a','20190803')。若第一查询结果指示数据表和外置索引表均无冲突记录,则直接根据该SQL语句,生成分布式事务。该分布式事务中的第一预提交任务指示将该SQL语句指示的待处理记录插入到数据表中;该分布式事务的第二预提交任务指示将该SQL语句指示的待处理记录插入到外置索引表中。
若第一查询结果指示数据表和/或外置索引表中存在冲突记录,则本领域技术人员可以根据需要配置适当的操作,如仍然根据SQL语句生成分布式事务或者执行其他操作,本实施例对此不作限定。
情况二:SQL语句为插入语句,且包括指示放弃冲突记录的第一子句(如ignore子句)。此时,根据所述第一查询结果和所述SQL语句,生成所述分布式事务包括:若确定所述SQL语句为包括指示放弃冲突记录的第一子句的插入语句,则根据所述SQL语句指示的所述待处理记录和所述第一查询结果,确定所述待处理记录中与第一查询结果不匹配的第一记录;生成指示向所述数据表中插入所述第一记录的所述第一预提交任务,和,指示向所述外置索引表中插入所述第一记录的所述第二预提交任务;根据所述第一预提交任务和所述第二预提交任务生成所述分布式事务。
其中,第一记录为SQL语句指示的待处理记录与第一查询结果的差集。换而言之为既不与数据表中的记录冲突,又不与外置索引表中的记录冲突的记录。
情况三:SQL语句为插入语句,且包括指示更新记录的第二子句(如on duplicatekey update子句)。此时,所述根据所述第一查询结果和所述SQL语句,生成所述分布式事务包括:若确定所述SQL语句为包括指示更新记录的第二子句的插入语句时,则获取所述SQL语句指示的所述待处理记录中与所述第一查询结果不匹配的第一记录和与所述第一查询结果匹配的第二记录;生成指示向所述数据表中插入所述第一记录,且使用所述第二记录更新所述数据表中的所述第一查询结果的所述第一预提交任务;以及,生成指示向所述外置索引表中插入所述第一记录,且使用所述第二记录更新所述外置索引表中所述第一查询结果的所述第二预提交任务;根据生成的所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
由于第二子句指示将待处理记录中未冲突记录插入,并使用待处理记录更新冲突记录,因此,在生成分布式事务时,需要先确定待处理记录中与第一查询结果不匹配的第一记录,即未冲突记录;并确定与第一查询结果匹配的记录,即冲突记录。
其中,若第一查询结果中既包括表冲突记录(即查询结果A)又包括索引表冲突记录(即查询结果B),则第一记录中的记录可以分为集合X和集合Y两个集合,集合X中的记录为不与查询结果A匹配的记录,集合Y为不与查询结果B匹的记录;同理,第二记录可以分为集合M和集合N,集合M中的记录为与查询结果A匹配的记录,集合N中的记录为与查询结果B匹配的记录。
确定第一记录和第二记录之后,在根据所述第一记录、所述第二记录和所述SQL语句,生成所述第一预提交任务时,生成指示向数据表中插入集合X中记录、且使用集合Y中的记录更新数据表中的查询结果A的第一预提交任务。在根据所述第一记录、所述第二记录和所述SQL语句,生成第二预提交任务时,生成指示向外置索引表中插入集合M中记录、且使用集合N中的记录更新外置索引表中的查询结果B的第二预提交任务。
情况四:SQL语句为替换语句(如replace语句)。此时,根据所述第一查询结果和所述SQL语句,生成所述分布式事务包括:若确定所述SQL语句为用于指示进行记录替换的替换语句,则根据所述第一查询结果、所述SQL语句及所述SQL语句指示的待处理记录,生成所述第一预提交任务和所述第二预提交任务,并根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
其中,由于替换语句的执行需要先执行删除操作,再执行插入操作,因此所述第一预提交任务指示删除所述数据表中所述第一查询结果,并向所述数据表中插入所述待处理记录;所述第二预提交任务指示删除所述外置索引表中所述第一查询结果,并向所述外置索引表中插入所述待处理记录。
具体例如,若第一查询结果包括表冲突记录(即查询结果A)和索引冲突记录(即查询结果B),则生成的第一预提交任务用于指示删除数据表中查询结果A,并将待处理记录插入数据表中。生成的第二预提交任务用于指示删除外置索引表中查询结果B,并将待处理记录插入外置数据表中。
通过本实施例,确保了在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题。
此外,在生成分布式事务时,针对不同的SQL语句生成指示执行不同动作的第一预提交任务和第二预提交任务,进一步提升了方案适用性。
本实施例的数据处理方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例五
参照图5,示出了根据本发明实施例五的一种数据处理方法的步骤流程图。
本实施例的数据处理方法包括前述的步骤S102~步骤S106。根据需要其可以包括或不包括步骤S108。其中,所述步骤S102可以采用实施例一或三的实现方式实现,或者采用其他任何适当的实现方式实现。
在本实施例中,在所述步骤S102采用实施例三中的实现方式实现时,所述子步骤S1023即根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务的第二种实现方式如下:
本实施例中,子步骤S1023包括:若所述判断结果指示所述SQL语句不包含插入操作,则根据所述SQL语句生成第二查询语句,其中,所述第二查询语句用于指示获取所述数据表中符合所述SQL语句中的条件子句的记录;根据所述第二查询语句获得第二查询结果;根据所述第二查询结果和所述SQL语句,生成所述分布式事务。
如实施例三中所述,在判断结果指示SQL语句包含插入操作时,其通常为更新语句或删除语句等,由于这些语句的操作对象是数据表和外置索引表中已有记录,因此第二查询语句可以根据SQL语句中的条件子句(例如为where子句)生成,用于获得满足条件子句的记录。如,第二查询语句为包含条件子句的select语句,select语句的条件子句与SQL语句中的条件子句相同,以从数据表中查找出符合条件子句的记录。例如,SQL语句为:UPDATEtbSET name='a'WHERE name='b';其中,tb为数据表名,name为字段名。根据该SQL语句的条件子句生成的第二查询语句为:SELECT id,name FROM tbWHERE name='b',其中,id和name为数据表的字段名,tb为数据表名。
下面例举几种根据第二查询结果和SQL语句,生成所述分布式事务的情况。
情况五,SQL语句为更新语句。此时,所述根据所述第二查询结果和所述SQL语句,生成所述分布式事务包括:当所述SQL语句为更新语句时,根据所述SQL语句生成第一预提交任务和所述第二预提交任务;根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
其中,所述第一预提交任务指示根据所述SQL语句更新所述数据表中第二查询结果;所述第二预提交任务指示根据所述SQL语句更新所述外置索引表中与第二查询结果对应的记录。这样可以保证数据表与外置索引表的记录同步被更新,以确保两者的数据一致性。
例如,SQL语句为:UPDATE tb SET name='a'WHERE name='b'。其中,tb为数据表名,name为字段名。
其对应的第二查询语句为:SELECT id,name FROM tb WHERE name='b'。其中,tb为数据表名,id和name为字段名。设该第二查询语句的第二查询结果为:id值为1和2。
此时,根据第二查询结果和SQL语句生成的第一预提交任务使用的MySQL数据源可以识别的语法可以表示为:UPDATE tb SET tb.name='a'WHERE id IN(1,2),用于指示更新数据表中第二查询结果。
若外置索引表使用的数据源与数据表使用数据源相同,则第二预提交任务中只需把数据表名tb修改为外置索引表的表名即可。若外置索引表使用的数据源与数据表使用的数据源不同,则可以生成外置索引表的数据源的语法能够识别的表示方式,以适应数据表和外置索引表采用不同数据源的情况。
情况六,SQL语句为删除语句。此时,所述根据所述第二查询结果和所述SQL语句,生成所述分布式事务,包括:当所述SQL语句为删除语句时,根据所述SQL语句生成第一预提交任务和所述第二预提交任务;根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
其中,所述第一预提交任务指示根据所述SQL语句删除所述数据表中第二查询结果;所述第二预提交任务指示根据所述SQL语句删除所述外置索引表中与第二查询结果对应的记录,以保证数据表和外置索引表的数据一致性。
通过本实施例,数据处理请求确保了在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题。
此外,通过生成查询语句查询数据表的记录,根据查询结果确定需要进行数据处理的记录,并根据查询结果生成同步的针对数据表的第一预提交任务和针对外置索引表的第二预提交任务,解决了不支持分布式数据库系统的外置全局二级索引的问题。
由于是代理层根据数据处理请求生成分布式事务中的第一预提交任务和第二预提交任务,在生成第二预提交任务时将SQL语句转换为目标数据源(即外置索引表)能识别的语句,因此可以解决现有技术中,只能写入一种数据源的问题,避免只能写入行存数据源,不支持列存数据源的问题。本实施例的数据处理方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:服务器、移动终端(如平板电脑、手机等)和PC机等。
实施例六
参照图6,示出了根据本发明实施例六的一种数据处理装置的结构框图。
本实施例的数据处理装置包括:事务生成模块602,用于接收用于指示针对数据库的数据处理请求,生成对应的分布式事务,其中,所述分布式事务包括指示针对数据表的第一预提交任务,和,指示针对与所述数据表对应的外置索引表的第二预提交任务;信息接收模块604,用于接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息;提交模块606,用于若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。
通过本实施例,根据接收的数据处理请求生成对应的分布式事务,以指示数据库对数据表和外置索引表进行处理,并根据第一执行状态信息和第二执行状态信息确定数据表和外置状态表是否可以执行成功,并在第一执行状态信息和第二执行状态信息均指示执行成功时,才提交分布式事务对数据表和外置索引表执行数据处理,确保了在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题。
实施例七
参照图7,示出了根据本发明实施例七的一种数据处理装置的结构框图。
本实施例的数据处理装置包括:事务生成模块702,用于接收用于指示针对数据库的数据处理请求,生成对应的分布式事务,其中,所述分布式事务包括指示针对数据表的第一预提交任务,和,指示针对与所述数据表对应的外置索引表的第二预提交任务;信息接收模块704,用于接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息;提交模块706,用于若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。
可选地,所述装置还包括:回滚模块708,用于若所述第一执行状态信息和所述第二执行状态信息中至少一个指示任务执行失败,则生成回滚消息,以通过所述回滚消息指示对所述第一预提交任务和/或所述第二预提交任务进行回滚操作。
可选地,所述事务生成模块702包括:第一获取模块7021,用于获取所述数据处理请求中的SQL语句;第一确定模块7022,用于判断所述SQL语句是否为包含插入操作的SQL语句;第一生成模块7023,用于根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务。
可选地,所述第一生成模块7023包括:第二确定模块7023a,用于若所述判断结果指示为包含插入操作的SQL语句,则确定根据所述SQL语句生成第一查询语句,其中,所述第一查询语句用于指示查询与所述SQL语句指示的待处理记录冲突的记录;第二获取模块7023b,用于根据所述第一查询语句获得第一查询结果;第二生成模块7023c,用于根据所述第一查询结果和所述SQL语句,生成所述分布式事务。
可选地,所述第二生成模块7023c包括:第三确定模块,用于若确定所述SQL语句为包括指示放弃冲突记录的第一子句的插入语句,则根据所述SQL语句指示的所述待处理记录和所述第一查询结果,确定所述待处理记录中与所述第一查询结果不匹配的第一记录;第三生成模块,用于生成指示向所述数据表中插入所述第一记录的所述第一预提交任务,和,指示向所述外置索引表中插入所述第一记录的所述第二预提交任务;第四生成模块,用于根据所述第一预提交任务和所述第二预提交任务生成所述分布式事务。
可选地,所述第二生成模块7023c包括:第四确定模块,用于若确定所述SQL语句为包括指示更新记录的第二子句的插入语句时,则获取所述SQL语句指示的所述待处理记录中与所述第一查询结果不匹配的第一记录和与所述第一查询结果匹配的第二记录;第五生成模块,用于生成指示向所述数据表中插入所述第一记录,且使用所述第二记录更新所述数据表中的所述第一查询结果的所述第一预提交任务;以及,第六生成模块,用于生成指示向所述外置索引表中插入所述第一记录,且使用所述第二记录更新所述外置索引表中所述第一查询结果的所述第二预提交任务;第七生成模块,用于根据生成的所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
可选地,所述第二生成模块7023c包括:第八生成模块,用于若确定所述SQL语句为用于指示进行记录替换的替换语句,则根据所述第一查询结果、所述SQL语句及所述SQL语句指示的待处理记录,生成所述第一预提交任务和所述第二预提交任务,并根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务;其中,所述第一预提交任务指示删除所述数据表中所述第一查询结果,并向所述数据表中插入所述待处理记录;所述第二预提交任务指示删除所述外置索引表中所述第一查询结果,并向所述外置索引表中插入所述待处理记录。
可选地,所述第一查询结果包括表冲突记录,或者,所述第一查询结果包括表冲突记录和索引冲突记录。
可选地,所述第一生成模块7023包括:第九生成模块7023d,用于若所述判断结果指示所述SQL语句不包含插入操作,则根据所述SQL语句生成第二查询语句,其中,所述第二查询语句用于指示获取所述数据表中符合所述SQL语句中的条件子句的记录;第三获取模块7023e,用于根据所述第二查询语句获得第二查询结果;第十生成模块7023f,用于根据所述第二查询结果和所述SQL语句,生成所述分布式事务。
可选地,所述第十生成模块7023f包括:第十一生成模块,用于当所述SQL语句为更新语句时,根据所述SQL语句生成第一预提交任务和所述第二预提交任务;其中,所述第一预提交任务指示根据所述SQL语句更新所述数据表中第二查询结果;所述第二预提交任务指示根据所述SQL语句更新所述外置索引表中与第二查询结果对应的记录;第十二生成模块,用于根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
可选地,所述第十生成模块7023f包括:第十三生成模块,用于当所述SQL语句为删除语句时,根据所述SQL语句生成第一预提交任务和所述第二预提交任务;其中,所述第一预提交任务指示根据所述SQL语句删除所述数据表中第二查询结果;所述第二预提交任务指示根据所述SQL语句删除所述外置索引表中与第二查询结果对应的记录;第十四生成模块,用于根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
可选地,所述第一获取模块7021包括:替换模块7021a,用于从所述数据处理请求中获取原始SQL语句,并将所述原始SQL语句中的动态函数替换为常量;第十五生成模块7021b,用于根据替换结果生成替换后的SQL语句。
可选地,所述第十五生成模块7021b包括:第五确定模块,用于根据所述原始SQL语句确定待处理的所述数据表,并确定所述数据表的主键是否为自增主键,且原始SQL语句中是否存在包含插入操作的语句;第十六生成模块,用于若是自增主键且存在包含插入操作的语句,则生成全局唯一的自增值,并根据所述自增值和所述替换结果生成替换后的SQL语句。
需要说明的是,前述的第四生成模块、第七生成模块、第八生成模块、第十二生成模块和第十四生成模块可以是同一个模块,也可以是多个不同的模块。
本实施例的数据处理装置用于实现前述多个方法实施例中相应的数据处理方法,并具有相应方法实施例的有益效果,在此不再赘述。
实施例八
参照图8a,示出了根据本发明的实施例八的一种数据库系统的结构示意图。
如图8a所示,数据库系统包括代理层、存储层和至少一个数据库层,所述至少一个数据库层上配置有多个数据库实例,各所述数据库实例均与至少一个所述存储层连接,所述存储层用于存储所述数据库层中的数据;所述代理层用于执行前述的数据处理方法指示的操作,以向至少一个所述数据库层中的至少一个所述数据库实例发送所述分布式事务中的所述第一预提交任务和所述第二预提交任务;接收所述分布式事务的数据库层根据所述第一预提交任务和所述第二预提交任务,指示对应的数据库实例与存储层交互,以执行所述第一预提交任务和所述第二预提交任务;并且,向所述代理层返回对应的所述第一执行状态信息和所述第二执行状态信息。
代理层可以部署在独立的服务器中,也可以部署在某一个或某几个数据库层中。在本实施例中,以代理层部署在独立的服务器中为例,代理层还用于获取针对数据库实例中的数据处理请求,并根据分库分表算法将所述数据处理请求路由到至少一个所述数据库实例上,以管理和操作所述多个数据库实例。
数据库层可以是一个或多个,每个数据库层中可以包括一个或多个数据库实例,只需保证配置有多个数据库实例,从而可以分散数据处理压力即可。各数据库实例均对应连接有存储层,存储层用于存储数据表和外置索引表。
需要说明的是,不同的数据库实例连接的存储层可以在同一存储磁盘上,也可以分布在不同的存储磁盘上。
通过本实施例,可以确保在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中最终一致方案中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题。
下面结合图8b和图8c,对数据处理过程进行说明如下:
代理层从客户端获取数据处理请求,例如为原始SQL语句,并根据数据处理请求开启分布式事务(例如,XA事务)。
根据原始SQL语句,确定待处理的数据表,若需要,则填充待处理的数据表的自增字段。例如,待处理的数据表的主键是自增主键,且原始SQL语句中包含插入操作(如,包含insert语句等)的情况下,填充待处理的数据表的自增主键。若不需要,则可以省略该动作。
若原始SQL语句中存在动态函数,则将原始SQL语句中的动态函数替换为常量,并生成替换后的SQL语句。例如,原始SQL语句中包含now()函数,则将now()替换为对应的当前时间。若不存在,则可以省略该动作。
根据替换后的SQL语句,确定是否包含插入操作。其中,包含插入操作的SQL语句例如为insert语句、replace语句等。
在第一种情况中,若包含插入操作,则按主键和唯一键在数据表中查询冲突记录(也称为匹配记录)。并确认是否有全局唯一索引键,若有则按全局唯一索引键在外置索引表中查询冲突记录(也称为匹配记录)。若无全局唯一索引键,则可以省略该动作。
在第一种情况中,子情况A,查询冲突记录后(可能存在冲突记录,也可能不存在冲突记录),若替换后SQL语句包含replace语句,则指示删除数据表和外置索引表中所有冲突记录,并指示将替换后SQL语句指示的所有记录插入到数据表和外置索引表中。在数据表和外置索引表返回的状态都指示处理成功的情况下,提交分布式事务。
在第一种情况中,子情况B,查询冲突记录后,若替换后SQL语句包含on duplicatekey update,则指示向数据表和外置索引表插入替换后的SQL语句指示的所有记录中与冲突记录不匹配的记录,并更新数据表和外置索引表中所有冲突记录。在数据表和外置索引表返回的状态都指示处理成功的情况下,提交分布式事务。
在第一情况中,子情况C,查询冲突记录后,若替换后SQL语句包含ignore,则指示向数据表和外置索引表插入替换后的SQL语句指示的所有记录中与冲突记录不匹配的记录;若替换后SQL语句不包含ignore,则指示向数据表和外置索引表插入替换后的SQL语句指示的所有记录。在数据表和外置索引表返回的状态都指示处理成功的情况下,提交分布式事务。
在第二种情况中,若未包含插入操作,则按替换后的SQL语句中的条件子句在数据表中查询匹配记录。在查询匹配记录后,若替换后的SQL语句为更新语句,则指示更新数据表和外置索引表中的匹配记录,在数据表和外置索引表返回的状态都指示处理成功的情况下,提交分布式事务;若替换后的SQL语句不为更新语句,则指示删除数据表和外置索引表中的匹配记录,在数据表和外置索引表返回的状态都指示处理成功的情况下,提交分布式事务。
通过上述过程,可以保证对数据表和外置索引表的数据处理一致,从而保证两者数据的一致性。
实施例九
参照图9,示出了根据本发明实施九的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图9所示,该电子设备可以包括:处理器(processor)802、通信接口(Communications Interface)804、存储器(memory)806、以及通信总线808。
其中:
处理器802、通信接口804、以及存储器806通过通信总线808完成相互间的通信。
通信接口804,用于与其它电子设备如终端设备或服务器进行通信。
处理器802,用于执行程序810,具体可以执行上述数据处理方法实施例中的相关步骤。
具体地,程序810可以包括程序代码,该程序代码包括计算机操作指令。
处理器802可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器806,用于存放程序810。存储器806可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序810具体可以用于使得处理器802执行以下操作:接收用于指示针对数据库的数据处理请求,生成对应的分布式事务,其中,所述分布式事务包括指示针对数据表的第一预提交任务,和,指示针对与所述数据表对应的外置索引表的第二预提交任务;接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息;若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。
在一种可行方式中,程序810还用于使得处理器802若所述第一执行状态信息和所述第二执行状态信息中至少一个指示任务执行失败,则生成回滚消息,以通过所述回滚消息指示对所述第一预提交任务和/或所述第二预提交任务进行回滚操作。
在一种可行方式中,程序810还用于使得处理器802在接收用于指示对数据库中的数据表进行处理的数据处理请求,生成对应的分布式事务时,获取所述数据处理请求中的SQL语句;判断所述SQL语句是否为包含插入操作的SQL语句;根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务。
在一种可行方式中,程序810还用于使得处理器802在根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务时,若所述判断结果指示为包含插入操作的SQL语句,则确定根据所述SQL语句生成第一查询语句,其中,所述第一查询语句用于指示查询与所述SQL语句指示的待处理记录冲突的记录;根据所述第一查询语句获得第一查询结果;根据所述第一查询结果和所述SQL语句,生成所述分布式事务。
在一种可行方式中,程序810还用于使得处理器802在根据所述第一查询结果和所述SQL语句,生成所述分布式事务时,若确定所述SQL语句为包括指示放弃冲突记录的第一子句的插入语句,则根据所述SQL语句指示的所述待处理记录和所述第一查询结果,确定所述待处理记录中与所述第一查询结果不匹配的第一记录;生成指示向所述数据表中插入所述第一记录的所述第一预提交任务,和,指示向所述外置索引表中插入所述第一记录的所述第二预提交任务;根据所述第一预提交任务和所述第二预提交任务生成所述分布式事务。
在一种可行方式中,程序810还用于使得处理器802在根据所述第一查询结果和所述SQL语句,生成所述分布式事务时,若确定所述SQL语句为包括指示更新记录的第二子句的插入语句时,则获取所述SQL语句指示的所述待处理记录中与所述第一查询结果不匹配的第一记录和与所述第一查询结果匹配的第二记录;生成指示向所述数据表中插入所述第一记录,且使用所述第二记录更新所述数据表中的所述第一查询结果的所述第一预提交任务;以及,生成指示向所述外置索引表中插入所述第一记录,且使用所述第二记录更新所述外置索引表中所述第一查询结果的所述第二预提交任务;根据生成的所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
在一种可行方式中,程序810还用于使得处理器802在根据所述第一查询结果和所述SQL语句,生成所述分布式事务时,若确定所述SQL语句为用于指示进行记录替换的替换语句,则根据所述第一查询结果、所述SQL语句及所述SQL语句指示的待处理记录,生成所述第一预提交任务和所述第二预提交任务,并根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务;其中,所述第一预提交任务指示删除所述数据表中所述第一查询结果,并向所述数据表中插入所述待处理记录;所述第二预提交任务指示删除所述外置索引表中所述第一查询结果,并向所述外置索引表中插入所述待处理记录。
在一种可行方式中,所述第一查询结果包括表冲突记录,或者,所述第一查询结果包括表冲突记录和索引冲突记录。
在一种可行方式中,程序810还用于使得处理器802在根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务时,若所述判断结果指示所述SQL语句不包含插入操作,则根据所述SQL语句生成第二查询语句,其中,所述第二查询语句用于指示获取所述数据表中符合所述SQL语句中的条件子句的记录;根据所述第二查询语句获得第二查询结果;根据所述第二查询结果和所述SQL语句,生成所述分布式事务。
在一种可行方式中,程序810还用于使得处理器802在根据所述第二查询结果和所述SQL语句,生成所述分布式事务时,当所述SQL语句为更新语句时,根据所述SQL语句生成第一预提交任务和所述第二预提交任务;其中,所述第一预提交任务指示根据所述SQL语句更新所述数据表中第二查询结果;所述第二预提交任务指示根据所述SQL语句更新所述外置索引表中与第二查询结果对应的记录;根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
在一种可行方式中,程序810还用于使得处理器802在根据所述第二查询结果和所述SQL语句,生成所述分布式事务时,当所述SQL语句为删除语句时,根据所述SQL语句生成第一预提交任务和所述第二预提交任务;其中,所述第一预提交任务指示根据所述SQL语句删除所述数据表中第二查询结果;所述第二预提交任务指示根据所述SQL语句删除所述外置索引表中与第二查询结果对应的记录;根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
在一种可行方式中,程序810还用于使得处理器802在获取所述数据处理请求中的SQL语句时,从所述数据处理请求中获取原始SQL语句,并将所述原始SQL语句中的动态函数替换为常量;根据替换结果生成替换后的SQL语句。
在一种可行方式中,程序810还用于使得处理器802在根据替换结果生成替换后的SQL语句时,根据所述原始SQL语句确定待处理的所述数据表,并确定所述数据表的主键是否为自增主键,且原始SQL语句中是否存在包含插入操作的语句;若是自增主键且存在包含插入操作的语句,则生成全局唯一的自增值,并根据所述自增值和所述替换结果生成替换后的SQL语句。
程序810中各步骤的具体实现可以参见上述数据处理方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
通过本实施例的电子设备,根据接收的数据处理请求生成对应的分布式事务,以指示数据库对数据表和外置索引表进行处理,并根据第一执行状态信息和第二执行状态信息确定数据表和外置状态表是否可以执行成功,并在第一执行状态信息和第二执行状态信息均指示执行成功时,才提交分布式事务对数据表和外置索引表执行数据处理,确保了在任意时刻数据表和外置索引表中数据均一致,解决了现有技术中外置索引表存在与数据表中数据不一致的状态,导致用户通过外置索引表进行数据检索时会获得错误的检索结果的问题。
需要指出,根据实施的需要,可将本发明实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本发明实施例的目的。
上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的数据处理方法。此外,当通用计算机访问用于实现在此示出的数据处理方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的数据处理方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。
以上实施方式仅用于说明本发明实施例,而并非对本发明实施例的限制,有关技术领域的普通技术人员,在不脱离本发明实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明实施例的范畴,本发明实施例的专利保护范围应由权利要求限定。
Claims (18)
1.一种数据处理方法,其特征在于,包括:
接收针对数据库的数据处理请求,生成对应的分布式事务,其中,所述分布式事务包括指示针对数据表的第一预提交任务,和,指示针对与所述数据表对应的外置索引表的第二预提交任务;
接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息;
若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述第一执行状态信息和所述第二执行状态信息中至少一个指示任务执行失败,则生成回滚消息,以通过所述回滚消息指示对所述第一预提交任务和/或所述第二预提交任务进行回滚操作。
3.根据权利要求1所述的方法,其特征在于,所述接收针对数据库的数据处理请求,生成对应的分布式事务,包括:
获取所述数据处理请求中的SQL语句;
判断所述SQL语句是否为包含插入操作的SQL语句;
根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务。
4.根据权利要求3所述的方法,其特征在于,所述根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务,包括:
若所述判断结果指示为包含插入操作的SQL语句,则确定根据所述SQL语句生成第一查询语句,其中,所述第一查询语句用于指示查询与所述SQL语句指示的待处理记录冲突的记录;
根据所述第一查询语句获得第一查询结果;
根据所述第一查询结果和所述SQL语句,生成所述分布式事务。
5.根据权利要求4所述的方法,其特征在于,所述根据所述第一查询结果和所述SQL语句,生成所述分布式事务,包括:
若确定所述SQL语句为包括指示放弃冲突记录的第一子句的插入语句,则根据所述SQL语句指示的所述待处理记录和所述第一查询结果,确定所述待处理记录中与所述第一查询结果不匹配的第一记录;
生成指示向所述数据表中插入所述第一记录的所述第一预提交任务,和,指示向所述外置索引表中插入所述第一记录的所述第二预提交任务;
根据所述第一预提交任务和所述第二预提交任务生成所述分布式事务。
6.根据权利要求4所述的方法,其特征在于,所述根据所述第一查询结果和所述SQL语句,生成所述分布式事务,包括:
若确定所述SQL语句为包括指示更新记录的第二子句的插入语句时,则获取所述SQL语句指示的所述待处理记录中与所述第一查询结果不匹配的第一记录和与所述第一查询结果匹配的第二记录;
生成指示向所述数据表中插入所述第一记录,且使用所述第二记录更新所述数据表中的所述第一查询结果的所述第一预提交任务;以及,
生成指示向所述外置索引表中插入所述第一记录,且使用所述第二记录更新所述外置索引表中所述第一查询结果的所述第二预提交任务;
根据生成的所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
7.根据权利要求4所述的方法,其特征在于,所述根据所述第一查询结果和所述SQL语句,生成所述分布式事务,包括:
若确定所述SQL语句为用于指示进行记录替换的替换语句,则根据所述第一查询结果、所述SQL语句及所述SQL语句指示的待处理记录,生成所述第一预提交任务和所述第二预提交任务,并根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务;
其中,所述第一预提交任务指示删除所述数据表中所述第一查询结果,并向所述数据表中插入所述待处理记录;所述第二预提交任务指示删除所述外置索引表中所述第一查询结果,并向所述外置索引表中插入所述待处理记录。
8.根据权利要求4-7任一项所述的方法,其特征在于,所述第一查询结果包括表冲突记录,或者,所述第一查询结果包括表冲突记录和索引冲突记录。
9.根据权利要求3所述的方法,其特征在于,所述根据所述判断结果确定查询语句,并根据所述查询语句和所述SQL语句生成对应的所述分布式事务,包括:
若所述判断结果指示所述SQL语句不包含插入操作,则根据所述SQL语句生成第二查询语句,其中,所述第二查询语句用于指示获取所述数据表中符合所述SQL语句中的条件子句的记录;
根据所述第二查询语句获得第二查询结果;
根据所述第二查询结果和所述SQL语句,生成所述分布式事务。
10.根据权利要求9所述的方法,其特征在于,所述根据所述第二查询结果和所述SQL语句,生成所述分布式事务,包括:
当所述SQL语句为更新语句时,根据所述SQL语句生成第一预提交任务和所述第二预提交任务;其中,所述第一预提交任务指示根据所述SQL语句更新所述数据表中第二查询结果;所述第二预提交任务指示根据所述SQL语句更新所述外置索引表中与第二查询结果对应的记录;
根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
11.根据权利要求9所述的方法,其特征在于,所述根据所述第二查询结果和所述SQL语句,生成所述分布式事务,包括:
当所述SQL语句为删除语句时,根据所述SQL语句生成第一预提交任务和所述第二预提交任务;其中,所述第一预提交任务指示根据所述SQL语句删除所述数据表中第二查询结果;所述第二预提交任务指示根据所述SQL语句删除所述外置索引表中与第二查询结果对应的记录;
根据所述第一预提交任务和所述第二预提交任务,生成所述分布式事务。
12.根据权利要求3所述的方法,其特征在于,所述获取所述数据处理请求中的SQL语句,包括:
从所述数据处理请求中获取原始SQL语句,并将所述原始SQL语句中的动态函数替换为常量;
根据替换结果生成替换后的SQL语句。
13.根据权利要求12所述的方法,其特征在于,所述根据替换结果生成替换后的SQL语句,包括:
根据所述原始SQL语句确定待处理的所述数据表,并确定所述数据表的主键是否为自增主键,且原始SQL语句中是否存在包含插入操作的语句;
若是自增主键且存在包含插入操作的语句,则生成全局唯一的自增值,并根据所述自增值和所述替换结果生成替换后的SQL语句。
14.一种数据处理装置,其特征在于,包括:
事务生成模块,用于接收针对数据库的数据处理请求,生成对应的分布式事务,其中,所述分布式事务包括指示针对数据表的第一预提交任务,和,指示针对与所述数据表对应的外置索引表的第二预提交任务;
信息接收模块,用于接收所述数据库返回的所述第一预提交任务的第一执行状态信息、和、所述第二预提交任务的第二执行状态信息;
提交模块,用于若所述第一执行状态信息和所述第二执行状态信息均指示任务执行成功,则提交所述分布式事务以完成所述数据表和所述外置索引表的数据处理。
15.一种数据库系统,其特征在于,包括代理层、存储层和至少一个数据库层,所述至少一个数据库层上配置有多个数据库实例,各所述数据库实例均与至少一个所述存储层连接,所述存储层用于存储所述数据库层中的数据;
所述代理层用于执行权利要求1-13中任一项所述的方法指示的操作,以向至少一个所述数据库层中的至少一个所述数据库实例发送所述分布式事务中的所述第一预提交任务和所述第二预提交任务;
接收所述分布式事务的数据库层根据所述第一预提交任务和所述第二预提交任务,指示对应的数据库实例与存储层交互,以执行所述第一预提交任务和所述第二预提交任务;并且,向所述代理层返回对应的所述第一执行状态信息和所述第二执行状态信息。
16.根据权利要求15所述的数据库系统,其特征在于,所述代理层还用于获取针对数据库实例中的数据处理请求,并根据分库分表算法将所述数据处理请求路由到至少一个所述数据库实例上,以管理和操作所述多个数据库实例。
17.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-13中任一项所述的数据处理方法对应的操作。
18.一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1-13中任一所述的数据处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910754776.5A CN112395284A (zh) | 2019-08-15 | 2019-08-15 | 数据处理方法、装置、数据库系统、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910754776.5A CN112395284A (zh) | 2019-08-15 | 2019-08-15 | 数据处理方法、装置、数据库系统、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112395284A true CN112395284A (zh) | 2021-02-23 |
Family
ID=74601669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910754776.5A Pending CN112395284A (zh) | 2019-08-15 | 2019-08-15 | 数据处理方法、装置、数据库系统、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112395284A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116975032A (zh) * | 2023-07-14 | 2023-10-31 | 南京领行科技股份有限公司 | 数据对齐方法、系统和电子设备及存储介质 |
CN117112585A (zh) * | 2023-08-28 | 2023-11-24 | 平凯星辰(北京)科技有限公司 | 自增id的分配方法、装置、电子设备及可读存储介质 |
CN117453750A (zh) * | 2023-12-21 | 2024-01-26 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
-
2019
- 2019-08-15 CN CN201910754776.5A patent/CN112395284A/zh active Pending
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116975032A (zh) * | 2023-07-14 | 2023-10-31 | 南京领行科技股份有限公司 | 数据对齐方法、系统和电子设备及存储介质 |
CN116975032B (zh) * | 2023-07-14 | 2024-04-12 | 南京领行科技股份有限公司 | 数据对齐方法、系统和电子设备及存储介质 |
CN117112585A (zh) * | 2023-08-28 | 2023-11-24 | 平凯星辰(北京)科技有限公司 | 自增id的分配方法、装置、电子设备及可读存储介质 |
CN117112585B (zh) * | 2023-08-28 | 2024-08-02 | 平凯星辰(北京)科技有限公司 | 自增id的分配方法、装置、电子设备及可读存储介质 |
CN117453750A (zh) * | 2023-12-21 | 2024-01-26 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
CN117453750B (zh) * | 2023-12-21 | 2024-03-15 | 平凯星辰(北京)科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684307B (zh) | 一种数据存储方法、装置、设备及存储介质 | |
US9251163B2 (en) | File sharing system and file sharing method | |
CN109189852B (zh) | 一种数据同步的方法及用于数据同步的装置 | |
US20160085829A1 (en) | Query method for a distributed database system and query apparatus | |
CN109710190B (zh) | 一种数据存储方法、装置、设备及存储介质 | |
CN112395284A (zh) | 数据处理方法、装置、数据库系统、电子设备及存储介质 | |
US20020049764A1 (en) | Distributed synchronization of databases | |
CN111221840B (zh) | 数据处理方法及装置、数据缓存方法、存储介质、系统 | |
US11392567B2 (en) | Just-in-time multi-indexed tables in a shared log | |
CN106874281B (zh) | 实现数据库读写分离的方法和装置 | |
CN112363979A (zh) | 一种基于图数据库的分布式索引方法和系统 | |
EP3376403A1 (en) | Method of accessing distributed database and device providing distributed data service | |
CN113220669B (zh) | 业务数据的处理方法、装置及电子设备 | |
CN113051250A (zh) | 数据库集群的扩容方法和装置、电子设备和存储介质 | |
CN105550342B (zh) | 一种全透明的分布式数据库的数据处理方法 | |
CN111274004A (zh) | 进程实例管理方法、装置及计算机存储介质 | |
US20190228036A1 (en) | Method for retrieving data stored in a database | |
CN114185991A (zh) | 基于分布式数据库实现数据同步的方法及相关装置 | |
CN112948494A (zh) | 数据同步方法、装置、电子设备和计算机可读介质 | |
CN109542872B (zh) | 数据读取方法、装置、计算机设备和存储介质 | |
CN113641686B (zh) | 数据处理方法、装置、电子设备、存储介质及程序产品 | |
US20190065327A1 (en) | Efficient versioned object management | |
US9852385B2 (en) | Processing of business object identifiers in master data integration scenarios involving non-local identifiers | |
CN114584545A (zh) | 数据管理方法、装置、系统、存储介质及电子设备 | |
CN117931095B (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 |