WO2015085914A1 - 数据库访问方法和装置 - Google Patents

数据库访问方法和装置 Download PDF

Info

Publication number
WO2015085914A1
WO2015085914A1 PCT/CN2014/093424 CN2014093424W WO2015085914A1 WO 2015085914 A1 WO2015085914 A1 WO 2015085914A1 CN 2014093424 W CN2014093424 W CN 2014093424W WO 2015085914 A1 WO2015085914 A1 WO 2015085914A1
Authority
WO
WIPO (PCT)
Prior art keywords
lock
client
connection
database
currently
Prior art date
Application number
PCT/CN2014/093424
Other languages
English (en)
French (fr)
Inventor
朱超
王超
陈飞
Original Assignee
北京奇虎科技有限公司
奇智软件(北京)有限公司
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by 北京奇虎科技有限公司, 奇智软件(北京)有限公司 filed Critical 北京奇虎科技有限公司
Publication of WO2015085914A1 publication Critical patent/WO2015085914A1/zh

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages

Definitions

  • the present invention relates to database access technologies, and in particular, to a database access method and a database access device.
  • Client access to the database usually includes operations such as establishing a database connection, opening a database, accessing data, and closing a database connection.
  • the establishment of a database connection and the opening of a database operation consume a large amount of system resources and time.
  • connection pool technology is introduced in the database access process.
  • connection pool-based database access is usually implemented by storing a plurality of established database connections in the connection pool, obtaining a database connection from the connection pool for the database access request from the client, and providing the database connection to the database connection.
  • Client after the database access request is executed, the database connection is recycled to the connection pool; subsequently, for database access from the client (which can be the client that sent the database access request before, or other clients) Request, get a database connection from the connection pool (either the database connection obtained last time, or other database connection), and provide the database connection to the client.
  • the database connection is recycled to the connection pool.
  • connection pool technology after the data access operation of the database is completed, the database connection used by the client is not closed, but is stored in the connection pool and stored in the connection pool.
  • the database connection will be used again, that is, the database connection in the connection pool is reused, which avoids the repeated establishment of the database connection and the repeated closing of the database connection, thereby saving system resources and time.
  • the SQL statement in the database access request may be a locked SQL statement, an unlocked SQL statement, or an SQL statement that does not involve unlocking (can be called a normal SQL statement)
  • the database access will There is a lock permission management omission problem; a specific example, in Figure 1, the first client connects to the MySQL database through the first database connection in the connection pool, and the second client connects to the MySQL database through the second database in the connection pool.
  • the first client requests to execute a SQL statement of SELECT GET_LOCK('lock1', 0), and the second client requests to execute a SQL statement of SELECT GET_LOCK('lock2', 0); after the two SQL statements are executed, the first A client obtains lock lock1, the second client obtains lock lock2, and the first database connection and the second database connection are reclaimed into the connection pool; the first client and the second client request to execute SELECT RELEASE_LOCK('lock2' ) and before the SELECT RELEASE_LOCK('lock1') SQL statement, If the first client requests to execute a SQL statement of SELECT GET_LOCK('lock2', 0), or the second client requests to execute a SQL statement of SELECT GET_LOCK('lock1', 0), since the state of the lock is tied to the database connection Therefore, when the database connection allocated for the first client is the foregoing first database connection, and the database connection allocated for the second client is the foregoing second
  • the existing solution is usually to make the client monopolize a database connection during the running, until the client exits, the database connection will be recycled to the connection pool.
  • all locked SQL statements, unlocked SQL statements, and normal SQL statements of the client are executed based on the same database connection, so that the lock obtained by the client is not used by other clients. obtain.
  • the inventor has found that the above solution based on the exclusive database connection greatly reduces the degree of reusability of the database connection.
  • the client needs to execute other logics in addition to requesting execution of the SQL statement during the running. Therefore, there is a time interval between the client requesting execution of two SQL statements, during which the database connection occupied by the client is neither recycled to the connection pool nor fully utilized by the client.
  • the degree of multiplexing of database connections needs to be further improved.
  • the present invention has been made in order to provide a database access method, a corresponding database access device, a computer program, and a computer readable medium that overcome the above problems or at least partially solve the above problems.
  • a database access method comprising: receiving a database access request from a client; determining whether the client currently has a database connection; and executing a database connection based on the client currently having a database connection Defining a database access request; after the execution of the database access request is completed, determining, according to the stored lock information of the client, whether the client currently has an unreleased lock; if the client currently has an unlocked lock And maintaining the database connection for the client, otherwise, the database connection is recycled to the connection pool.
  • a database access apparatus comprising: a processor for receiving a database access request from a client; determining whether the client currently has a database connection; The database connection currently exists by the client executes the database access request; after the execution of the database access request is completed, determining whether the client currently has an unlocked lock according to the stored lock information of the client, if The client is currently unreleased The lock is released, the database connection is maintained for the client, otherwise the database connection is recycled to the connection pool.
  • a computer program comprising computer readable code that causes the database access method to be executed when the electronic device runs the computer readable code.
  • a computer readable medium storing a computer program as described above is provided.
  • the database access method and apparatus of the present invention determines whether the client currently has an unlocked lock after the execution of the database access request of the client is completed, and if it is determined that the client currently has an unlock that is not released, The database connection is recycled to the connection pool, but continues to be occupied by the client; thus, it can be avoided that the lock that the client has is bound by the database connection and the database connection is assigned to other clients and is obtained by other clients.
  • the possibility of the invention thus solves the problem of the lock permission caused by the database connection multiplexing in the connection pool, and improves the degree of reuse of the database connection in the connection pool to some extent.
  • Figure 1 shows a schematic diagram of a network architecture for database access
  • FIG. 2 is a flow chart showing a database access method according to Embodiment 1 of the present invention.
  • FIG. 3 is a flowchart of a database access method according to Embodiment 2 of the present invention.
  • FIG. 4 is a schematic diagram of a database access device according to Embodiment 3 of the present invention.
  • Figure 5 shows a block diagram of an electronic device for performing the method of the present invention
  • Figure 6 shows a schematic diagram of a memory unit for holding or carrying program code implementing the method according to the invention.
  • Embodiment 1 A database access method. The method of this embodiment will be described in detail below with reference to FIG.
  • S200 receives a database access request from a client.
  • the SQL statement in the database access request may be a locked SQL statement, an unlocked SQL statement, or an SQL statement that does not involve unlocking (hereinafter referred to as an ordinary SQL statement).
  • the SQL statement here can be a SQL statement based on MYSQL.
  • S210 Determine whether the client currently has a database connection. If it is determined that the client does not currently have a database connection, go to S220, and if it is determined that the client currently has a database connection, go to S230.
  • the embodiment may determine, according to locally stored information, whether the client currently has a database connection, for example, determining whether the local connection identifier information corresponding to the client is stored (eg, whether the client identifier and the database connection are stored) Correspondence information of the connection identifier), if the connection identifier information corresponding to the client is stored locally (for example, the correspondence relationship between the client identifier and the connection identifier of the database connection is stored locally), it indicates that the client currently has a database Connection, if the connection identifier information corresponding to the client is not stored locally (for example, the local relationship information of the connection identifier of the client identifier and the database connection is not stored locally), it indicates that the client does not currently have a database connection; for example, Determining the value of the current database connection flag bit corresponding to the locally stored client, and determining that the value of the database connection flag bit is the first predetermined value (such as 1 or true, etc.), indicating that the client currently has Database connection, in determining the value of the client is
  • the method may be used to determine whether the client currently has a database connection.
  • the specific manner of determining is not described in detail.
  • a database connection should be selected from the connection pool, and the selected database connection is provided to the client; that is, the embodiment will not currently
  • the client with a database connection allocates a database connection that has been established and stored in the connection pool.
  • an existing connection allocation policy (or a database connection selection policy) may be used to select a database connection for the client from the connection pool.
  • step S210 if it is determined according to the locally stored connection identifier information corresponding to the client whether the client currently has a database connection, in this step, a database connection is selected from the connection pool and provided to the client. After the end, the connection identification information of the selected database connection should be stored locally, such as the pair storing the connection identifier of the client identifier and the selected database connection. Should be related information.
  • step S210 if it is determined according to the value of the current database connection flag set locally for the client to determine whether the client currently has a database connection, in this step, select a database connection from the connection pool. After being provided to the client, the locally stored value of the current database connection flag set for the client should be set to a first predetermined value, such as 1 or true.
  • the database connection currently owned by the client may be a database connection allocated to the client by using the foregoing step S220, or may be a database connection that the client already has to perform the foregoing step S220.
  • Executing a database access request based on the database connection currently owned by the client may be specifically executing a locked SQL statement, or executing an unlocked SQL statement, or executing a normal SQL statement.
  • the client obtains the corresponding lock. For example, the client requests to execute SELECT GET_LOCK('lock1', 0) The SQL statement, the client gets the lock lock1 before it is executed.
  • the lock information corresponding to the client should be maintained, for example, the lock name of the lock is stored, and, for example, the number of locks currently stored by the client is increased;
  • the lock name currently obtained by the client may be added to the lock name set corresponding to the client; if the number of locks currently owned by the client is increased, the client may be currently The number of locks owned is increased by one.
  • the client in the embodiment also has a lock status identifier, when the lock name currently obtained by the client is added to the lock name set corresponding to the client, the corresponding corresponding to the client should be correspondingly set. The value of the lock status identifier.
  • the lock status identifier is used to indicate whether the corresponding client currently has a lock, that is, whether the client is currently in the lock or outside the lock.
  • the lock status indicator can be a Boolean variable. It should be specially noted that the lock status identifier in this embodiment cannot be used to indicate the number of locks currently owned by the client.
  • the client will release the corresponding lock before/after the execution of the SQL statement.
  • the client requests to execute the SQL statement of SELECT RELEASE_LOCK ('lock1'). After the SQL statement is executed, the client releases its currently owned lock lock1.
  • the lock information corresponding to the client should also be maintained; for example, the lock name of the stored lock is deleted, and, for example, the lock is reduced.
  • the number of locks currently stored by the client, etc.; in the case of deleting the lock name, the lock name of the lock currently released by the client may be deleted from the set of lock names corresponding to the client; In the case of the number of locks currently owned, the number of locks currently owned by the client can be decremented by one.
  • the client in the embodiment further has a lock status identifier, when the lock name of the lock currently released by the client is deleted from the lock name set corresponding to the client, the client should be correspondingly set.
  • the lock status identifier if there is no lock name in the lock name set corresponding to the client, the lock status identifier is set to indicate that the client is currently in the lock state, and, for example, the client When there is at least one lock name in the corresponding lock name set, the lock status identifier is set to indicate that the client is in the lock state.
  • the SQL statement executed this time is a normal SQL statement
  • the related operation of the lock information corresponding to the client should not be performed for the SQL statement.
  • the lock name set in this embodiment may be specifically expressed in the form of a lock information record table; in a specific example, each client corresponds to a lock information record table, for example, each client identifier respectively has a lock information record table.
  • the lock information record table at least contains the lock name; if the SQL statement executed this time is a locked SQL statement, before or after the execution of the SQL statement, the corresponding lock information record table can be found according to the client identifier.
  • the identifier finds the corresponding lock information record table, and deletes the lock name of the lock currently released by the client from the found lock information record table.
  • all clients correspond to the same lock information record table, and the lock information record table should include at least a client identifier and a lock name; a record in the lock information record table contains a client current In the case of the lock name of all the locks, if the SQL statement executed this time is a locked SQL statement, before/after the execution of the SQL statement, the client information identifier of the client can be searched in the lock information record table.
  • the end identifier looks up the corresponding record in the lock information record table, and deletes the lock name of the lock currently released by the client from the found record.
  • all clients correspond to the same lock information record table, and the lock information record table should contain at least the client identifier and the lock name; the client has N locks and the client is in the lock information record table.
  • the client identifier of the client and the lock currently obtained by the client may be used.
  • the lock name appends a record to the lock information record table; if the SQL statement executed this time is an unlocked SQL statement, before/after the execution of the SQL statement, the client identifier and the currently released lock of the client may be used.
  • the lock name looks up the matching record in the lock information record table, and deletes the found record that is found from the lock information record table.
  • the specific value of the lock status identifier should be related to the addition operation and the deletion operation of the lock name in the lock name set.
  • each lock information record table respectively has a lock status identifier, and the lock status identifier can indicate a lock information record table corresponding thereto.
  • Empty or non-empty in the case that the executed SQL statement is a locked SQL statement, the execution of the SQL statement is completed, and the lock name currently obtained by the client is added to the lock corresponding to the client.
  • the value of the lock status identifier should be set to a first value (such as 1 or true) to indicate that the lock information record table is non-empty, that is, the client currently has at least one lock;
  • a first value such as 1 or true
  • the lock should be The value of the status identifier is set to a second value (such as 0 or false) to indicate that the lock information record table is empty, that is, the client does not currently have a lock.
  • each client has a lock status identifier respectively, and the lock status identifier can indicate whether the lock information record table is in the lock information record table.
  • the lock name corresponding to the client identifier is included; in the case that the executed SQL statement is a locked SQL statement, the execution of the SQL statement is completed, and the lock name currently obtained by the client is added to the client.
  • the value of the lock status identifier should be set to a first value (such as 1 or true) to indicate that the lock information record table contains the lock name corresponding to the client identifier, that is, The client currently has at least one lock; in the case that the executed SQL statement is an unlocked SQL statement, the execution of the SQL statement is completed, and the client is currently released from the lock information record table corresponding to the client.
  • a first value such as 1 or true
  • the lock information record table After the lock name of the lock, it should be judged whether the lock information record still contains the lock name corresponding to the client, and if the lock name corresponding to the client is still included, The value of the lock status identifier corresponding to the client is set to a first value (such as 1 or true), to indicate that the lock information record table includes the lock name corresponding to the client, that is, the client currently has at least one lock. If the lock information record table does not contain the lock name corresponding to the client, the value of the lock state identifier corresponding to the client should be set to a second value (such as 0 or false) to indicate the lock. The information record table does not contain the lock name corresponding to the client, that is, the client does not currently have a lock.
  • a first value such as 1 or true
  • the specific process of maintaining the lock information corresponding to the client may be performed before the database access request is executed, or may be performed after the database access request is executed.
  • the embodiment does not exclude the lock information maintenance step and the The possibility of database access request execution steps being executed in parallel.
  • the guest is determined according to the lock information corresponding to the currently stored client.
  • the lock information may be a lock name, a number of locks, or a lock status identifier.
  • the embodiment can determine whether the lock information record table corresponding to the opened client contains the lock name, if The lock information record table contains the lock name, and it is determined that the client currently has an unreleased lock. If the lock information record table does not contain the lock name, it is determined that the client does not currently have the unlocked lock.
  • the embodiment can determine whether the lock information record table that is opened contains the lock name corresponding to the client, if the lock The information record table includes the lock name corresponding to the client, and it is determined that the client currently has an unreleased lock. If the lock information record table does not include the lock name corresponding to the client, the client is determined. There are currently no locks that have not been released.
  • the current embodiment can determine the current value of the number of locks corresponding to the client, if the current value is not the initial value (The initial value identifies that the client does not currently have an unreleased lock. It is determined that the client currently has an unreleased lock. If the current value is an initial value, it is determined that the client does not currently have an unlocked lock.
  • each client in the case that each client has its own lock state identifier, it can determine the value of the lock state identifier corresponding to the client, if the value of the lock state corresponding to the client is The first value determines that the client currently has an unreleased lock. If the value of the lock state corresponding to the client is the second value, it is determined that the client does not currently have an unreleased lock.
  • connection identifier information corresponding to the client such as the client identifier
  • Correspondence information of the connection identifier connected to the database is still reserved for the client.
  • the client performing an operation of releasing the database connection currently owned by the client, so that the database connection is recycled to the connection pool; and a specific example, deleting the locally stored connection identifier corresponding to the client Information, such as the correspondence between the locally stored client ID and the connection identifier of the database connection.
  • the next database access request for the client will re-select the database connection from the connection pool and based on the reselected database connection. It is then executed.
  • Embodiment 2 Database access method. The method of this embodiment will be described in detail below with reference to FIG. 3.
  • FIG. 3 after the method of this embodiment is started, it waits for the database access request sent by the client, and after receiving the database access request from the client, detects the current database connection information of the client (such as the connection identifier of the database connection). Whether the information, etc.
  • the step of judging the locked SQL statement if the current database connection information of the client is empty, selecting a database connection for the client from the connection pool, and storing the selected database connection information (such as storing the database connection) Connecting the identification information, etc.), and then determining whether the SQL statement in the database access request is a locked SQL statement; and determining that the SQL statement is a locked SQL statement, the locking is performed
  • the lock name corresponding to the SQL statement is added to the lock information record table of the client, and the guest is
  • the lock status identifier corresponding to the end is set to "lock", and then, to the step of executing the SQL statement; in the case of judging that the SQL statement is not a locked SQL statement, it should continue to determine whether the SQL statement is unlocked.
  • the step of the SQL statement if it is determined that the SQL statement is not unlocked, directly to the subsequent step of executing the SQL statement; if it is determined that the SQL statement is unlocked, the lock name corresponding to the unlocked SQL statement is from the client
  • the corresponding lock information record table is deleted, and in the case of deleting the last lock name in the lock information record table, the lock status identifier of the client is set to "outside lock", and the subsequent steps of executing the SQL statement are performed.
  • the lock information record table corresponding to the client After executing the SQL statement, it is determined whether the lock information record table corresponding to the client is empty (such as determining whether the value of the lock status identifier is "locked” or "outside lock"), if the lock information corresponding to the client If the record table is empty (such as the value of the lock status identifier is "outside lock"), the database connection currently owned by the client is recycled to the connection pool, and continues to wait for the number from the client.
  • the library connection request if the lock information record table corresponding to the client is non-empty (for example, the value of the lock status identifier is "locked"), the subsequent database connection recovery step is not performed, and the database connection from the client is continuously waited for. request.
  • Embodiment 3 Database access device. The apparatus of this embodiment will be described in detail below with reference to FIG.
  • the device shown in FIG. 4 mainly includes: a receiving module 400, a determining module 410, a selecting connection module 420, a processing module 430, a connection recycling module 440, and a maintenance module 450.
  • the receiving module 400 is connected to the determining module 410; the receiving module 400 is mainly adapted to receive a database access request from the client.
  • the SQL statement in the database access request received by the receiving module 400 may be a locked SQL statement, or may be an unlocked SQL statement, or may be an SQL statement that does not involve adding and unlocking (hereinafter referred to as ordinary SQL). Statement).
  • the SQL statement here can be a MYSQL-based SQL statement, and the corresponding database in this embodiment can be a MYSQL-based database.
  • the determining module 410 is connected to the selecting connection module 420 and the processing module 430 respectively.
  • the determining module 410 is mainly configured to determine whether the client currently has a database connection, and selects the connection module 420 and the processing module. 430 provides its judgment result information separately.
  • the determining module 410 may determine, according to the locally stored information, whether the client currently has a database connection. For example, the determining module 410 determines whether the connection identifier information corresponding to the client is stored locally (eg, whether the client identifier is stored or not).
  • the correspondence relationship information of the connection identifier connected to the database if the connection identifier information corresponding to the client is stored locally (for example, the correspondence relationship information between the client identifier and the connection identifier of the database connection is locally stored), the determining module 410 determines The client currently has a database connection, and the determining module 410 triggers the processing module 430 to perform a corresponding operation; if the connection identifier information corresponding to the client is not stored locally (for example, the connection identifier of the client identifier and the database connection is not locally stored) Corresponding relationship information, the determining module 410 determines that the client does not currently have a database connection, and the determining module 410 triggers the selecting connection module 420 to perform a corresponding operation; for example, the determining module 410 determines the currently stored current database corresponding to the client.
  • the value of the connection flag such as When the value of the database connection flag is a first predetermined value (such as 1 or true, etc.), the determining module 410 determines that the client currently has a database connection, and the determining module 410 triggers the processing module 430 to perform a corresponding operation; When the value of the database connection flag is a second predetermined value (such as 0 or false, etc.), the determining module 410 determines that the client does not currently have a database connection, and the determining module 410 triggers the selection of the connection module 420 to perform a corresponding operation.
  • a first predetermined value such as 1 or true, etc.
  • the determining module 410 can also determine whether the client currently has a database connection by using other methods, and the specific manner of determining is not detailed.
  • the locally stored information may be set in any of the above modules of the embodiment, or may be stored in the apparatus of the embodiment independently of the above modules.
  • the selection connection module 420 is connected to the processing module 430 in addition to the determination module 410.
  • the selection connection module 420 is mainly adapted to select a database connection from the connection pool if the client does not currently have a database connection, and trigger
  • the processing module 430 performs a corresponding operation, such as selecting the connection module 420 to notify the processing module 430 of the connection identifier of the database connection selected by the processing module 430, and the selection connection module 420 may also provide the client identifier to the processing module 430.
  • the selection connection module 420 should select a database connection from the connection pool and provide the selected database connection to the client; that is, the selection connection module 420 allocates an established one for the client that does not currently have the database connection. And the database connection stored in the connection pool.
  • the selection connection module 420 can use an existing connection allocation policy (or a database connection selection policy) to select a database connection for the client from the connection pool.
  • the connection module 420 selects a database connection from the connection pool and provides the database connection to the client.
  • the connection identifier information of the selected database connection is stored locally, for example, the correspondence relationship between the client identifier and the connection identifier of the selected database connection is stored.
  • the connection module 420 selects a database connection from the connection pool and provides the database connection. After the client, the value of the current database connection flag set locally for the client should be set to the first predetermined value, such as 1 or true.
  • the processing module 430 is connected to the connection recovery module 440 in addition to the connection connection module 420.
  • the processing module 430 is mainly adapted to execute the database access request received by the receiving module 400 from the client based on the database connection currently owned by the client. .
  • the database access request executed by the processing module 430 may be specifically a locked SQL statement, an unlocked SQL statement, or an ordinary SQL statement.
  • the connection recovery module 440 is mainly configured to determine, according to the lock information corresponding to the locally stored client, whether the client currently has an unreleased lock after the processing module 430 performs the execution of the database access request, if the client currently has an unreleased. The connection recovery module 440 maintains the database connection that the client currently has for the client. Otherwise, the connection recovery module 440 recycles the database connection currently owned by the client to the connection pool.
  • the connection recovery module 440 determines whether the client currently has an unreleased lock according to the lock information corresponding to the client currently stored locally, and the lock information may be a lock name, a lock number, or a lock status identifier. .
  • the locally stored lock information may be set in any of the above modules of the embodiment, or may be stored in the apparatus of the embodiment independently of the above modules.
  • the connection recovery module 440 can determine whether the lock information record table corresponding to the opened client contains the lock name, if The lock information record table includes a lock name, and the connection recovery module 440 determines that the client currently has an unreleased lock. If the lock information record table does not include a lock name, the connection recovery module 440 determines the client. The terminal does not currently have an unlocked lock.
  • the connection recovery module 440 can determine whether the opened lock information record table contains the lock name corresponding to the client, if The lock information record table includes the lock name corresponding to the client, and the connection recovery module 440 determines that the client currently has an unreleased lock. If the lock information record table does not include the lock name corresponding to the client, Connection recovery module 440 determines that the client does not currently have an unlocked lock.
  • the connection recovery module 440 can determine the current value of the number of locks corresponding to the client, if the current value is not the initial value. (The initial value identifies that the client does not currently have an unlocked lock), then the connection reclamation module 440 determines that the client currently has an unreleased lock. If the current value is an initial value, the connection reclamation module 440 determines that the client is currently Does not have an unlocked lock.
  • the connection recovery module 440 can determine the value of the lock state identifier corresponding to the client, if the client corresponds to the lock state. If the value is the first value, the connection recovery module 440 determines that the client currently has an unreleased lock. If the value of the lock state corresponding to the client is the second value, the connection recovery module 440 determines the client. The terminal does not currently have an unlocked lock.
  • connection reclaiming module 440 reclaims the database connection to a specific example in the connection pool.
  • the connection reclaiming module 440 deletes the locally stored connection identification information corresponding to the client. For example, the connection reclaiming module 440 deletes the locally stored client identifier and the database. Correspondence information of the connected connection identifier.
  • the maintenance module 450 is mainly adapted to store the lock name of the lock obtained by the client when the SQL statement in the database access request is a locked SQL statement, and the SQL of the database access request.
  • the lock name of the lock released by the client is removed from the stored lock name by the execution of the unlocked SQL statement.
  • the client In the case that the SQL statement executed by the processing module 430 is a locked SQL statement, the client usually obtains a corresponding lock before/after the execution of the SQL statement.
  • the maintenance module 450 should maintain the lock information corresponding to the client. For example, the maintenance module 450 stores the lock name of the lock locally. For example, the maintenance module 450 increases the locally stored storage of the client. The number of locks, etc.; in the case of storing the lock name locally, the maintenance module 450 may add the lock name currently obtained by the client to the lock name set corresponding to the client; increase the number of locks currently owned by the client. In this case, the maintenance module 450 can increment the number of locks currently owned by the client by one.
  • the maintenance module 450 when the lock name currently obtained by the client is added to the lock name set corresponding to the client, the maintenance module 450 should correspondingly set the client. The value of the lock status identifier corresponding to the end.
  • the client will release the corresponding lock.
  • the client requests to execute the SQL statement of SELECT RELEASE_LOCK('lock1').
  • the client releases the currently owned one. Lock lock1.
  • the maintenance module 450 when the client releases a lock or locks that it currently has, the maintenance module 450 should also maintain the lock information corresponding to the client; for example, delete the lock name of the lock that has been stored locally, and then The number of locks currently owned by the client stored locally is reduced; in the case of deleting the lock name, the maintenance module 450 may delete the lock name of the lock currently released by the client from the set of lock names corresponding to the client. In the case of reducing the number of locks currently owned by the client, the maintenance module 450 may decrement the number of locks currently owned by the client by one.
  • the maintenance module 450 when the lock name of the lock currently released by the client is deleted from the lock name set corresponding to the client, the maintenance module 450 should be correspondingly set.
  • the value of the lock status identifier corresponding to the client if there is no lock name in the lock name set corresponding to the client, the maintenance module 450 sets the lock status identifier to indicate that the client is currently in the lock state. For example, when there is at least one lock name in the set of lock names corresponding to the client, the maintenance module 450 sets the lock status identifier to a value indicating that the client is in the lock state.
  • the maintenance module 450 shall not perform the related maintenance operation of the lock information corresponding to the client for the SQL statement. .
  • the lock name set in this embodiment may be specifically expressed in the form of a lock information record table; the specific example of the lock information record table and the specific process of the maintenance operation performed on the lock information record table are as described in the foregoing method embodiment, The description will not be repeated here.
  • the specific process of the maintenance module 450 for maintaining the lock information corresponding to the client may be executed before the processing module 430 executes the database access request, or may be executed after the processing module 430 performs the database access request.
  • the possibility that the maintenance module 4450 maintains the lock information process and the processing module 430 performs a database access request in parallel is also not excluded.
  • modules in the devices of the embodiments can be adaptively changed and placed in one or more devices different from the embodiment.
  • the modules or units or components of the embodiments may be combined into one module or unit or component, and further they may be divided into a plurality of sub-modules or sub-units or sub-components.
  • any combination of the features disclosed in the specification, including the accompanying claims, the abstract and the drawings, and any methods so disclosed, or All processes or units of the device are combined.
  • Each feature disclosed in this specification (including the accompanying claims, the abstract and the drawings) may be replaced by alternative features that provide the same, equivalent or similar purpose.
  • the various component embodiments of the present invention may be implemented in hardware, or in a software module running on one or more processors, or in a combination thereof.
  • a microprocessor or digital signal processor may be used in practice to implement some or all of the functionality of some or all of the components of the database access device in accordance with embodiments of the present invention.
  • the invention can also be implemented as a device or device program (e.g., a computer program and a computer program product) for performing some or all of the methods described herein.
  • a program implementing the invention may be stored on a computer readable medium or may be in the form of one or more signals. Such signals may be downloaded from an Internet website, provided on a carrier signal, or provided in any other form.
  • Figure 5 illustrates an electronic device in which the database access method of the present invention can be implemented.
  • the electronic device conventionally includes a processor 510 and a computer program product or computer readable medium in the form of a memory 520.
  • the memory 520 may be an electronic memory such as a flash memory, an EEPROM (Electrically Erasable Programmable Read Only Memory), an EPROM, a hard disk, or a ROM.
  • Memory 520 has a memory space 530 for program code 531 for performing any of the method steps described above.
  • the storage for program code is empty.
  • the interleave 530 can include various program codes 531 for implementing the various steps in the above methods, respectively.
  • the program code can be read from or written to one or more computer program products.
  • These computer program products include program code carriers such as hard disks, compact disks (CDs), memory cards or floppy disks.
  • Such computer program products are typically portable or fixed storage units as described with reference to FIG.
  • the storage unit may have a storage section or a storage space or the like arranged similarly to the storage 520 in the electronic device of FIG.
  • the program code can be compressed, for example, in an appropriate form.
  • the storage unit comprises a program 531' for performing the steps of the method according to the invention, i.e. code that can be read by a processor, such as 510, which when executed by the electronic device causes the electronic device to perform the above Each step in the described method.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Mathematical Physics (AREA)
  • Computational Linguistics (AREA)

