CN116049270A - 访问数据库的方法、装置及存储介质 - Google Patents
访问数据库的方法、装置及存储介质 Download PDFInfo
- Publication number
- CN116049270A CN116049270A CN202211522600.5A CN202211522600A CN116049270A CN 116049270 A CN116049270 A CN 116049270A CN 202211522600 A CN202211522600 A CN 202211522600A CN 116049270 A CN116049270 A CN 116049270A
- Authority
- CN
- China
- Prior art keywords
- database access
- application program
- access operation
- database
- idempotent
- 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
- 238000000034 method Methods 0.000 title claims abstract description 86
- 230000006870 function Effects 0.000 claims description 91
- 238000012545 processing Methods 0.000 claims description 48
- 230000004087 circulation Effects 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 7
- 230000008878 coupling Effects 0.000 claims 1
- 238000010168 coupling process Methods 0.000 claims 1
- 238000005859 coupling reaction Methods 0.000 claims 1
- 125000004122 cyclic group Chemical group 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 6
- 238000012546 transfer Methods 0.000 description 6
- 230000003287 optical effect Effects 0.000 description 4
- 239000011800 void material Substances 0.000 description 3
- 230000003068 static effect Effects 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1438—Restarting or rejuvenating
-
- 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/2455—Query execution
-
- 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/248—Presentation of query results
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种访问数据库的方法、装置及存储介质,属于计算机领域。所述方法包括:获取应用程序中的至少一个目标数据库访问操作,所述至少一个目标数据库访问操作是不破坏所述应用程序幂等性的操作;获取待执行数据库访问操作,所述待执行数据库访问操作是所述应用程序中的数据库访问操作;在所述至少一个目标数据库访问操作包括所述待执行数据库访问操作时,使用所述待执行数据库访问操作访问所述应用程序的数据库,得到所述待执行数据库访问操作的访问结果。本申请能够减小访问数据库的时延。
Description
技术领域
本申请涉及计算机领域,特别涉及一种访问数据库的方法、装置及存储介质。
背景技术
应用程序在运行时会访问数据库,应用程序的幂等性是指多次运行应用程序对数据库所产生的影响和单次运行应用程序对数据库所产生的影响相同。应用程序可能出现异常导致多次运行应用程序。例如应用程序是个转账函数,该转账函数用于从一个用户的账户向另一个用户的账户转账,用户的账户存储在数据库中。假设转账函数执行完转账操作后崩溃,转账函数重新启动后会再次执行该转账操作,如果转账函数具有幂等性,转账函数再次执行该转账操作后两个用户的账户状态不会改变,这样避免了重复转账。
为了使应用程序具有幂等性,应用程序使用数据库访问日志来记录已访问数据库的数据库访问操作,该数据库用于保存属于应用程序的应用数据。数据库访问日志包括已访问数据库的数据库访问操作的访问日志,对于任一个已访问数据库的数据库访问操作的访问日志,该访问日志包括该数据库访问操作的操作标识和使用该数据库访问操作访问数据库的访问结果。这样应用程序在执行某个数据库访问操作时,基于该数据库访问操作的操作标识查询数据库访问日志。如果查询出该数据库访问操作的访问日志,表示应用程序已使用该数据库访问操作访问数据库,获取该访问日志中的访问结果,如此不需要继续访问数据库。如果没有查询出该数据库访问操作的访问日志,表示应用程序未使用该数据库访问操作访问数据库,使用该数据库访问操作访问数据库并得到访问结果,然后再将包括该数据库访问操作的操作标识和该访问结果的访问日志保存在数据库访问日志中。如此对于应用程序中的任一个数据库访问操作,无论应用程序使用该数据库访问操作的次数是多少,应用程序使用该数据库访问操作访问数据库的实际次数只有一次,使得应用程序具有幂等性。
应用程序每次使用数据库访问操作访问数据库时,都需要查询数据库访问日志,查询数据库访问日志需要较长的时间,增加了访问数据库的时延。
发明内容
本申请提供了一种访问数据库的方法、装置及存储介质,减小访问数据库的时延。所述技术方案如下:
第一方面,本申请提供了一种访问数据库的方法,在所述方法中,获取应用程序中的至少一个目标数据库访问操作,该至少一个目标数据库访问操作是不破坏应用程序幂等性的操作。获取待执行数据库访问操作,待执行数据库访问操作是应用程序中的数据库访问操作。在该至少一个目标数据库访问操作包括待执行数据库访问操作时,使用待执行数据库访问操作访问应用程序的数据库,得到待执行数据库访问操作的访问结果。
由于获取到应用程序中的至少一个目标数据库访问操作,该至少一个目标数据库访问操作是不破坏应用程序幂等性的操作,这样对于应用程序中的待执行数据库访问操作,在该至少一个目标数据库访问操作包括待执行数据库访问操作时,使用待执行数据库访问操作访问应用程序的数据库,得到待执行数据库访问操作的访问结果,提高了访问数据库效率,减小访问数据库的时延。
在一种可能的实现方式中,在该至少一个目标数据库访问操作不包括待执行数据库访问操作时,基于数据库访问日志获取待执行数据库访问操作的访问结果,数据库访问日志用于记录应用程序中已访问数据库的数据库访问操作的访问日志。
在该至少一个目标数据库访问操作不包括待执行数据库访问操作时,表示待执行数据库访问操作破坏应用程序的幂等性,基于数据库访问日志获取待执行数据库访问操作的访问结果,保证在不破坏应用程序幂等性的情况下,获取到待执行数据库访问操作的访问结果。
在另一种可能的实现方式中,获取第一操作集合和第二操作集合,第一操作集合包括应用程序中的部分数据库访问操作,第二操作集合包括应用程序中的部分数据库访问操作,第一操作集合和第二操作集合没有交集。在应用程序中,将第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序。在通过幂等性验证器验证待验证应用程序具有幂等性时,将第一操作集合中的数据库访问操作确定为不破坏应用程序幂等性的目标数据库访问操作。这样可以通过幂等性验证器验证应用程序中不破坏应用程序幂等性的各数据库访问操作。
在另一种可能的实现方式中,从应用程序中除已确定的破坏应用程序幂等性的数据库访问操作和已确定的不破坏应用程序幂等性的数据库访问操作之外的数据库访问操作中选择一个数据库访问操作作为待验证数据库访问操作,第一操作集合包括待验证数据库访问操作和已确定的不破坏所述应用程序幂等性的数据库访问操作,第二操作集合包括已确定的破坏应用程序幂等性的数据库访问操作。这样可以对应用程序中的各数据库访问操作进行一一验证,以得出应用程序中不破坏应用程序幂等性的各数据库访问操作。
在另一种可能的实现方式中,将待验证应用程序中的除第一操作集合和第二操作集合以外的数据库访问操作标记为需要记录访问日志的操作。这样标记了应用程序中的各数据库访问操作,保证通过幂等性验证器验证出待验证应用程序的幂等性。
在另一种可能的实现方式中,在通过幂等性验证器验证待验证应用程序不具有幂等性时,将待验证数据库访问操作确定为破坏应用程序幂等性的数据库访问操作,如此通过幂等性验证器能够成功确定出应用程序中的破坏应用程序幂等性的数据库访问操作。
在另一种可能的实现方式中,在应用程序中存在包括写操作的无界循环函数时,将应用程序中的位于无界循环函数之前的数据库访问操作和无界循环函数中的数据库访问操作确定为破坏应用程序幂等性的数据库访问操作。这可以不用对位于无界循环函数之前的数据库访问操作和无界循环函数中的数据库访问操作进行验证,减小运算量。
在另一种可能的实现方式中,从应用程序中的位于无界循环函数之后的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。这样对应用程序中的位于无界循环函数之后的数据库访问操作进行验证,减小运算量。
在另一种可能的实现方式中,在应用程序中没有无界循环函数或者应用程序中的无界循环函数不包括写操作时,从应用程序的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。这样对应用程序的各数据库访问操作进行一一验证,以准确地验证出不破坏应用程序幂等性的各数据库访问操作。
在另一种可能的实现方式中,在应用程序中的无界循环函数不包括写操作时,将应用程序中的无界循环函数替换为指定函数,指定函数具有返回值能力。将应用程序中的无界循环函数替换为指定函数,再使用幂等性验证器来验证应用程序的幂等性,可以提高验证的精度。
在另一种可能的实现方式中,从应用程序中选择至少一个数据库访问操作组成第一操作集合。将应用程序中除该至少一个数据库访问操作以外的数据库访问操作组成第二操作集合。
在另一种可能的实现方式中,在通过幂等性验证器验证待验证应用程序具有幂等性时,将第一操作从第二操作集合移动到第一操作集合中,第一操作是第二操作集合中的数据库访问操作,执行所述在应用程序中,将第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序的操作。这样可以验证出第二操作集合中的不破坏应用程序幂等性的数据库访问操作,以验证出应用程序中的各不破坏应用程序幂等性的数据库访问操作。
在另一种可能的实现方式中,在通过幂等性验证器验证待验证应用程序不具有幂等性时,将第二操作从第一操作集合移动到第二操作集合中,第二操作是第一操作集合中的数据库访问操作,执行所述在应用程序中,将第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序的操作。这样可以将第一操作集合中的破坏应用程序幂等性的数据库访问操作移动到第二操作集合中,以验证出应用程序中的各不破坏应用程序幂等性的数据库访问操作。
第二方面,本申请提供了一种访问数据库的装置,用于执行第一方面或第一方面的任意一种可能的实现方式中的方法。具体地,所述装置包括用于执行第一方面或第一方面的任意一种可能的实现方式中的方法的单元。
第三方面,本申请提供了一种访问数据库的装置,包括至少一个处理器和存储器,所述至少一个处理器用于与存储器耦合,读取并执行所述存储器中的指令,以实现第一方面或第一方面的任意一种可能的实现方式中的方法。
第四方面,本申请提供了一种计算机程序产品,所述计算机程序产品包括在计算机可读存储介质中存储的计算机程序,并且所述计算程序通过处理器进行加载来实现上述第一方面或第一方面任意可能的实现方式的方法。
第五方面,本申请提供了一种计算机可读存储介质,用于存储计算机程序,所述计算机程序通过处理器进行加载来执行上述第一方面或第一方面任意可能的实现方式的方法。
第六方面,本申请提供了一种芯片,包括存储器和处理器,存储器用于存储计算机指令,处理器用于从存储器中调用并运行该计算机指令,以执行上述第一方面或第一方面任意可能的实现方式的方法。
附图说明
图1是本申请实施例提供的一种数据库访问系统的结构示意图;
图2是本申请实施例提供的另一种数据库访问系统的结构示意图;
图3是本申请实施例提供的一种访问数据库的方法流程图;
图4是本申请实施例提供的一种获取目标数据库访问操作的方法流程图;
图5是本申请实施例提供的一种验证待验证应用程序的幂等性的系统示意图;
图6是本申请实施例提供的另一种获取目标数据库访问操作的方法流程图;
图7是本申请实施例提供的另一种验证待验证应用程序的幂等性的系统示意图;
图8是本申请实施例提供的一种访问数据库的装置结构示意图;
图9是本申请实施例提供的一种第一设备的结构示意图。
具体实施方式
下面将结合附图对本申请实施方式作进一步地详细描述。
参见图1,本申请实施例提供了一种数据库访问系统100,包括:应用程序101和数据库102。
应用程序101包括至少一个数据库访问操作,数据库102用于保存应用程序101的应用数据,该应用数据可能是该应用程序获取的数据等。
在运行应用程序101后,应用程序101使用第一数据库访问操作访问数据库102,得到第一数据库访问操作的访问结果,第一数据库访问操作是应用程序101包括的部分或全部数据库访问操作。
该至少一个访问数据库操作包括如下一个或多个操作,读操作、写操作或更新操作等。
所谓读操作是指读取数据库102保存的应用数据,该读操作的访问结果包括读取的应用数据。
所谓写操作是指向数据库102写应用数据,该应用数据可能是应用程序101获取的,该写操作的访问结果可能是第一指示信息,第一指示信息用于指示应用程序101向数据库102成功写入应用数据。
数据库102保存有第一应用数据,应用程序101可能需要将数据库102的第一应用数据更新为第二应用数据。所谓更新操作是指将数据库102保存的第一应用数据更新为第二应用数据,该更新操作的访问结果可能是第二指示信息,第二指示信息用于指示应用程序成功更新数据库102中的应用数据。
在一些实施例中,应用程序101可以是无服务器函数等。应用程序101包括多个代码语句,该多个代码语句中有些代码语句是用于访问数据库102的代码语句,这些代码语句为数据库访问操作。
例如,如下所示的应用程序101,应用程序101的代码语句中包括三个用于访问数据库102的代码语句,该三个代码语句分别为代码语句1、代码语句2和代码语句3。代码语句1为“price=read(“Product”,productId)”,代码语句2为“balance=read(“User”,userId)”,代码语句3为“write(“User”,userId,balance-price)”。该三个代码语句为应用程序101中的三个数据库访问操作。
void purchase(productId,userId)
{
price=read(“Product”,productId);
begin_txn;
balance=read(“User”,userId);
write(“User”,userId,balance-price);
end_txn;
return;
}
在运行应用程序101后,应用程序101使用数据库访问操作访问数据库102。在应用程序101出现异常时,运行的应用程序101可能会崩溃,导致应用程序101重新启动。在应用程序101重新启动后,应用程序101第n次使用第一数据库访问操作访问数据库102,得到第一数据库访问操作的访问结果,n为大于1的整数。
参见图2,数据库访问系统100还包括数据库访问日志103,数据库访问日志103包括应用程序101中的已访问数据库102的数据库访问操作的访问日志。对于已访问数据库102的数据库访问操作,该数据库访问操作的访问日志包括该数据库访问操作的操作标识和使用该数据库访问操作访问数据库102得到的访问结果等。
为了使应用程序101第一次使用第一数据库访问操作访问数据库102所产生的影响和应用程序101第n次使用第一数据库访问操作访问数据库102所产生的影响相同,在使用第一数据库访问操作访问数据库102时,应用程序101可以查询数据库访问日志103,得出是否已使用第一数据库访问操作访问数据库102。如果查询出未使用第一数据库访问操作访问数据库102,表示应用程序101第一次使用第一数据库访问操作访问数据库102,应用程序101使用第一数据库访问操作访问数据库102,得到访问结果。可选地,应用程序101还可能在数据访问日志中保存第一数据库访问操作的访问日志,该访问日志包括第一数据库访问操作的操作标识和使用第一数据库访问操作访问数据库102得到的访问结果。
如果查询出已使用第一数据库访问操作访问数据库102,表示应用程序101第n次使用第一数据库访问操作访问数据库102,数据库访问日志包括第一数据库访问操作的访问日志,该访问日志包括第一数据库访问操作的操作标识和使用第一数据库访问操作访问数据库102得到的访问结果。应用程序101可以获取该访问日志,获取该访问日志包括的访问结果。
在一些实施例中,应用程序101、数据库102和数据库访问日志103可能位于不同的设备或相同的设备上。
例如,应用程序101、数据库102和数据库访问日志103位于第一设备上,第一设备包括数据库102和数据库访问日志103,第一设备运行应用程序101,这样应用程序101可以直接查询数据库访问日志103,基于查询的结果使用第一数据库访问操作访问数据库102。其中,数据库102和数据库访问日志103位于第一设备的磁盘中,应用程序101运行在第一设备的处理器上,应用程序101在使用第一数据库访问操作访问数据库102之前,需要查询位于第一设备的磁盘中的数据库访问日志103,查询数据库访问日志103需要较长的时间,增加了访问数据库102的时延。或者,
第一设备包括应用程序101、第二设备包括数据库102和数据库访问日志103,第一设备运行应用程序101,应用程序101在使用第一数据库访问操作访问数据库102之前,需要查询第二设备上的数据库访问日志103,查询第二设备上的数据库访问日志103需要较长的时间,增加了访问数据库102的时延。或者,
第一设备包括应用程序101、第二设备包括数据库102、第三设备包括数据库访问日志103,第一设备运行应用程序101,应用程序101在使用第一数据库访问操作访问数据库102之前,需要查询第三设备上的数据库访问日志103,基于查询的结果使用第一数据库访问操作访问第二设备上的数据库102。查询第三设备上的数据库访问日志103需要较长的时间,增加了访问数据库102的时延。
在一些实施例中,上述第一设备、第二设备和/或第三设备为无服务器平台中的设备。上述第一设备、第二设备和/或第三设备可能为服务器或终端设备等。
其中,对于应用程序101中包括的任一个数据库访问操作,该数据库访问操作可能不会影响应用程序101的幂等性,应用程序101第一次使用该数据库访问操作访问数据库102所产生的影响和应用程序101第n次使用该数据库访问操作访问数据库102所产生的影响相同。所以应用程序101在每次使用该数据库访问操作访问数据库102时,可以不用查询数据库访问日志103,而是直接使用该数据库访问操作访问数据库102,这样可以减小访问数据库102所需要的时间。其中,访问数据库102的详细实现过程,可以参见如下任意实施例,在此先不详细介绍。
参见图3,本申请实施例提供了一种访问数据库的方法300,所述方法300应用于图1或图2所示的数据库访问系统100。所述方法300执行主体可以为该数据库访问系统100中的应用程序101所在的第一设备,包括步骤301至步骤305的流程。
步骤301:获取应用程序中的至少一个目标数据库访问操作,该至少一个目标数据库访问操作是不破坏应用程序幂等性的操作。
在步骤301中,可以为应用程序中的各数据库访问操作分配操作标识,然后确定应用程序中的各数据库访问操作是否破坏应用程序的幂等性,得出不破坏应用程序幂等性的至少一个目标数据库访问操作,保存每个目标数据库访问操作的操作标识。
其中,应用程序可能包括无界循环函数,也可能不包括无界循环函数。无界循环函数是循环函数,且无法预知循环次数的上界。
例如,如下所示的循环函数,该循环函数的循环次数的上界为10,是可以预知该循环函数的循环次数的上界,所以该循环函数是有界循环函数。
int sum=0;
for(int i=0;i<10;++i)
{
sum+=i;
}
再例如,如下所示的循环函数,a是个变量,该循环函数的循环次数的上界为该变量,是无法预知该循环函数的循环次数的上界,所以该循环函数是无界循环函数。
int sum=0;
for(int i=0;i<a;++i)
{
sum+=i;
}
在步骤301中,确定应用程序中是否包括无界循环函数,如果该应用程序不包括无界循环函数,对于位于该应用程序中的每个数据库访问操作,需要对该每个数据库访问操作分别执行如下3011至3015的流程来确定是否破坏应用程序的幂等性。
如果该应用程序包括无界循环函数,确定该无界循环函数是否包括写操作。如果该无界循环函数包括写操作,则将应用程序中的位于无界循环函数之前的数据库访问操作和无界循环函数中的数据库访问操作确定为破坏应用程序幂等性的数据库访问操作。对于该应用程序中的位于无界循环函数之后的每个数据库访问操作,需要对该每个数据库访问操作分别执行如下3011至3015的流程来确定是否破坏应用程序的幂等性。
如果该无界循环函数不包括写操作,在应用程序中将该无界循环函数替换为指定函数,指定函数具有返回值能力。对于替换后的应用程序中的每个数据库访问操作,需要对该每个数据库访问操作分别执行如下3011至3015的流程来确定是否破坏应用程序的幂等性。
在一些实施例中,指定函数具有返回随机值的能力,或者,指定函数具有返回指定值的能力等。
例如,如下所示的包括写操作的无界循环函数,该无界循环函数包括写操作“write(“table”,i,0)”。
for(int i=0;i<a;++i)
{
write(“table”,i,0);
}
在一些实施例中,上述3011至3015的流程是用于确定一个数据库访问操作是否破坏应用程序幂等性的流程,参见图4,接下来详细说明该3011至3015的流程。
3011:获取待验证数据库访问操作,待验证数据库访问操作是应用程序中的一个数据库访问操作。
在应用程序中没有无界循环函数或者应用程序中的无界循环函数不包括写操作时,从应用程序的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。
在应用程序中包括无界循环函数且该无界循环函数不包括写操作的情况,该应用程序是将该无界循环函数替换为指定函数后的应用程序。
在应用程序中存在包括写操作的无界循环函数时,从应用程序中的位于无界循环函数之后的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。
其中,在应用程序中存在包括写操作的无界循环函数时,由于从应用程序中的位于无界循环函数之后的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作,通过如下3012至3015的操作确定待验证数据库访问操作是否破坏应用程序的幂等性,这样可以减少需要确定的数据库访问操作的个数,减小运算量,节省运算资源。
3012:将应用程序中的第一操作集合中的每个数据库访问操作标记为不需要记录访问日志的操作,以及将应用程序中的第二操作集合中的每个数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序。
第一操作集合包括已确定的不破坏应用程序幂等性的数据库访问操作和待验证数据库访问操作,第二操作集合包括已确定的破坏应用程序幂等性的数据库访问操作。
待验证应用程序还可能包括第三操作集合,第三操作集合包括待验证应用程序中的除第一操作集合和第二操作集合以外的数据库访问操作。在待验证应用程序还包括第三操作集合时,还需要将待验证应用程序中的第三操作集合中的每个数据库访问操作标记为需要记录访问日志的操作。
所谓不需要记录访问日志的数据库访问操作是指应用程序在使用该数据库访问操作访问数据库后不需要向数据库访问日志中保存该数据库访问操作的访问日志。
所谓需要记录访问日志的数据库访问操作是指应用程序在使用该数据库访问操作访问数据库后需要向数据库访问日志中保存该数据库访问操作的访问日志。
如下所示的应用程序,该应用程序包括数据库访问操作1、数据库访问操作2和数据库访问操作3。数据库访问操作1为“price=read(“Product”,productId)”,数据库访问操作2为“balance=read(“User”,userId)”和数据库访问操作3为“write(“User”,userId,balance-price)”。
void purchase(productId,userId)
{
price=read(“Product”,productId);
begin_txn;
balance=read(“User”,userId);
write(“User”,userId,balance-price);
end_txn;
return;
}
将上述应用程序中的上述数据库访问操作1标记为需要记录访问日志的操作11,操作11为“price=logread(“Product”,productId)”。将上述应用程序中的上述数据库访问操作2标记为需要记录访问日志的操作22,操作22为“balance=logread(“User”,userId)”。将上述应用程序中的上述数据库访问操作3标记为需要记录访问日志的操作33,操作33为“logwrite(“User”,userId,balance-price)”。如此,得到如下所示的待验证应用程序。
void purchase(productId,userId)
{
price=logread(“Product”,productId);
begin_txn;
balance=logread(“User”,userId);
logwrite(“User”,userId,balance-price);
end_txn;
return;
}
3013:通过幂等性验证器验证待验证应用程序是否具有幂等性,如果待验证应用程序具有幂等性,则执行3014,如果待验证应用程序不具有幂等性,则执行3015。
幂等性验证器是用于验证应用程序是否具有幂等性的算法,例如该算法可以是Yggdrasil算法等,Yggdrasil算法是一种幂等性验证算法。
3014:将待验证数据库访问操作确定为不破坏应用程序幂等性的目标数据库访问操作,结束返回。
3015:将待验证数据库访问操作确定为破坏应用程序幂等性的数据库访问操作,结束返回。
在确定出待验证数据库访问操作破坏应用程序的幂等性时,或者,在确定出待验证数据库访问操作不破坏应用程序的幂等性时,扫描应用程序中位于待验证数据库访问操作之后的下一个数据库访问操作,将该下一个数据库访问操作作为待验证数据库访问操作并重复执行上述3011至3015的操作。
其中,参见图5,上述3011至3015的操作是应用程序通过记日志方案生成器执行的。第一操作集合、第二操作集合和第三操作集合构成一个记日志方案,该记日志方案定义了应用程序中的哪些数据库访问操作需要标记为需要记录访问日志的操作,以及哪些数据库访问操作需要标记为不需要记录访问日志的操作。
每扫描一个数据库访问操作,便选择一个数据库访问操作作为待验证数据库访问操作,基于每次扫描得到的待验证数据库访问操作可能得到不同的第一操作集合、第二操作集合和第三操作集合。每次得到的第一操作集合中的各数据库访问操作都是不需要记录访问日志的操作,以及每次得到的第二操作集合和第三操作集合中的各数据库访问操作都是需要记录访问日志的操作。通过记日志方案生成器将每次得到的第一操作集合、第二操作集合和第三操作集合作为记日志方案,并基于每次得到的第一操作集合、第二操作集合和第三操作集合去标记应用程序中的数据库访问操作,得到待验证应用程序。然后使用幂等性验证器验证待验证应用程序,得出待验证数据库访问操作是否破坏应用程序的幂等性。
在对应用程序中的最后一个数据库访问操作执行上述3011至3015的操作后,可以确定出应用程序中破坏应用程序幂等性的各数据库访问操作,以及可以确定出应用程序中不破坏应用程序幂等性的各目标数据库访问操作。如此,可以得出破坏应用程序幂等性的各数据库访问操作的操作标识,以及可以得出不破坏应用程序幂等性的各目标数据库访问操作的操作标识。
上述3011至3015是获取至少一个目标数据库访问操作的一个实现实例。除了上述步骤3011至3015的实现实例外,还可能有其他实现实例。接下来列举了另一种实现实例,参见图6,该另一个实现实例包括如下3111至3115的步骤。
3111:获取第一操作集合和第二操作集合,第一操作集合包括应用程序中的至少一个数据库访问操作,第二操作集合包括应用程序中除第一操作集合以外的数据库访问操作。
在3111中,获取应用程序包括的每个数据库访问操作,从应用程序包括的数据库访问操作中随机选择至少一个数据库访问操作组成第一操作集合,将应用程序中未选择的数据库访问操作组成第二操作集合。
3112:将应用程序中的第一操作集合包括的每个数据库访问操作标记为不需要记录访问日志的操作,将应用程序中的第二操作集合包括的每个数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序。
3113:通过幂等性验证器验证待验证应用程序是否具有幂等性,如果待验证应用程序具有幂等性,则执行3114,如果待验证应用程序不具有幂等性,则执行3015。
如果待验证应用程序具有幂等性,表示第一操作集合中的每个数据库访问操作是不破坏应用程序幂等性的数据库访问操作,第二操作集合中可能包括不破坏应用程序幂等性的数据库访问操作,也可能不包括不破坏应用程序幂等性的数据库访问操作。
如果待验证应用程序不具有幂等性,表示第一操作集合包括破坏应用程序幂等性的数据库访问操作,第二操作集合中可能包括不破坏应用程序幂等性的数据库访问操作,也可能不包括不破坏应用程序幂等性的数据库访问操作。
操作3114是一个可选的操作,如果待验证应用程序具有幂等性,表示第一操作集合中的每个数据库访问操作不破坏应用程序的幂等性,可以将第一操作集合中的数据库访问操作确定为不破坏应用程序幂等性的数据库访问操作,结束返回。其中,第二操作集合中也可能包括不破坏应用程序幂等性的数据库访问操作,因此可以继续执行如下步骤3114,以将第二操作集合中的不破坏应用程序幂等性的数据库访问操作移动到第一操作集合中。
3114:从第二操作集合中选择数据库访问操作作为第一操作,将第一操作从第二操作集合移动到第一操作集合中,返回执行3112。
在将第一操作从第二操作集合移动到第一操作集合后,得到新的第一操作集合和第二操作集合。基于新的第一操作集合和第二操作集合,通过步骤3112得到新的待验证应用程序,在验证出待验证应用程序具有幂等性时,说明第一操作是不破坏应用程序幂等性的数据库访问操作。将第一操作留在第一操作集合中,从第二操作集合包括的未被选择的数据库访问操作中选择一个数据库访问操作作为第一操作,并继续执行操作3114,以继续将第二操作集合中不破坏应用程序幂等性的数据库访问操作移动到第一操作集合。
在验证待验证应用程序不具有幂等性,说明第一操作是破坏应用程序幂等性的数据库访问操作,将第一操作从第一操作集合移动到第二操作集合,然后从第二操作集合包括的未被选择的数据库访问操作中选择一个数据库访问操作作为第一操作,并继续执行步骤3114。
如果第二操作集合没有未被选择的数据库访问操作,则表示将应用程序中不破坏应用程序幂等性的各数据库访问操作移到第一数据库中,将当前第一操作集合中的数据库访问操作确定为不破坏应用程序幂等性的数据库访问操作,然后结束返回。
3115:从第一操作集合中选择数据库访问操作作为第二操作,将第二操作从第一操作集合移动到第二操作集合中,返回执行3112。
在将第二操作从第一操作集合移动到第二操作集合后,得到新的第一操作集合和第二操作集合。基于新的第一操作集合和第二操作集合,通过步骤3112得到新的待验证应用程序。在验证出待验证应用程序不具有幂等性时,表示第一操作集合还包括破坏应用程序幂等性的数据库访问操作,所以继续执行3115,即继续从第一操作集合中选择数据库访问操作作为第二操作。将第二操作从第一操作集合移动到第二操作集合中,得到新的第一操作集合和第二操作集合。基于新的第一操作集合和第二操作集合,通过步骤3112得到新的待验证应用程序。
在验证待验证应用程序具有幂等性,表示第一操作集合中剩下的数据库访问操作均是不破坏应用程序幂等性的数据库访问操作。但此时第二操作集合中可能还有不破坏应用程序幂等性的数据库访问操作,可以返回执行步骤3114,以将第二操作集合中不破坏应用程序幂等性的数据库访问操作移动到第一操作集合中。
在得出不破坏应用程序幂等性的各目标数据库访问操作的操作标识后,在运行应用程序时,应用程序可以按如下步骤302-步骤304的操作访问数据库。
步骤302:获取待执行数据库访问操作,待执行数据库访问操作是应用程序中的数据库访问操作。
在应用程序运行的过程中,在应用程序运行到某个数据库访问操作,将该数据库访问操作作为待执行数据库访问操作,并获取待执行数据库访问操作的操作标识。
步骤303:确定该至少一个目标数据库访问操作是否包括待执行数据库访问操作,如果该至少一个目标数据库访问操作包括待执行数据库访问操作,执行步骤304,如果该至少一个目标数据库访问操作不包括待执行数据库访问操作,执行步骤305。
在步骤303中,确定该至少一个目标数据库访问操作的操作标识是否包括待执行数据库访问操作的操作标识。如果该至少一个目标数据库访问操作的操作标识包括待执行数据库访问操作的操作标识,确定该至少一个目标数据库访问操作包括待执行数据库访问操作。如果该至少一个目标数据库访问操作的操作标识不包括待执行数据库访问操作的操作标识,确定该至少一个目标数据库访问操作不包括待执行数据库访问操作。
步骤304:使用待执行数据库访问操作访问应用程序的数据库,得到待执行数据库访问操作的访问结果,结束。
在该至少一个目标数据库访问操作包括待执行数据库访问操作时,应用程序第一次使用待执行数据库访问操作访问数据库所产生的影响和应用程序第n次使用待执行数据库访问操作访问数据库所产生的影响相同。因此,可以直接使用待执行数据库访问操作访问应用程序的数据库,得到待执行数据库访问操作的访问结果,这样,应用程序不需要查询数据库访问日志,来确定待执行数据库访问操作是否是已访问数据库的操作,而是直接使用待执行数据库访问操作访问数据库,减小了访问数据库所需要的时间,提高了访问数据库的效率。
步骤305:基于数据库访问日志获取待执行数据库访问操作的访问结果,该数据库访问日志用于记录应用程序中已访问数据库的数据库访问操作的访问日志。
在一些实施例中,该数据库访问日志包括应用程序中已访问数据库的数据库访问操作的访问日志。对于任一条已访问数据库的数据库访问操作,该数据库访问操作的访问日志包括该数据库访问操作的操作标识和该数据库访问操作的访问结果等内容。
在步骤305中,应用程序基于待执行数据库访问操作的操作标识,查询数据库访问日志,如果从数据库访问日志中查询出包括待执行数据库访问操作的操作标识的访问日志,则应用程序获取该访问日志中的访问结果。
如果从数据库访问日志中没有查询出包括待执行数据库访问操作的操作标识的访问日志,则应用程序使用待执行数据库访问操作访问应用程序的数据库,得到待执行数据库访问操作的访问结果。
可选地,应用程序还向数据库访问日志保存待执行数据库访问操作的访问日志,该访问日志包括待执行数据库访问操作的操作标识和待执行数据库访问操作的访问结果。
在一些实施例中,技术人员开发出应用程序后,将应用程序上传到无服务器平台中的第一设备上运行,第一设备通过上述步骤301从该应用程序中获取不破坏应用程序幂等性的至少一个目标数据库访问操作。然后第一设备在运行应用程序的过程中,如果执行到应用程序中的一个数据库访问操作时,将该数据库访问操作作为待执行数据库访问操作,并通过上述步骤302至305的流程使用待执行数据库访问操作访问数据库。
在一些实施例中,参见图7,技术人员开发出应用程序后,通过上述步骤301从该应用程序中获取破坏应用程序幂等性的数据库访问操作,以及不破坏应用程序幂等性的至少一个目标数据库访问操作。对于破坏应用程序幂等性的数据库访问操作,技术人员可以将破坏应用程序幂等性的数据库访问操作修改为不破坏应用程序幂等性的数据库访问操作。将修改后的应用程序上传到无服务器平台中的第一设备上运行。
在本申请实施例中,获取第一操作集合和第二操作集合,第一操作集合包括应用程序中的部分数据库访问操作,第二操作集合包括应用程序中的部分数据库访问操作,第一操作集合和第二操作集合没有交集。将应用程序中的第一操作集合中的每个数据库访问操作标记为不需要记录访问日志的操作,以及将应用程序中的第二操作集合中的每个数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序。在通过幂等性验证器验证待验证应用程序具有幂等性时,将第一操作集合中的数据库访问操作确定为不破坏应用程序幂等性的目标数据库访问操作。在得出应用程序中的不破坏应用程序幂等性的至少一个目标数据库访问操作后,在应用程序待执行某个数据库访问操作时,如果至少一个目标数据库访问操作包括待执行数据库访问操作时,使用待执行数据库访问操作访问应用程序的数据库,得到待执行数据库访问操作的访问结果。如此,在使用不破坏应用程序幂等性的数据库访问操作访问数据库时,可以直接访问数据库,减小访问数据库所需要的时间。
参见图8,本申请实施例提供了一种访问数据库的装置800,所述装置800部署在图1所示数据库访问系统100中的应用程序101所在的第一设备上,或者,所述装置800部署在图3方法300的第一设备上。所述装置800包括:
处理单元801,用于获取应用程序中的至少一个目标数据库访问操作,该至少一个目标数据库访问操作是不破坏应用程序幂等性的操作;
处理单元801,还用于获取待执行数据库访问操作,待执行数据库访问操作是应用程序中的数据库访问操作;
访问单元802,用于在该至少一个目标数据库访问操作包括待执行数据库访问操作时,使用待执行数据库访问操作访问应用程序的数据库,得到待执行数据库访问操作的访问结果。
可选地,处理单元801获取目标数据库访问操作的详细实现过程参见图3所示方法300的步骤301的相关内容,在此不再详细说明。
可选地,处理单元801获取待执行数据库访问操作的详细实现过程参见图3所示方法300的步骤302的相关内容,在此不再详细说明。
可选地,访问单元802使用待执行数据库访问操作访问应用程序的数据库的详细实现过程参见图3所示方法300的步骤303-304的相关内容,在此不再详细说明。
可选地,处理单元801,还用于:
在该至少一个目标数据库访问操作不包括待执行数据库访问操作时,基于数据库访问日志获取待执行数据库访问操作的访问结果,该数据库访问日志用于记录应用程序中已访问数据库的数据库访问操作的访问日志。
可选地,处理单元801基于数据库访问日志获取待执行数据库访问操作的访问结果的详细实现过程参见图3所示方法300的步骤305的相关内容,在此不再详细说明。
可选地,处理单元801,用于:
获取第一操作集合和第二操作集合,第一操作集合包括应用程序中的部分数据库访问操作,第二操作集合包括应用程序中的部分数据库访问操作,第一操作集合和第二操作集合没有交集;
在应用程序中,将第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序;
在通过幂等性验证器验证待验证应用程序具有幂等性时,将第一操作集合中的数据库访问操作确定为不破坏应用程序幂等性的目标数据库访问操作。
可选地,处理单元801获取第一操作集合和第二操作集合的详细实现过程参见图4所示方法的步骤3012或图6所示方法的步骤3111的相关内容,在此不再详细说明。
可选地,处理单元801得到待验证应用程序的详细实现过程参见图4所示方法的步骤3012或图6所示方法的步骤3112的相关内容,在此不再详细说明。
可选地,处理单元801将第一操作集合中的数据库访问操作确定为不破坏应用程序幂等性的目标数据库访问操作的详细实现过程参见图4所示方法的步骤3014或图6所示方法的步骤3113的相关内容,在此不再详细说明。
可选地,处理单元801,还用于:
从应用程序中除已确定的破坏应用程序幂等性的数据库访问操作和已确定的不破坏应用程序幂等性的数据库访问操作之外的数据库访问操作中选择一个数据库访问操作作为待验证数据库访问操作,第一操作集合包括待验证数据库访问操作和已确定的不破坏所述应用程序幂等性的数据库访问操作,第二操作集合包括已确定的破坏应用程序幂等性的数据库访问操作。
可选地,处理单元801选择待验证数据库访问操作的详细实现过程参见图4所示方法的步骤3011的相关内容,在此不再详细说明。
可选地,处理单元801,还用于:
将待验证应用程序中的除第一操作集合和第二操作集合以外的数据库访问操作标记为需要记录访问日志的操作。
可选地,处理单元801,还用于:
在通过幂等性验证器验证待验证应用程序不具有幂等性时,将待验证数据库访问操作确定为破坏应用程序幂等性的数据库访问操作。
可选地,处理单元801,还用于:
在应用程序中存在包括写操作的无界循环函数时,将应用程序中的位于无界循环函数之前的数据库访问操作和无界循环函数中的数据库访问操作确定为破坏应用程序幂等性的数据库访问操作。
可选地,处理单元801将应用程序中的位于无界循环函数之前的数据库访问操作和无界循环函数中的数据库访问操作确定为破坏应用程序幂等性的数据库访问操作的详细实现过程参见图3所示方法300的步骤301的相关内容,在此不再详细说明。
可选地,处理单元801,用于:
从应用程序中的位于无界循环函数之后的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。
可选地,处理单元801从应用程序中的位于无界循环函数之后的第一个数据库访问操作开始扫描的详细实现过程参见图4所示方法的步骤3011的相关内容,在此不再详细说明。
可选地,处理单元801,用于:
在应用程序中没有无界循环函数或者应用程序中的无界循环函数不包括写操作时,从应用程序的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。
可选地,处理单元801从应用程序的第一个数据库访问操作开始扫描的详细实现过程参见图4所示方法的步骤3011的相关内容,在此不再详细说明。
可选地,处理单元801,还用于:
在应用程序中的无界循环函数不包括写操作时,将应用程序中的无界循环函数替换为指定函数,指定函数具有返回值能力。
可选地,处理单元801将应用程序中的无界循环函数替换为指定函数的详细实现过程参见图4所示方法的步骤3011的相关内容,在此不再详细说明。
可选地,处理单元801,用于:
从应用程序中选择至少一个数据库访问操作组成第一操作集合;
将应用程序中除至少一个数据库访问操作以外的数据库访问操作组成第二操作集合。
可选地,处理单元801组成第一操作集合和第二操作集合的详细实现过程参见图6所示方法的步骤3111的相关内容,在此不再详细说明。
可选地,处理单元801,还用于:
在通过幂等性验证器验证待验证应用程序具有幂等性时,将第一操作从第二操作集合移动到第一操作集合中,第一操作是第二操作集合中的数据库访问操作,执行所述在应用程序中,将第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序的操作。
可选地,处理单元801将第一操作从第二操作集合移动到第一操作集合中的详细实现过程参见图6所示方法的步骤3114的相关内容,在此不再详细说明。
可选地,处理单元801,还用于:
在通过幂等性验证器验证待验证应用程序不具有幂等性时,将第二操作从第一操作集合移动到第二操作集合中,第二操作是第一操作集合中的数据库访问操作,执行所述在应用程序中,将第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序的操作。
可选地,处理单元801将第二操作从第一操作集合移动到第二操作集合中的详细实现过程参见图6所示方法的步骤3115的相关内容,在此不再详细说明。
在本申请实施例中,由于处理单元获取到应用程序中的至少一个目标数据库访问操作,该至少一个目标数据库访问操作是不破坏应用程序幂等性的操作,这样对于应用程序中的待执行数据库访问操作,访问单元在该至少一个目标数据库访问操作包括待执行数据库访问操作时,使用待执行数据库访问操作访问应用程序的数据库,得到待执行数据库访问操作的访问结果,提高了访问数据库效率,减小访问数据库的时延。
参见图9,本申请实施例提供了一种第一设备900示意图。第一设备900可以是上述任意实施例中的第一设备。例如第一设备900可以是上述图1所示数据库访问系统100中的应用程序101所在的第一设备或图3所示方法300的第一设备。第一设备900包括至少一个处理器901,内部连接902,存储器903以及至少一个收发器904。
第一设备900是一种硬件结构的装置。
在一些实施例中,可以用于实现图8所述的装置800中的功能模块。例如,本领域技术人员可以想到图8所示的装置800中的处理单元801和访问单元802可以通过该至少一个处理器901调用存储器903中的代码来实现。
可选的,上述处理器901可以是一个通用中央处理器(central processing unit,CPU),网络处理器(network processor,NP),微处理器,特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本申请方案程序执行的集成电路。
上述内部连接902可包括一通路,在上述组件之间传送信息。可选的,内部连接902为单板或总线等。
上述收发器904,用于与其他设备或通信网络通信。
上述存储器903可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,EEPROM)、只读光盘(compactdisc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理器相连接。存储器也可以和处理器集成在一起。
其中,存储器903用于存储执行本申请方案的应用程序代码,并由处理器901来控制执行。处理器901用于执行存储器903中存储的应用程序代码,以及配合至少一个收发器904,从而使得第一设备900实现本专利方法中的功能。
在具体实现中,作为一种实施例,处理器901可以包括一个或多个CPU,例如图9中的CPU0和CPU1。
在具体实现中,作为一种实施例,第一设备900可以包括多个处理器,例如图9中的处理器901和处理器907。这些处理器中的每一个可以是一个单核(single-CPU)处理器,也可以是一个多核(multi-CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (29)
1.一种访问数据库的方法,其特征在于,所述方法包括:
获取应用程序中的至少一个目标数据库访问操作,所述至少一个目标数据库访问操作是不破坏所述应用程序幂等性的操作;
获取待执行数据库访问操作,所述待执行数据库访问操作是所述应用程序中的数据库访问操作;
在所述至少一个目标数据库访问操作包括所述待执行数据库访问操作时,使用所述待执行数据库访问操作访问所述应用程序的数据库,得到所述待执行数据库访问操作的访问结果。
2.如权利要求1所述的方法,其特征在于,所述方法还包括:
在所述至少一个目标数据库访问操作不包括所述待执行数据库访问操作时,基于数据库访问日志获取所述待执行数据库访问操作的访问结果,所述数据库访问日志用于记录所述应用程序中已访问所述数据库的数据库访问操作的访问日志。
3.如权利要求1或2所述的方法,其特征在于,所述获取应用程序中的至少一个目标数据库访问操作,包括:
获取第一操作集合和第二操作集合,所述第一操作集合包括所述应用程序中的部分数据库访问操作,所述第二操作集合包括所述应用程序中的部分数据库访问操作,所述第一操作集合和所述第二操作集合没有交集;
在所述应用程序中,将所述第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将所述第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序;
在通过幂等性验证器验证所述待验证应用程序具有幂等性时,将所述第一操作集合中的数据库访问操作确定为不破坏所述应用程序幂等性的目标数据库访问操作。
4.如权利要求3所述的方法,其特征在于,所述方法还包括:
从所述应用程序中除已确定的破坏所述应用程序幂等性的数据库访问操作和已确定的不破坏所述应用程序幂等性的数据库访问操作之外的数据库访问操作中选择一个数据库访问操作作为待验证数据库访问操作,所述第一操作集合包括所述待验证数据库访问操作和已确定的不破坏所述应用程序幂等性的数据库访问操作,所述第二操作集合包括已确定的破坏所述应用程序幂等性的数据库访问操作。
5.如权利要求4所述的方法,其特征在于,所述方法还包括:
将所述待验证应用程序中的除所述第一操作集合和所述第二操作集合以外的数据库访问操作标记为需要记录访问日志的操作。
6.如权利要求4或5所述的方法,其特征在于,所述方法还包括:
在通过所述幂等性验证器验证所述待验证应用程序不具有幂等性时,将所述待验证数据库访问操作确定为破坏所述应用程序幂等性的数据库访问操作。
7.如权利要求4-6任一项所述的方法,其特征在于,所述方法还包括:
在所述应用程序中存在包括写操作的无界循环函数时,将所述应用程序中的位于所述无界循环函数之前的数据库访问操作和所述无界循环函数中的数据库访问操作确定为破坏所述应用程序幂等性的数据库访问操作。
8.如权利要求7所述的方法,其特征在于,所述选择一个数据库访问操作作为待验证数据库访问操作,包括:
从所述应用程序中的位于所述无界循环函数之后的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。
9.如权利要求4-6任一项所述的方法,其特征在于,所述选择一个数据库访问操作作为待验证数据库访问操作,包括:
在所述应用程序中没有无界循环函数或者所述应用程序中的无界循环函数不包括写操作时,从所述应用程序的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。
10.如权利要求9所述的方法,其特征在于,所述从所述应用程序的第一个数据库访问操作开始扫描之前,还包括:
在所述应用程序中的无界循环函数不包括写操作时,将所述应用程序中的无界循环函数替换为指定函数,所述指定函数具有返回值能力。
11.如权利要求3所述的方法,其特征在于,所述获取第一操作集合和第二操作集合,包括:
从所述应用程序中选择至少一个数据库访问操作组成所述第一操作集合;
将所述应用程序中除所述至少一个数据库访问操作以外的数据库访问操作组成所述第二操作集合。
12.如权利要求11所述的方法,其特征在于,所述方法还包括:
在通过所述幂等性验证器验证所述待验证应用程序具有幂等性时,将第一操作从所述第二操作集合移动到所述第一操作集合中,所述第一操作是所述第二操作集合中的数据库访问操作,执行所述在所述应用程序中,将所述第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将所述第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序的操作。
13.如权利要求11所述的方法,其特征在于,所述方法还包括:
在通过所述幂等性验证器验证所述待验证应用程序不具有幂等性时,将第二操作从所述第一操作集合移动到所述第二操作集合中,所述第二操作是所述第一操作集合中的数据库访问操作,执行所述在所述应用程序中,将所述第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将所述第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序的操作。
14.一种访问数据库的装置,其特征在于,所述装置包括:
处理单元,用于获取应用程序中的至少一个目标数据库访问操作,所述至少一个目标数据库访问操作是不破坏所述应用程序幂等性的操作;
所述处理单元,还用于获取待执行数据库访问操作,所述待执行数据库访问操作是所述应用程序中的数据库访问操作;
访问单元,用于在所述至少一个目标数据库访问操作包括所述待执行数据库访问操作时,使用所述待执行数据库访问操作访问所述应用程序的数据库,得到所述待执行数据库访问操作的访问结果。
15.如权利要求14所述的装置,其特征在于,所述处理单元,还用于:
在所述至少一个目标数据库访问操作不包括所述待执行数据库访问操作时,基于数据库访问日志获取所述待执行数据库访问操作的访问结果,所述数据库访问日志用于记录所述应用程序中已访问所述数据库的数据库访问操作的访问日志。
16.如权利要求14或15所述的装置,其特征在于,所述处理单元,用于:
获取第一操作集合和第二操作集合,所述第一操作集合包括所述应用程序中的部分数据库访问操作,所述第二操作集合包括所述应用程序中的部分数据库访问操作,所述第一操作集合和所述第二操作集合没有交集;
在所述应用程序中,将所述第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将所述第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序;
在通过幂等性验证器验证所述待验证应用程序具有幂等性时,将所述第一操作集合中的数据库访问操作确定为不破坏所述应用程序幂等性的目标数据库访问操作。
17.如权利要求16所述的装置,其特征在于,所述处理单元,还用于:
从所述应用程序中除已确定的破坏所述应用程序幂等性的数据库访问操作和已确定的不破坏所述应用程序幂等性的数据库访问操作之外的数据库访问操作中选择一个数据库访问操作作为待验证数据库访问操作,所述第一操作集合包括所述待验证数据库访问操作和已确定的不破坏所述应用程序幂等性的数据库访问操作,所述第二操作集合包括已确定的破坏所述应用程序幂等性的数据库访问操作。
18.如权利要求17所述的装置,其特征在于,所述处理单元,还用于:
将所述待验证应用程序中的除所述第一操作集合和所述第二操作集合以外的数据库访问操作标记为需要记录访问日志的操作。
19.如权利要求17或18所述的装置,其特征在于,所述处理单元,还用于:
在通过所述幂等性验证器验证所述待验证应用程序不具有幂等性时,将所述待验证数据库访问操作确定为破坏所述应用程序幂等性的数据库访问操作。
20.如权利要求17-19任一项所述的装置,其特征在于,所述处理单元,还用于:
在所述应用程序中存在包括写操作的无界循环函数时,将所述应用程序中的位于所述无界循环函数之前的数据库访问操作和所述无界循环函数中的数据库访问操作确定为破坏所述应用程序幂等性的数据库访问操作。
21.如权利要求20所述的装置,其特征在于,所述处理单元,用于:
从所述应用程序中的位于所述无界循环函数之后的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。
22.如权利要求17-19任一项所述的装置,其特征在于,所述处理单元,用于:
在所述应用程序中没有无界循环函数或者所述应用程序中的无界循环函数不包括写操作时,从所述应用程序的第一个数据库访问操作开始扫描,并选择当前被扫描的数据库访问操作作为待验证数据库访问操作。
23.如权利要求22所述的装置,其特征在于,所述处理单元,还用于:
在所述应用程序中的无界循环函数不包括写操作时,将所述应用程序中的无界循环函数替换为指定函数,所述指定函数具有返回值能力。
24.如权利要求16所述的装置,其特征在于,所述处理单元,用于:
从所述应用程序中选择至少一个数据库访问操作组成所述第一操作集合;
将所述应用程序中除所述至少一个数据库访问操作以外的数据库访问操作组成所述第二操作集合。
25.如权利要求24所述的装置,其特征在于,所述处理单元,还用于:
在通过所述幂等性验证器验证所述待验证应用程序具有幂等性时,将第一操作从所述第二操作集合移动到所述第一操作集合中,所述第一操作是所述第二操作集合中的数据库访问操作,执行所述在所述应用程序中,将所述第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将所述第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序的操作。
26.如权利要求24所述的装置,其特征在于,所述处理单元,还用于:
在通过所述幂等性验证器验证所述待验证应用程序不具有幂等性时,将第二操作从所述第一操作集合移动到所述第二操作集合中,所述第二操作是所述第一操作集合中的数据库访问操作,执行所述在所述应用程序中,将所述第一操作集合中的数据库访问操作标记为不需要记录访问日志的操作以及将所述第二操作集合中的数据库访问操作标记为需要记录访问日志的操作,得到待验证应用程序的操作。
27.一种访问数据库的设备,其特征在于,包括至少一个处理器,所述至少一个处理器用于与存储器耦合,读取并执行所述存储器中的指令,以实现如权利要求1-13任一项所述的方法。
28.一种计算机存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1-13任一项所述的方法。
29.一种计算机程序产品,其包括计算机程序,其特征在于,所述计算机程序被处理器执行时,实现如权利要求1-13任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211522600.5A CN116049270A (zh) | 2022-11-30 | 2022-11-30 | 访问数据库的方法、装置及存储介质 |
PCT/CN2023/133968 WO2024114524A1 (zh) | 2022-11-30 | 2023-11-24 | 访问数据库的方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211522600.5A CN116049270A (zh) | 2022-11-30 | 2022-11-30 | 访问数据库的方法、装置及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116049270A true CN116049270A (zh) | 2023-05-02 |
Family
ID=86112279
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211522600.5A Pending CN116049270A (zh) | 2022-11-30 | 2022-11-30 | 访问数据库的方法、装置及存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116049270A (zh) |
WO (1) | WO2024114524A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024114524A1 (zh) * | 2022-11-30 | 2024-06-06 | 华为技术有限公司 | 访问数据库的方法、装置及存储介质 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7840674B1 (en) * | 2004-05-10 | 2010-11-23 | Intuit Inc. | Routing messages across a network in a manner that ensures that non-idempotent requests are processed |
US8930318B1 (en) * | 2011-09-29 | 2015-01-06 | Google Inc. | Systems and methods for handling interruptions while updating of an electronic device |
US11880835B2 (en) * | 2020-04-24 | 2024-01-23 | Salesforce, Inc. | Prevention of duplicate transactions across multiple transaction entities in database systems |
CN112633851A (zh) * | 2020-12-30 | 2021-04-09 | 中国农业银行股份有限公司 | 一种控制幂等的方法及装置 |
CN113064584B (zh) * | 2021-04-22 | 2024-05-07 | 中国平安财产保险股份有限公司 | 幂等的实现方法、装置、设备及介质 |
CN114428820A (zh) * | 2022-01-26 | 2022-05-03 | 普联技术有限公司 | 分布式数据实时同步的方法、系统和数据同步设备 |
CN116049270A (zh) * | 2022-11-30 | 2023-05-02 | 华为技术有限公司 | 访问数据库的方法、装置及存储介质 |
-
2022
- 2022-11-30 CN CN202211522600.5A patent/CN116049270A/zh active Pending
-
2023
- 2023-11-24 WO PCT/CN2023/133968 patent/WO2024114524A1/zh unknown
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2024114524A1 (zh) * | 2022-11-30 | 2024-06-06 | 华为技术有限公司 | 访问数据库的方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
WO2024114524A1 (zh) | 2024-06-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6182245B1 (en) | Software test case client/server system and method | |
WO2020024408A1 (zh) | 测试装置、测试的方法及存储介质 | |
US20060195686A1 (en) | Startup program execution method, device, storage medium, and program | |
EP1091294A2 (en) | Method and apparatus for assigning resources to logical partition clusters | |
WO2021036253A1 (zh) | 在区块链中并发执行交易的方法和装置 | |
JP7088897B2 (ja) | データアクセス方法、データアクセス装置、機器及び記憶媒体 | |
CN102664874B (zh) | 一种安全登陆的方法和系统 | |
WO2024114524A1 (zh) | 访问数据库的方法、装置及存储介质 | |
CN111049889B (zh) | 一种静态资源上传方法、装置、集成服务器和系统 | |
WO2021135742A1 (zh) | 对账清算方法及装置 | |
CN116088758A (zh) | 优化方法、装置、计算机设备、存储介质和程序产品 | |
CN109145621B (zh) | 文档管理方法及装置 | |
CN113191114A (zh) | 用于验证系统的方法和装置 | |
CN110806979B (zh) | 接口返回值的校验方法、装置、设备及存储介质 | |
CN110765125B (zh) | 一种存储数据的方法及装置 | |
CN114676126B (zh) | 基于数据库的数据校验方法、装置、设备及存储介质 | |
CN111859403B (zh) | 依赖关系漏洞的确定方法、装置、电子设备及存储介质 | |
CN111382179B (zh) | 数据处理方法、装置及电子设备 | |
CN114116674A (zh) | 基于综合业务平台的业务建模方法、装置、介质及设备 | |
CN113434938A (zh) | Bim模型的检查方法、装置、计算机设备及存储介质 | |
CN112685413A (zh) | 一种游戏配置表的读取方法、装置、存储介质及电子设备 | |
CN112783954A (zh) | 数据访问方法、装置及服务器 | |
CN112732562A (zh) | 一种计算机的测试方法、系统及相关装置 | |
CN114443375A (zh) | 测试方法及装置、电子装置及计算机可读存储介质 | |
CN113741945A (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 |