為一個實施例中的數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理方法的流程示意圖;
[0057]圖3B為一個實施例中生成當前生成的SQL語句的自增序列號的步驟的流程示意圖;
[0058]圖3C為一個實施例中根據(jù)指定數(shù)據(jù)表的更新語句隊列修改指定數(shù)據(jù)表的步驟的流程示意圖;
[0059]圖3D為一個實施例中根據(jù)日志文件修改指定數(shù)據(jù)表的步驟的流程示意圖;
[0060]圖4為一個實施例中對讀數(shù)據(jù)請求的處理過程的流程示意圖;
[0061]圖5為一個實施例中對讀數(shù)據(jù)請求的處理過程的流程示意圖;
[0062]圖6為一個實施例中的數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理系統(tǒng)的結構示意圖;
[0063]圖7為一個實施例中的數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理系統(tǒng)的結構示意圖;
[0064]圖8為一個實施例中的數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理系統(tǒng)的結構示意圖;
[0065]圖9為一個實施例中的數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理系統(tǒng)的結構示意圖;
[0066]圖10為一個實施例中的數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理系統(tǒng)的結構示意圖。
【【具體實施方式】】
[0067]如圖1所示,在一個實施例中,一種數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理方法,包括以下步驟:
[0068]步驟S102,接收對指定數(shù)據(jù)表的寫數(shù)據(jù)請求,寫數(shù)據(jù)請求中包括關鍵字以及關鍵字對應的更新內(nèi)容。
[0069]寫數(shù)據(jù)請求可為對數(shù)據(jù)的新增請求、刪除請求或修改請求。
[0070]更新內(nèi)容可包括具體的列名和列值對,若更新內(nèi)容中包括列名和列值對,則每一列名和列值對可表示請求將該列名對應列中關鍵字對應的值設置為該列值。例如更新內(nèi)容包括(姓名,“張三”)、(生日,2014-6-10)等列名和列值對,其可表示請求將姓名列中關鍵字對應值設置為“張三”、以及將年齡列中關鍵字對應值設置為20。
[0071]更新內(nèi)容也可包括刪除指令,若更新內(nèi)容中包括刪除指令,則可表示請求刪除關鍵字對應的記錄。
[0072]步驟S104,在指定數(shù)據(jù)表對應的存儲于內(nèi)存的哈希表中查找寫數(shù)據(jù)請求中包括的關鍵字。數(shù)據(jù)表的表名與對應的哈希表的表名相同。
[0073]在一個實施例中,在步驟S104之前,上述數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理方法還包括步驟:獲取指定數(shù)據(jù)表中的部分或全部記錄,在內(nèi)存中生成與指定數(shù)據(jù)表的表名相同的哈希表,將指定數(shù)據(jù)表中的部分或全部記錄存儲到對應的哈希表中。具體的,在一個實施例中,可統(tǒng)計指定數(shù)據(jù)表中的記錄的訪問頻率,獲取訪問頻率高的前預設條記錄,將獲取的記錄存儲到對應的哈希表中。
[0074]在一個實施例中,上述數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理方法還包括步驟:設置哈希表過期數(shù)據(jù)清理周期,在每一個周期內(nèi)統(tǒng)計哈希表中的記錄的訪問頻率,并在每一個周期末刪除本周期內(nèi)訪問頻率低的前預設條記錄。
[0075]步驟S106,若在哈希表中查找到寫數(shù)據(jù)請求中包括的關鍵字,則在哈希表中根據(jù)更新內(nèi)容修改寫數(shù)據(jù)請求中包括的關鍵字對應的記錄。
[0076]若更新內(nèi)容包括列名和列值對,則相應于每一列名和列值對,將其中的列名對應列中關鍵字對應的值設置為其中的列值,例如,更新內(nèi)容包括(姓名,“張三”)這一列名和列值對,則可將哈希表的姓名列中關鍵字對應值設置為“張三”。
[0077]若更新內(nèi)容包括刪除指令,則可刪除哈希表中關鍵字對應的記錄。
[0078]步驟S108,生成可實現(xiàn)對哈希表的操作的SQL語句,將SQL語句插入到數(shù)據(jù)表的更新語句隊列中。
[0079]例如,哈希表的表名為STUDENT,哈希表中表示關鍵字的列的列名為Student ID,寫數(shù)據(jù)請求中包括關鍵字“001”和刪除指令,即表示請求刪除哈希表中Student ID為“001”的記錄,則可生成如下 SQL 語句:DELETE FROM STUDENT WHERE Student ID = ‘001’。由于哈希表的表名與對應數(shù)據(jù)表的表名一致,因此,同一 SQL語句可實現(xiàn)對哈希表以及對應數(shù)據(jù)表進行相同的操作。
[0080]數(shù)據(jù)表的更新語句隊列中包含了將要對數(shù)據(jù)表執(zhí)行的SQL語句。
[0081]步驟S110,向發(fā)送寫數(shù)據(jù)請求的請求方返回處理結果。
[0082]若對哈希表成功進行了與寫數(shù)據(jù)請求對應的數(shù)據(jù)更新操作,則可向請求方返回表示處理成功的結果信息。若對哈希表進行的與寫數(shù)據(jù)請求對應的數(shù)據(jù)更新操作遇到異常,則可向請求方返回表示處理失敗的結果信息。
[0083]如圖2所示,在一個實施例中,一種數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理方法,包括以下步驟:
[0084]步驟S202,接收對指定數(shù)據(jù)表的寫數(shù)據(jù)請求,寫數(shù)據(jù)請求中包括關鍵字以及關鍵字對應的更新內(nèi)容。
[0085]步驟S204,在指定數(shù)據(jù)表對應的存儲于內(nèi)存的哈希表中查找寫數(shù)據(jù)請求中包括的關鍵字,并判斷是否查找到該關鍵字,若是,則執(zhí)行步驟S206,否則,執(zhí)行步驟S208。
[0086]步驟S206,在哈希表中根據(jù)更新內(nèi)容修改寫數(shù)據(jù)請求中包括的關鍵字對應的記錄,進入步驟S214。
[0087]步驟S208,在存儲于數(shù)據(jù)庫的數(shù)據(jù)表中查找寫數(shù)據(jù)請求中包括的關鍵字,并判斷是否查找到該關鍵字,若是,則執(zhí)行步驟S210,否則執(zhí)行步驟S212。
[0088]步驟S210,讀取指定數(shù)據(jù)表中與寫數(shù)據(jù)請求中包括的關鍵字對應的值,將寫數(shù)據(jù)請求中包括的關鍵字以及對應的值寫入哈希表中,進入步驟S206。
[0089]步驟S212,根據(jù)更新內(nèi)容生成寫數(shù)據(jù)請求中包括的關鍵字對應的值,將寫數(shù)據(jù)請求中包括的關鍵字以及生成的值寫入哈希表中,進入步驟S214。
[0090]若指定數(shù)據(jù)表中沒有寫數(shù)據(jù)請求中包括的關鍵字,則可以認為該寫數(shù)據(jù)請求為新增記錄的請求。步驟S212可將更新內(nèi)容中包含的列值按照哈希表中相應列的數(shù)據(jù)類型進行格式化,進一步的,可將關鍵字以及格式化后的列值作為一條記錄寫入哈希表中。例如,更新內(nèi)容中包含(生日,2014-6-10)這一列名和列值對,而哈希表中生日列的數(shù)據(jù)類型為長度為8位的字符串,則可將2014-6-10格式化為20140610。進一步的,可將關鍵字以及20140610作為一條記錄寫入哈希表中。
[0091 ] 步驟S214,生成可實現(xiàn)對哈希表的操作的SQL語句,將SQL語句插入到數(shù)據(jù)表的更新語句隊列中。
[0092]步驟S216,向發(fā)送寫數(shù)據(jù)請求的請求方返回處理結果。
[0093]在一個實施例中,上述數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理方法,還包括以下步驟:在生成可實現(xiàn)對哈希表的操作的SQL語句之后,將SQL語句寫入到日志文件中;根據(jù)指定數(shù)據(jù)表的更新語句隊列修改指定數(shù)據(jù)表;當更新語句隊列中的SQL語句被破壞后,根據(jù)日志文件修改指定數(shù)據(jù)表。
[0094]根據(jù)指定數(shù)據(jù)表的更新語句隊列修改指定數(shù)據(jù)表的步驟包括:判斷指定數(shù)據(jù)表的更新語句隊列中是否還有SQL語句,若是,則從指定數(shù)據(jù)表的更新語句隊列的隊列頭獲取SQL語句并刪除位于隊列頭的SQL語句,對指定數(shù)據(jù)表執(zhí)行獲取的SQL語句,判斷指定數(shù)據(jù)表的更新語句隊列中是否還有SQL語句,若否,則結束或者間隔預設時長再執(zhí)行判斷指定數(shù)據(jù)表的更新語句隊列中是否還有SQL語句的步驟。
[0095]本實施例中,對指定數(shù)據(jù)表將要執(zhí)行的SQL語句被放入具有先進先出原則的更新語句隊列中,相對于對哈希表的更新操作,可將對指定數(shù)據(jù)表的更新操作進行延時,一般地可在數(shù)據(jù)庫的數(shù)據(jù)操作請求較少的時段或在計算機系統(tǒng)較為空閑的時段,根據(jù)更新語句隊列集中處理對數(shù)據(jù)表的更新操作,避免與數(shù)據(jù)操作請求的處理爭奪系統(tǒng)資源,從而避免減慢對數(shù)據(jù)操作請求的響應速度。
[0096]在一個實施例中,更新語句隊列存儲于內(nèi)存中,可加快對更新語句隊列數(shù)據(jù)讀寫的速度,從而加快對數(shù)據(jù)庫的數(shù)據(jù)操作請求的響應速度。而在計算機發(fā)生異常故障而死機后,存儲于內(nèi)存中的更新語句隊列中的數(shù)據(jù)可能被破壞,本實施例中,在這種情況下,則可根據(jù)日志文件修改指定數(shù)據(jù)表,因為日志文件中也寫入了可實現(xiàn)對哈希表的操作的SQL語句。因此,本實施例,即使計算機發(fā)生異常故障而死機,也可根據(jù)日志文件修改指定數(shù)據(jù)表,確保對數(shù)據(jù)表應該執(zhí)行的操作得以完成,從而保證向請求方返回的處理結果的準確性。
[0097]步驟S102?S110、根據(jù)指定數(shù)據(jù)表的更新語句隊列修改指定數(shù)據(jù)表的步驟、以及根據(jù)日志文件修改指定數(shù)據(jù)表的步驟可由不同的進程或線程來實現(xiàn),從而達到對哈希表的操作與對數(shù)據(jù)表的操作互不影響的目的,以加快對數(shù)據(jù)操作請求的響應速度,還可達到在計算機未發(fā)生異常的情況下對數(shù)據(jù)表的操作和在計算機發(fā)生異常的情況下對數(shù)據(jù)表的操作互不影響的目的。
[0098]如圖3A所示,在一個實施例中,一種數(shù)據(jù)庫的數(shù)據(jù)操作請求的處理方法,包括步驟:
[0099]步驟S302,接收對指定數(shù)據(jù)表的寫數(shù)據(jù)請求,寫數(shù)據(jù)請求中包括關鍵字以及關鍵字對應的更新內(nèi)容。
[0100]步驟S304,在指定數(shù)據(jù)表對應的存儲于內(nèi)存的哈希表中查找寫數(shù)據(jù)請求中包括的關鍵字,并判斷是否查找到該關鍵字,若是,則執(zhí)行步驟S306,否則,執(zhí)行步驟S308。
[0101]步驟S