Abstract

本发明公开了一种数据库访问方法和装置;其中的方法包括:接收来自客户端的数据库访问请求;判断所述客户端当前是否具有数据库连接;基于所述客户端当前具有的数据库连接执行所述数据库访问请求;在所述数据库访问请求执行完成后,根据存储的所述客户端对应的锁信息判断所述客户端当前是否具有未释放的锁;如果所述客户端当前具有未释放的锁,则为所述客户端保持所述数据库连接,否则,将所述数据库连接回收至所述连接池中。

Description

数据库访问方法和装置 技术领域
本发明涉及数据库访问技术,具体涉及一种数据库访问方法以及数据库访问装置。
背景技术
客户端对数据库的访问通常包括建立数据库连接、打开数据库、数据存取以及关闭数据库连接等操作,其中,建立数据库连接以及打开数据库操作等会消耗大量的系统资源以及时间。目前,为了节约系统资源以及时间,在数据库访问过程中引入了连接池技术。
基于连接池的数据库访问的实现方式通常为:在连接池中存储多条已经建立好的数据库连接,针对来自客户端的数据库访问请求,从连接池中获取一条数据库连接,并将该数据库连接提供给客户端;在数据库访问请求执行完成后,该数据库连接被回收至连接池中;后续,针对来自客户端(可以为前次发送数据库访问请求的客户端,也可以为其他客户端)的数据库访问请求,从连接池中获取一条数据库连接(可以是前次获取的数据库连接,也可以为其他数据库连接),并将该数据库连接提供给客户端,同样的,在数据库访问请求执行完成后,该数据库连接被回收至连接池中。
由上述描述可知,在引入连接池技术后,在数据库的数据存取操作完成后,客户端所使用的数据库连接并没有被关闭,而是被存储在连接池中,且存储在连接池中的数据库连接会被再次使用,即连接池中的数据库连接得到了复用,避免了反复建立数据库连接以及反复关闭数据库连接的操作,从而节约了系统资源以及时间。
由于数据库访问请求中的SQL语句可能是加锁的SQL语句、解锁的SQL语句或者不涉及加解锁的SQL语句(可以称为普通的SQL语句),因此,在引入连接池技术后,数据库访问会存在锁权限管理疏漏问题;一个具体的例子,图1中,第一客户端通过连接池中的第一数据库连接与MySQL数据库连接,第二客户端通过连接池中的第二数据库连接与MySQL数据库连接;第一客户端请求执行SELECT GET_LOCK(‘lock1’,0)的SQL语句,第二客户端请求执行SELECT GET_LOCK(‘lock2’,0)的SQL语句;这两条SQL语句被执行后,第一客户端获得锁lock1,第二客户端获得锁lock2,且第一数据库连接和第二数据库连接被回收到连接池中;在第一客户端和第二客户端请求执行SELECT RELEASE_LOCK(‘lock2’)及SELECT RELEASE_LOCK(‘lock1’)的SQL语句之前, 如果第一客户端请求执行SELECT GET_LOCK(‘lock2’,0)的SQL语句,或者第二客户端请求执行SELECT GET_LOCK(‘lock1’,0)的SQL语句,则由于锁的状态是和数据库连接绑定的,因此,在为第一客户端分配的数据库连接为前述第一数据库连接,为第二客户端分配的数据库连接为前述第二数据库连接,则第一客户端会获得锁lock2,第二客户端会获得锁lock1。然而,正确的处理结果应该为第一客户端和第二客户端均被阻塞,从而第一客户端不能够获得锁lock2,第二客户端不能够获得锁lock1。
为了避免数据库访问中的锁权限管理疏漏的问题,现有的解决方案通常为:使客户端在运行期间独占一个数据库连接,直到该客户端退出后,该数据库连接才会被回收至连接池中,这样,在客户端运行期间,该客户端所有加锁的SQL语句、解锁的SQL语句以及普通的SQL语句都会基于同一数据库连接而被执行,从而该客户端获得的锁不会被其他客户端获得。
发明人在实现本发明过程中发现,上述基于独占数据库连接的解决方案会使数据库连接的复用度大大降低,具体而言,客户端在运行期间除了请求执行SQL语句之外还需要执行其他逻辑,从而在客户端请求执行两条SQL语句之间会存在时间间隔,在该时间间隔内,客户端所占用的数据库连接既没有被回收到连接池中,也没有被该客户端充分利用。由上述描述可知,数据库连接的复用度有待于进一步提高。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据库访问方法、相应的数据库访问装置、计算机程序以及计算机可读介质。
依据本发明的一个方面,提供了一种数据库访问方法,该方法包括:接收来自客户端的数据库访问请求;判断所述客户端当前是否具有数据库连接;基于所述客户端当前具有的数据库连接执行所述数据库访问请求;在所述数据库访问请求执行完成后,根据存储的所述客户端对应的锁信息判断所述客户端当前是否具有未释放的锁;如果所述客户端当前具有未释放的锁,则为所述客户端保持所述数据库连接,否则,将所述数据库连接回收至所述连接池中。
根据本发明的另一方面,提供了一种数据库访问装置,其中,所述装置包括:处理器,用于接收来自客户端的数据库访问请求;判断所述客户端当前是否具有数据库连接;基于所述客户端当前具有的数据库连接执行所述数据库访问请求;在所述数据库访问请求执行完成后,根据存储的所述客户端对应的锁信息判断所述客户端当前是否具有未释放的锁,如果所述客户端当前具有未释 放的锁,则为所述客户端保持所述数据库连接,否则,将所述数据库连接回收至所述连接池中。
根据本发明的另一个方面,提供了一种计算机程序,其包括计算机可读代码,当电子设备运行所述计算机可读代码时,导致所述的数据库访问方法被执行。
根据本发明的再一个方面,提供了一种计算机可读介质,其中存储了如上所述的计算机程序。
本发明的数据库访问方法和装置通过在客户端的数据库访问请求执行完成后,判断该客户端当前是否具有未释放的锁,且在确定出该客户端当前具有未释放的锁的情况下,不将该数据库连接回收至连接池中,而是继续由该客户端占用;这样,可以避免该客户端具有的锁由于与数据库连接绑定且该数据库连接被分配给其他客户端而被其他客户端获得的可能性;从而本发明在解决了连接池中的数据库连接复用而带来的锁权限问题的情况下,在一定程度上提高了连接池内的数据库连接的复用度。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。说明书附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了数据库访问的网络构架示意图;
图2示出了根据本发明实施例一的数据库访问方法流程图;
图3示出了根据本发明实施例二的数据库访问方法流程图;
图4示出了根据本发明实施例三的数据库访问装置示意图;
图5示出了用于执行本发明的方法的电子设备的框图;以及
图6示出了用于保持或者携带实现根据本发明的方法的程序代码的存储单元示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被 这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
实施例一、数据库访问方法。下面结合图2对本实施例的方法进行详细说明。
图2中,S200、接收来自客户端的数据库访问请求。
具体的,该数据库访问请求中的SQL语句可以为加锁的SQL语句,也可以为解锁的SQL语句,还可以为不涉及加解锁的SQL语句(下述简称为普通的SQL语句)。这里的SQL语句可以为基于MYSQL的SQL语句。
S210、判断该客户端当前是否具有数据库连接,在确定出该客户端当前不具有数据库连接的情况下,到S220,在确定出该客户端当前具有数据库连接的情况下,到S230。
具体的,本实施例可以根据本地存储的信息来判断该客户端当前是否具有数据库连接,例如,判断本地是否存储有与该客户端对应的连接标识信息(如是否存储有客户端标识与数据库连接的连接标识的对应关系信息),如果本地存储有与该客户端对应的连接标识信息(如本地存储有客户端标识与数据库连接的连接标识的对应关系信息),则表示该客户端当前具有数据库连接,如果本地未存储有与该客户端对应的连接标识信息(如本地没有存储客户端标识与数据库连接的连接标识的对应关系信息),则表示该客户端当前不具有数据库连接;再例如,判断本地存储的该客户端对应的当前数据库连接标志位的取值,在确定出该数据库连接标志位的取值为第一预定值(如1或者true等)时,则表示该客户端当前具有数据库连接,在确定出该数据库连接标志位的取值为第二预定值(如0或者false等)时,则表示该客户端当前不具有数据库连接。
本实施例还可以采用其他方式来判断该客户端当前是否具有数据库连接,具体的判断方式不再详细举例说明。
S220、从连接池中选取数据库连接,并提供给该客户端。
具体的,在确定出该客户端当前不具有数据库连接的情况下,应从连接池中选取一条数据库连接,并将该选取的数据库连接提供给该客户端;也就是说,本实施例会为当前不具有数据库连接的该客户端分配一条已建立好的且存储于连接池中的数据库连接。本实施例可以采用现有的连接分配策略(或者称为数据库连接选取策略)从连接池中为该客户端选取一条数据库连接。
在前述步骤S210中,如果根据本地存储的与该客户端对应的连接标识信息来判断该客户端当前是否具有数据库连接,则在本步骤中,从连接池中选取一条数据库连接并提供给该客户端之后,应在本地存储本次选取的数据库连接的连接标识信息,如存储该客户端标识与本次选取的数据库连接的连接标识的对 应关系信息。
在前述步骤S210中,如果根据本地存储的为该客户端设置的当前数据库连接标志位的取值来判断该客户端当前是否具有数据库连接,则在本步骤中,从连接池中选取一条数据库连接并提供给该客户端之后,应将本地存储的为该客户端设置的当前数据库连接标志位的取值设置为第一预定值,如设置为1或者true等。
S230、基于客户端当前具有的数据库连接执行上述数据库访问请求。
具体的,客户端当前具有的数据库连接可以是利用前述步骤S220为该客户端分配的数据库连接,也可以是不需要执行前述步骤S220,而该客户端已经具有的数据库连接。
基于该客户端当前具有的数据库连接执行数据库访问请求可以具体为执行加锁的SQL语句,也可以为执行解锁的SQL语句,还可以为执行普通的SQL语句。
在本次执行的SQL语句为加锁的SQL语句的情况下,通常在该SQL语句执行前/后,客户端会获得相应的锁,例如,客户端请求执行SELECT GET_LOCK(‘lock1’,0)的SQL语句,该SQL语句在被执行前,客户端获得锁lock1。
在本实施例中,在客户端获得锁时,应维护该客户端对应的锁信息,例如,存储该锁的锁名称,再如,增加其存储的该客户端当前拥有的锁的数量等;在存储锁名称的情况下,可以将客户端当前获得的锁名称添加在该客户端对应的锁名称集合中;在增加该客户端当前拥有的锁的数量的情况下,可以将该客户端当前拥有的锁的数量加1。另外,在本实施例中的客户端还对应有锁状态标识的情况下,在将客户端当前获得的锁名称添加在该客户端对应的锁名称集合中时,应对应设置该客户端对应的锁状态标识的取值。上述锁状态标识用于表示其对应的客户端当前是否拥有锁,即可以表示出该客户端当前是处于锁中,还是处于锁外。该锁状态标识可以是布尔型变量。需要特别说明的是,本实施例中的锁状态标识并不能用于表示客户端当前所拥有的锁的数量。
在本次执行的SQL语句为解锁的SQL语句的情况下,在该SQL语句执行前/后,客户端会释放相应的锁,例如,客户端请求执行SELECT RELEASE_LOCK(‘lock1’)的SQL语句,该SQL语句在被执行后,客户端释放其当前拥有的锁lock1。
在本实施例中,在客户端释放其当前拥有的一个锁或者多个锁时,同样应维护该客户端对应的锁信息;如删除已存储的该锁的锁名称,再如,减小其存储的该客户端当前拥有的锁的数量等;在删除锁名称的情况下,可以从该客户端对应的锁名称集合中删除该客户端当前释放的锁的锁名称;在减小该客户端 当前拥有的锁的数量的情况下,可以将该客户端当前拥有的锁的数量减1。另外,在本实施例中的客户端还对应有锁状态标识的情况下,在将客户端当前释放的锁的锁名称从该客户端对应的锁名称集合中删除时,应对应设置该客户端对应的锁状态标识的取值,如该客户端对应的锁名称集合中没有任何锁名称时,将锁状态标识设置为表示该客户端目前处于锁外状态的取值,再如,该客户端对应的锁名称集合中还存在至少一个锁名称时,将锁状态标识设置为表示该客户端处于锁中状态的取值。
在本次执行的SQL语句为普通的SQL语句的情况下,在该SQL语句执行完成前/后,应不会针对该SQL语句执行与该客户端对应的锁信息的相关操作。
本实施例中的锁名称集合可以具体表现为锁信息记录表的形式;一个具体的例子,每一个客户端分别对应一个锁信息记录表,如每一个客户端标识分别对应有一个锁信息记录表,该锁信息记录表中至少包含有锁名称;如果本次执行的SQL语句为加锁的SQL语句,则在该SQL语句执行前/后,可以根据客户端标识查找到相应的锁信息记录表,并将该客户端当前获得的锁名称添加在查找到的该锁信息记录表中;如果本次执行的SQL语句为解锁的SQL语句,则在该SQL语句执行前/后,可以根据客户端标识查找到相应的锁信息记录表,并从查找到的该锁信息记录表中删除该客户端当前释放的锁的锁名称。另一个具体的例子,所有客户端对应同一个锁信息记录表,该锁信息记录表中应至少包含有客户端标识和锁名称;在该锁信息记录表中的一条记录包含有一个客户端当前拥有的所有锁的锁名称的情况下,如果本次执行的SQL语句为加锁的SQL语句,则在该SQL语句执行前/后,可以根据该客户端的客户端标识在锁信息记录表中查找相应的记录,并在查找到的该记录中追加该客户端当前获得的锁的锁名称;如果本次执行的SQL语句为解锁的SQL语句,则在该SQL语句执行前/后,可以根据客户端标识在锁信息记录表中查找相应的记录,并从查找到的该记录中删除该客户端当前释放的锁的锁名称。再一个具体的例子,所有客户端对应同一个锁信息记录表,该锁信息记录表中应至少包含有客户端标识和锁名称;在客户端拥有N个锁而该客户端在锁信息记录表中对应有N条记录的情况下,如果本次执行的SQL语句为加锁的SQL语句,则在该SQL语句执行前/后,可以根据该客户端的客户端标识和该客户端当前获得的锁的锁名称在锁信息记录表中追加一条记录;如果本次执行的SQL语句为解锁的SQL语句,则在该SQL语句执行前/后,可以根据客户端标识和该客户端当前释放的锁的锁名称在锁信息记录表中查找匹配的记录,并将查找到的该匹配的记录从锁信息记录表中删除。
在本实施例为每个客户端分别设置一个锁状态标识的情况下,锁状态标识的具体取值应与锁名称在锁名称集合中的添加操作以及删除操作相关。
一个具体的例子,在每一个客户端分别对应有一个锁信息记录表的情况下,每个锁信息记录表分别对应有一个锁状态标识,该锁状态标识可以表示出与其对应的锁信息记录表为空,还是为非空;在本次执行的SQL语句为加锁的SQL语句的情况下,在该SQL语句执行完成,且将该客户端当前获得的锁名称添加在该客户端对应的锁信息记录表中之后,应将该锁状态标识的取值设置为第一值(如1或者true),以表示该锁信息记录表为非空,即该客户端当前拥有至少一个锁;在本次执行的SQL语句为解锁的SQL语句的情况下,在该SQL语句执行完成,且从该客户端对应的锁信息记录表中删除该客户端当前释放的锁的锁名称之后,应将该锁状态标识的取值设置为第二值(如0或者false),以表示该锁信息记录表为空,即该客户端当前没有拥有锁。
另一个具体的例子,在本实施例中的所有客户端对应同一个锁信息记录表的情况下,每个客户端分别对应有一个锁状态标识,锁状态标识可以表示出锁信息记录表中是否包含有该客户端标识对应的锁名称;在本次执行的SQL语句为加锁的SQL语句的情况下,在该SQL语句执行完成,且将该客户端当前获得的锁名称添加在该客户端对应的锁信息记录表中之后,应将该锁状态标识的取值设置为第一值(如1或者true),以表示该锁信息记录表中包含有该客户端标识对应的锁名称,即该客户端当前拥有至少一个锁;在本次执行的SQL语句为解锁的SQL语句的情况下,在该SQL语句执行完成,且从该客户端对应的锁信息记录表中删除该客户端当前释放的锁的锁名称之后,应判断该锁信息记录中是否仍包含有该客户端对应的锁名称,如果仍然包含有该客户端对应的锁名称,则将该客户端对应的锁状态标识的取值设置为第一值(如1或者true),以表示该锁信息记录表中包含有该客户端对应的锁名称,即该客户端当前拥有至少一个锁;如果该锁信息记录表中不再包含有该客户端对应的锁名称,则应将该客户端对应的锁状态标识的取值设置为第二值(如0或者false),以表示该锁信息记录表中没有包含有该客户端对应的锁名称,即该客户端当前没有拥有锁。
需要特别说明的是,上述维护该客户端对应的锁信息的具体过程可以在执行数据库访问请求之前执行,也可以在执行数据库访问请求之后执行,当然,本实施例也不排除锁信息维护步骤与数据库访问请求执行步骤并行执行的可能性。
S240、在数据库访问请求执行完成后,根据存储的该客户端对应的锁信息判断该客户端当前是否具有未释放的锁,如果该客户端当前具有未释放的锁,则到S250,如果该客户端当前不具有未释放的锁,则到S260。
具体的,本实施例是根据当前已存储的该客户端对应的锁信息来判断该客 户端当前是否具有未释放的锁,该锁信息可以为锁名称、锁的数量或者锁状态标识。
一个具体的例子,在每一个客户端分别对应有各自的一个锁信息记录表的情况下,本实施例可以判断已打开的该客户端对应的锁信息记录表中是否包含有锁名称,如果该锁信息记录表中包含有锁名称,则确定出该客户端当前具有未释放的锁,如果该锁信息记录表中没有包含有锁名称,则确定出该客户端当前不具有未释放的锁。
另一个具体的例子,在所有的客户端均对应同一个锁信息记录表的情况下,本实施例可以判断已打开的锁信息记录表中是否包含有该客户端对应的锁名称,如果该锁信息记录表中包含有该客户端对应的锁名称,则确定出该客户端当前具有未释放的锁,如果该锁信息记录表中没有包含该客户端对应的锁名称,则确定出该客户端当前不具有未释放的锁。
第三个具体的例子,在每一个客户端分别对应有各自的锁的数量的情况下,本实施例可以判断该客户端对应的锁的数量的当前值,如果该当前值不为初始值(初始值标识客户端当前不具有未释放的锁),则确定出该客户端当前具有未释放的锁,如果该当前值为初始值,则确定出该客户端当前不具有未释放的锁。
第四个具体的例子,在每一个客户端分别对应有各自的锁状态标识的情况下,可以判断该客户端对应的锁状态标识的取值,如果该客户端对应的锁状态的取值为第一值,则确定出该客户端当前具有未释放的锁,如果该客户端对应的锁状态的取值为第二值,则确定出该客户端当前不具有未释放的锁。
S250、为该客户端保持该数据库连接。
具体的,针对该客户端,不执行释放该客户端当前具有的数据库连接的操作;一个具体的例子,仍为该客户端保留本地存储的与该客户端对应的连接标识信息,如客户端标识与数据库连接的连接标识的对应关系信息。
由于该数据库连接仍然被保持而不是被回收至连接池中,因此,该客户端的下一条数据库访问请求仍然会基于该数据库连接而被执行。
S260、将数据库连接回收至连接池中。
具体的,针对该客户端,执行释放该客户端当前具有的数据库连接的操作,以使该数据库连接被回收至连接池中;一个具体的例子,删除本地存储的与该客户端对应的连接标识信息,如删除本地存储的客户端标识与数据库连接的连接标识的对应关系信息。
由于该数据库连接被回收至连接池中,因此,针对该客户端的下一条数据库访问请求,会重新从连接池中选取数据库连接,并基于重新选取的数据库连 接而被执行。
由上述描述可知,本实施例仅在客户端当前仍具有锁的情况下,才不会将该客户端对应的数据库连接回收至连接池中,由于客户端的数据库访问请求中的加锁SQL语句的数量在所有SQL语句中所占的比例很低,因此,本实施例对数据库连接的复用度的影响非常小。
实施例二、数据库访问方法。下面结合图3对本实施例的方法进行详细说明。
图3中,本实施例的方法启动后,一直等待客户端发送来的数据库访问请求,在接收到来自客户端的数据库访问请求后吗,检测该客户端的当前数据库连接信息(如数据库连接的连接标识信息等)是否为空,如果该客户端的当前数据库连接信息不为空,则跳过从连接池中为该客户端选取一条数据库连接的步骤,直接到后续的判断数据库访问请求中的SQL语句是否为加锁的SQL语句的判断步骤;如果该客户端的当前数据库连接信息为空,则从连接池中为该客户端选取一条数据库连接,并存储该选取的数据库连接信息(如存储该数据库连接的连接标识信息等),之后,到后续的判断数据库访问请求中的SQL语句是否为加锁的SQL语句的判断步骤;在判断出该SQL语句为加锁的SQL语句的情况下,将该加锁的SQL语句对应的锁名称添加在该客户端的锁信息记录表中,并将该客户端对应的锁状态标识设置为“锁中”,之后,到执行该SQL语句的步骤;在判断出该SQL语句不是加锁的SQL语句的情况下,应继续后续的判断该SQL语句是否为解锁的SQL语句的步骤,如果判断出不是解锁的SQL语句,则直接到后续的执行该SQL语句的步骤;如果判断出是解锁的SQL语句,则将该解锁的SQL语句对应的锁名称从该客户端对应的锁信息记录表中删除,并在删除该锁信息记录表中最后一个锁名称的情况下,将该客户端的锁状态标识设置为“锁外”,到后续的执行该SQL语句的步骤;在执行该SQL语句后,判断该客户端对应的锁信息记录表是否为空(如判断锁状态标识的取值为“锁中”还是“锁外”),如果该客户端对应的锁信息记录表为空(如锁状态标识的取值为“锁外”),则将该客户端当前具有的该数据库连接回收到连接池中,并继续等待来自客户端的数据库连接请求;如果该客户端对应的锁信息记录表为非空(如锁状态标识的取值为“锁中”),则不执行后续的数据库连接回收步骤,并继续等待来自客户端的数据库连接请求。
实施例三、数据库访问装置。下面结合图4对本实施例的装置进行详细说明。
图4中示出的装置主要包括:接收模块400、判断模块410、选取连接模块420、处理模块430、连接回收模块440以及维护模块450。
接收模块400与判断模块410连接;接收模块400主要适于接收来自客户端的数据库访问请求。
具体的,接收模块400接收到的数据库访问请求中的SQL语句可以为加锁的SQL语句,也可以为解锁的SQL语句,还可以为不涉及加解锁的SQL语句(下述简称为普通的SQL语句)。这里的SQL语句可以为基于MYSQL的SQL语句,对应的本实施例中的数据库可以为基于MYSQL的数据库。
判断模块410除了与接收模块400连接之外,还与选取连接模块420以及处理模块430分别连接;判断模块410主要适于判断上述客户端当前是否具有数据库连接,并向选取连接模块420以及处理模块430分别提供其判断结果信息。
具体的,判断模块410可以根据本地存储的信息来判断该客户端当前是否具有数据库连接,例如,判断模块410判断本地是否存储有与该客户端对应的连接标识信息(如是否存储有客户端标识与数据库连接的连接标识的对应关系信息),如果本地存储有与该客户端对应的连接标识信息(如本地存储有客户端标识与数据库连接的连接标识的对应关系信息),则判断模块410判断出该客户端当前具有数据库连接,判断模块410触发处理模块430执行相应的操作;如果本地未存储有与该客户端对应的连接标识信息(如本地没有存储客户端标识与数据库连接的连接标识的对应关系信息),则判断模块410判断出该客户端当前不具有数据库连接,判断模块410触发选取连接模块420执行相应的操作;再例如,判断模块410判断本地存储的该客户端对应的当前数据库连接标志位的取值,如果该数据库连接标志位的取值为第一预定值(如1或者true等)时,则判断模块410判断出该客户端当前具有数据库连接,判断模块410触发处理模块430执行相应的操作;如果该数据库连接标志位的取值为第二预定值(如0或者false等)时,则判断模块410判断出该客户端当前不具有数据库连接,判断模块410触发选取连接模块420执行相应的操作。
判断模块410还可以采用其他方式来判断该客户端当前是否具有数据库连接,具体的判断方式不再详细举例说明。
上述本地存储的信息可以设置于本实施例的上述任一模块中,也可以独立于上述模块而存储在本实施例的装置中。
选取连接模块420除了与判断模块410连接之外,还与处理模块430连接;选取连接模块420主要适于在上述客户端当前不具有数据库连接的情况下,从连接池中选取数据库连接,并触发处理模块430执行相应的操作,如选取连接模块420通知处理模块430其选取的数据库连接的连接标识,选取连接模块420还可以将客户端标识也一并提供给处理模块430。
具体的,在判断模块410确定出该客户端当前不具有数据库连接的情况下, 选取连接模块420应从连接池中选取一条数据库连接,并将该选取的数据库连接提供给该客户端;也就是说,选取连接模块420会为当前不具有数据库连接的客户端分配一条已建立好的且存储于连接池中的数据库连接。选取连接模块420可以采用现有的连接分配策略(或者称为数据库连接选取策略)从连接池中为该客户端选取一条数据库连接。
如果判断模块410根据本地存储的与该客户端对应的连接标识信息来判断该客户端当前是否具有数据库连接,则选取连接模块420从连接池中选取一条数据库连接并提供给该客户端之后,应在本地存储本次选取的数据库连接的连接标识信息,如存储该客户端标识与本次选取的数据库连接的连接标识的对应关系信息。
如果判断模块410根据本地存储的为该客户端设置的当前数据库连接标志位的取值来判断该客户端当前是否具有数据库连接,则选取连接模块420从连接池中选取一条数据库连接并提供给该客户端之后,应将本地存储的为该客户端设置的当前数据库连接标志位的取值设置为第一预定值,如设置为1或者true等。
处理模块430除了与选取连接模块420连接之外,还与连接回收模块440连接,处理模块430主要适于基于上述客户端当前具有的数据库连接执行接收模块400接收到的来自上述客户端的数据库访问请求。
具体的,处理模块430所执行的数据库访问请求可以具体为加锁的SQL语句,也可以为解锁的SQL语句,还可以为普通的SQL语句。
连接回收模块440主要适于在处理模块430针对上述数据库访问请求执行完成后,根据本地存储的客户端对应的锁信息判断该客户端当前是否具有未释放的锁,如果该客户端当前具有未释放的锁,则连接回收模块440为该客户端保持其当前具有的数据库连接,否则,连接回收模块440将客户端当前具有的数据库连接回收至连接池中。
具体的,连接回收模块440是根据当前本地已存储的该客户端对应的锁信息来判断该客户端当前是否具有未释放的锁,该锁信息可以为锁名称、锁的数量或者锁状态标识等。上述本地存储的锁信息可以设置于本实施例的上述任一模块中,也可以独立于上述模块而存储在本实施例的装置中。
一个具体的例子,在每一个客户端分别对应有各自的一个锁信息记录表的情况下,连接回收模块440可以判断已打开的该客户端对应的锁信息记录表中是否包含有锁名称,如果该锁信息记录表中包含有锁名称,则连接回收模块440确定出该客户端当前具有未释放的锁,如果该锁信息记录表中没有包含有锁名称,则连接回收模块440确定出该客户端当前不具有未释放的锁。
另一个具体的例子,在所有的客户端均对应同一个锁信息记录表的情况下,连接回收模块440可以判断已打开的锁信息记录表中是否包含有该客户端对应的锁名称,如果该锁信息记录表中包含有该客户端对应的锁名称,则连接回收模块440确定出该客户端当前具有未释放的锁,如果该锁信息记录表中没有包含该客户端对应的锁名称,则连接回收模块440确定出该客户端当前不具有未释放的锁。
第三个具体的例子,在每一个客户端分别对应有各自的锁的数量的情况下,连接回收模块440可以判断该客户端对应的锁的数量的当前值,如果该当前值不为初始值(初始值标识客户端当前不具有未释放的锁),则连接回收模块440确定出客户端当前具有未释放的锁,如果该当前值为初始值,则连接回收模块440确定出该客户端当前不具有未释放的锁。
第四个具体的例子,在每一个客户端分别对应有各自的锁状态标识的情况下,连接回收模块440可以判断该客户端对应的锁状态标识的取值,如果该客户端对应的锁状态的取值为第一值,则连接回收模块440确定出该客户端当前具有未释放的锁,如果该客户端对应的锁状态的取值为第二值,则连接回收模块440确定出该客户端当前不具有未释放的锁。
连接回收模块440将数据库连接回收至连接池中的一个具体的例子,连接回收模块440删除本地存储的与该客户端对应的连接标识信息,如连接回收模块440删除本地存储的客户端标识与数据库连接的连接标识的对应关系信息。
维护模块450主要适于在数据库访问请求中的SQL语句为加锁的SQL语句的情况下,存储加锁的SQL语句的执行而使客户端获得的锁的锁名称;在数据库访问请求中的SQL语句为解锁的SQL语句的情况下,从存储的锁名称中删除解锁的SQL语句的执行而使客户端释放的锁的锁名称。
在处理模块430本次执行的SQL语句为加锁的SQL语句的情况下,通常在该SQL语句执行前/后,客户端会获得相应的锁。在客户端获得锁时,维护模块450应维护该客户端对应的锁信息,例如,维护模块450在本地存储该锁的锁名称,再如,维护模块450增加本地存储的该客户端当前拥有的锁的数量等;在本地存储锁名称的情况下,维护模块450可以将客户端当前获得的锁名称添加在该客户端对应的锁名称集合中;在增加该客户端当前拥有的锁的数量的情况下,维护模块450可以将该客户端当前拥有的锁的数量加1。
另外,在本实施例中的客户端还对应有锁状态标识的情况下,在将客户端当前获得的锁名称添加在该客户端对应的锁名称集合中时,维护模块450应对应设置该客户端对应的锁状态标识的取值。
在处理模块430本次执行的SQL语句为解锁的SQL语句的情况下,通常在该 SQL语句执行前/后,客户端会释放相应的锁,例如,客户端请求执行SELECT RELEASE_LOCK(‘lock1’)的SQL语句,该SQL语句在被处理模块430执行后,客户端释放其当前拥有的锁lock1。
在本实施例中,在客户端释放其当前拥有的一个锁或多个锁时,维护模块450同样应维护该客户端对应的锁信息;如删除本地已存储的该锁的锁名称,再如,减小本地存储的该客户端当前拥有的锁的数量等;在删除锁名称的情况下,维护模块450可以从该客户端对应的锁名称集合中删除该客户端当前释放的锁的锁名称;在减小该客户端当前拥有的锁的数量的情况下,维护模块450可以将该客户端当前拥有的锁的数量减1。另外,在本实施例中的客户端还对应有锁状态标识的情况下,在将客户端当前释放的锁的锁名称从该客户端对应的锁名称集合中删除时,维护模块450应对应设置该客户端对应的锁状态标识的取值,如在该客户端对应的锁名称集合中没有任何锁名称时,维护模块450将锁状态标识设置为表示该客户端目前处于锁外状态的取值,再如,在该客户端对应的锁名称集合中还存在至少一个锁名称时,维护模块450将锁状态标识设置为表示该客户端处于锁中状态的取值。
在处理模块本次执行的SQL语句为普通的SQL语句的情况下,在该SQL语句执行前/后,维护模块450应不会针对该SQL语句执行与该客户端对应的锁信息的相关维护操作。
本实施例中的锁名称集合可以具体表现为锁信息记录表的形式;锁信息记录表的具体例子以及针对该锁信息记录表所执行的维护操作的具体过程如上述方法实施例中的描述,在此不再重复说明。
需要特别说明的是,维护模块450维护该客户端对应的锁信息的具体过程可以在处理模块430执行数据库访问请求之前执行,也可以在处理模块430执行数据库访问请求之后执行,当然,本实施例也不排除维护模块4450维护锁信息过程与处理模块430执行数据库访问请求并行执行的可能性。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或 多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的数据库访问装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
例如,图5示出了可以实现本发明的数据库访问方法的电子设备。该电子设备传统上包括处理器510和以存储器520形式的计算机程序产品或者计算机可读介质。存储器520可以是诸如闪存、EEPROM(电可擦除可编程只读存储器)、EPROM、硬盘或者ROM之类的电子存储器。存储器520具有用于执行上述方法中的任何方法步骤的程序代码531的存储空间530。例如,用于程序代码的存储空 间530可以包括分别用于实现上面的方法中的各种步骤的各个程序代码531。这些程序代码可以从一个或者多个计算机程序产品中读出或者写入到这一个或者多个计算机程序产品中。这些计算机程序产品包括诸如硬盘,紧致盘(CD)、存储卡或者软盘之类的程序代码载体。这样的计算机程序产品通常为如参考图6所述的便携式或者固定存储单元。该存储单元可以具有与图5的电子设备中的存储器520类似布置的存储段或者存储空间等。程序代码可以例如以适当形式进行压缩。通常,存储单元包括用于执行根据本发明的方法步骤的程序531’,即可以由例如诸如510之类的处理器读取的代码,这些代码当由电子设备运行时,导致该电子设备执行上面所描述的方法中的各个步骤。
本文中所称的“一个实施例”、“实施例”或者“一个或者多个实施例”意味着,结合实施例描述的特定特征、结构或者特性包括在本发明的至少一个实施例中。此外,请注意,这里“在一个实施例中”的词语例子不一定全指同一个实施例。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的一部分或者全部的情况下被实施。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
应该注意的是,上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”或“包括”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
此外,还应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

Claims (22)

  1. 一种数据库访问方法,其包括:
    接收来自客户端的数据库访问请求;
    判断所述客户端当前是否具有数据库连接;
    基于所述客户端当前具有的数据库连接执行所述数据库访问请求;
    在所述数据库访问请求执行完成后,根据存储的所述客户端对应的锁信息判断所述客户端当前是否具有未释放的锁;
    如果所述客户端当前具有未释放的锁,则为所述客户端保持所述数据库连接,否则,将所述数据库连接回收至所述连接池中。
  2. 如权利要求1所述的方法,其中,所述判断所述客户端当前是否具有数据库连接包括:
    判断是否记录有与所述客户端对应的连接标识信息;
    如果记录有与所述客户端对应的连接标识信息,则所述客户端当前具有数据库连接,否则,所述客户端当前不具有数据库连接。
  3. 如权利要求1所述的方法,还包括:
    在所述客户端当前不具有数据库连接的情况下,从连接池中选取数据库连接,并提供给所述客户端。
  4. 如权利要求3所述的方法,其中,在从连接池中选取数据库连接,并提供给所述客户端后,所述方法还包括:
    记录客户端标识与所述选取的数据库连接的连接标识信息的对应关系。
  5. 如权利要求1-4中任一项所述的方法,其中,所述锁信息包括:锁名称或者锁的数量或者锁状态标识。
  6. 如权利要求5所述的方法,其中,所述方法还包括:
    在所述数据库访问请求中的SQL语句为加锁的SQL语句的情况下,存储所述加锁的SQL语句的执行而使所述客户端获得的锁的锁名称;
    在所述数据库访问请求中的SQL语句为解锁的SQL语句的情况下,从存储的锁名称中删除所述解锁的SQL语句的执行而使所述客户端释放的锁的锁名称。
  7. 如权利要求6所述的方法,其中,每一客户端分别对应有各自的锁信息记录表,且所述锁名称存储于发送所述数据库访问请求的客户端所对应的锁信息记录表中。
  8. 如权利要求7所述的方法,其中,每一锁信息记录表分别对应有各自的锁状态标识,且所述锁状态标识表示锁信息记录表为空或者非空。
  9. 如权利要求8所述的方法,其中,所述方法还包括:
    在向锁信息记录表中增加锁名称后,将该锁信息记录表对应的锁状态标识 设置为非空;
    在从锁信息记录表中删除锁名称后,判断该锁信息记录表是否为空;
    如果该锁信息记录表为空,则将该锁信息记录表对应的锁状态标识设置为空,否则,将该锁信息记录表对应的锁状态标识设置为非空。
  10. 如权利要求8所述的方法,其中,所述根据存储的所述客户端对应的锁信息判断所述客户端当前是否具有未释放的锁包括:
    获取所述客户端对应的锁状态标识,在判断出所述锁状态标识表示锁信息记录表为空时,确定所述客户端当前不具有未释放的锁,否则,确定所述客户端具有未释放的锁。
  11. 一种数据库访问装置,其包括:
    处理器,用于接收来自客户端的数据库访问请求;判断所述客户端当前是否具有数据库连接;基于所述客户端当前具有的数据库连接执行所述数据库访问请求;在所述数据库访问请求执行完成后,根据存储的所述客户端对应的锁信息判断所述客户端当前是否具有未释放的锁,如果所述客户端当前具有未释放的锁,则为所述客户端保持所述数据库连接,否则,将所述数据库连接回收至所述连接池中。
  12. 如权利要求11所述的装置,其中,
    所述处理器还用于判断是否记录有与所述客户端对应的连接标识信息;如果记录有与所述客户端对应的连接标识信息,则所述客户端当前具有数据库连接,否则,所述客户端当前不具有数据库连接。
  13. 如权利要求11所述的装置,其中,
    所述处理器还用于在所述客户端当前不具有数据库连接的情况下,从连接池中选取数据库连接,并提供给所述客户端;
  14. 如权利要求13所述的装置,其中,
    所述处理器还用于在从连接池中选取数据库连接,并提供给所述客户端后,记录客户端标识与所述选取的数据库连接的连接标识信息的对应关系。
  15. 如权利要求11-14中任一项所述的装置,其中,所述锁信息包括:锁名称或者锁的数量或者锁状态标识。
  16. 如权利要求15所述的装置,其中,
    所述处理器还用于在所述数据库访问请求中的SQL语句为加锁的SQL语句的情况下,存储所述加锁的SQL语句的执行而使所述客户端获得的锁的锁名称;在所述数据库访问请求中的SQL语句为解锁的SQL语句的情况下,从存储的锁名称中删除所述解锁的SQL语句的执行而使所述客户端释放的锁的锁名称。
  17. 如权利要求16所述的装置,其中,每一客户端分别对应有各自的锁信 息记录表,且所述处理器还用于将锁名称存储于发送所述数据库访问请求的客户端所对应的锁信息记录表中。
  18. 如权利要求17所述的装置,其中,每一锁信息记录表分别对应有各自的锁状态标识,且所述锁状态标识表示锁信息记录表为空或者非空。
  19. 如权利要求18所述的装置,其中,
    所述处理器还用于在向锁信息记录表中增加锁名称后,将该锁信息记录表对应的锁状态标识设置为非空;在从锁信息记录表中删除锁名称后,判断该锁信息记录表是否为空;如果该锁信息记录表为空,则将该锁信息记录表对应的锁状态标识设置为空,否则,将该锁信息记录表对应的锁状态标识设置为非空。
  20. 如权利要求18所述的装置,其中,
    所述处理器还用于获取所述客户端对应的锁状态标识,在判断出所述锁状态标识表示锁信息记录表为空时,确定所述客户端当前不具有未释放的锁,否则,确定所述客户端具有未释放的锁。
  21. 一种计算机程序,包括计算机可读代码,当电子设备运行所述计算机可读代码运行时,导致权利要求1-10中的任一项权利要求所述的数据库访问方法被执行。
  22. 一种计算机可读介质,其中存储了如权利要求21所述的计算机程序。
PCT/CN2014/093424 2013-12-12 2014-12-10 数据库访问方法和装置 WO2015085914A1 (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201310681688.X 2013-12-12
CN201310681688.XA CN103761240B (zh) 2013-12-12 2013-12-12 数据库访问方法和装置

Publications (1)

Publication Number Publication Date
WO2015085914A1 true WO2015085914A1 (zh) 2015-06-18

Family

ID=50528480

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/CN2014/093424 WO2015085914A1 (zh) 2013-12-12 2014-12-10 数据库访问方法和装置

Country Status (2)

Country Link
CN (1) CN103761240B (zh)
WO (1) WO2015085914A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113722351A (zh) * 2021-08-30 2021-11-30 杭州安恒信息安全技术有限公司 Oracle数据库访问流量中的参数还原方法及装置

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103761240B (zh) * 2013-12-12 2017-12-15 北京奇虎科技有限公司 数据库访问方法和装置
CN105373420B (zh) * 2014-08-28 2019-12-06 北京奇虎科技有限公司 数据传输方法及装置
CN104636131B (zh) * 2014-12-12 2018-07-27 北京奇虎科技有限公司 一种特殊指令的执行方法及装置
CN105511813A (zh) * 2015-12-11 2016-04-20 北京奇虎科技有限公司 访问服务器磁盘的方法、装置及系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050086376A1 (en) * 2003-10-17 2005-04-21 Samsung Electronics Co., Ltd. Apparatus and method for synchronizing presence attribute data between terminal and server
TW200620028A (en) * 2004-12-13 2006-06-16 Inst Information Industry Remote data access system and method, database connection method, and data synchronization method
CN1869939A (zh) * 2005-05-27 2006-11-29 华为技术有限公司 一种多线程应用程序访问数据库的方法
CN101753552A (zh) * 2008-12-01 2010-06-23 鸿富锦精密工业(深圳)有限公司 网络通信系统及方法
CN103761240A (zh) * 2013-12-12 2014-04-30 北京奇虎科技有限公司 数据库访问方法和装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101515291A (zh) * 2009-03-26 2009-08-26 北京泰合佳通信息技术有限公司 一种将数据批量导入数据库的方法及系统
CN103365929B (zh) * 2012-04-10 2016-09-28 阿里巴巴集团控股有限公司 一种数据库连接的管理方法及系统
CN103678603B (zh) * 2013-12-13 2017-01-25 江苏物联网研究发展中心 多源异构数据高效汇聚存取架构系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050086376A1 (en) * 2003-10-17 2005-04-21 Samsung Electronics Co., Ltd. Apparatus and method for synchronizing presence attribute data between terminal and server
TW200620028A (en) * 2004-12-13 2006-06-16 Inst Information Industry Remote data access system and method, database connection method, and data synchronization method
CN1869939A (zh) * 2005-05-27 2006-11-29 华为技术有限公司 一种多线程应用程序访问数据库的方法
CN101753552A (zh) * 2008-12-01 2010-06-23 鸿富锦精密工业(深圳)有限公司 网络通信系统及方法
CN103761240A (zh) * 2013-12-12 2014-04-30 北京奇虎科技有限公司 数据库访问方法和装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113722351A (zh) * 2021-08-30 2021-11-30 杭州安恒信息安全技术有限公司 Oracle数据库访问流量中的参数还原方法及装置
CN113722351B (zh) * 2021-08-30 2024-01-30 杭州安恒信息安全技术有限公司 Oracle数据库访问流量中的参数还原方法及装置

Also Published As

Publication number Publication date
CN103761240A (zh) 2014-04-30
CN103761240B (zh) 2017-12-15

Similar Documents

Publication Publication Date Title
WO2015085914A1 (zh) 数据库访问方法和装置
CA2822900C (en) Filtering queried data on data stores
CN108572876B (zh) 一种读写锁的实现方法及装置
CN109643309B (zh) 用于对跳跃表数据结构执行范围查询的系统和方法
CN110188110B (zh) 一种构建分布式锁的方法及装置
CN107291558B (zh) 一种应用程序接口死锁监控方法和装置
CN107807797B (zh) 数据写入的方法、装置及服务器
US8190857B2 (en) Deleting a shared resource node after reserving its identifier in delete pending queue until deletion condition is met to allow continued access for currently accessing processor
JP3611295B2 (ja) コンピュータシステム、メモリ管理方法及び記憶媒体
CN112052264B (zh) 业务数据查询方法、装置、电子设备及可读存储介质
US8745016B2 (en) Managing concurrent access to data in database system
CN104063355A (zh) 对服务器集群进行配置的方法及配置中心服务器
CN106598746B (zh) 分布式系统中全局锁的实现方法及装置
CN108595346B (zh) 一种特征库文件管理方法和装置
CN106599247B (zh) LSM-tree结构中数据文件的合并方法及装置
CN109656730B (zh) 一种访问缓存的方法和装置
US9021492B2 (en) Dual mode reader writer lock
CN111984379B (zh) 读写事务控制方法、系统、终端设备及存储介质
US9021321B2 (en) Testing disk drives shared by multiple processors in a supercomputer complex
WO2023066211A1 (zh) 图数据写入
CN112000670A (zh) 一种多线程程序数据统一管理方法、系统及电子设备
CN116662426A (zh) 数据库连接的建立方法、装置、设备及介质
US9418175B2 (en) Enumeration of a concurrent data structure
CN111261206B (zh) 一种读写方法、装置和电子设备及可读存储介质
CN115809150A (zh) 一种分布式死锁检测方法、装置及电子设备

Legal Events

Date Code Title Description
121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 14869648

Country of ref document: EP

Kind code of ref document: A1

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 14869648

Country of ref document: EP

Kind code of ref document: A1