国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      基于消息隊列實現(xiàn)數(shù)據(jù)庫事務處理的方法及裝置的制造方法

      文檔序號:9750921閱讀:1084來源:國知局
      基于消息隊列實現(xiàn)數(shù)據(jù)庫事務處理的方法及裝置的制造方法
      【技術領域】
      [0001]本發(fā)明涉及計算機技術領域,特別地涉及一種基于消息隊列實現(xiàn)數(shù)據(jù)庫事務處理的方法及裝置。
      【背景技術】
      [0002]在關系型數(shù)據(jù)庫中,當由于數(shù)據(jù)量特別大,而達到單表或者單庫的瓶頸的時候,大都需要對數(shù)據(jù)庫進行分庫分表操作。具體的實現(xiàn)方式就是部署多臺數(shù)據(jù)庫實例,同時一臺數(shù)據(jù)庫服務器中又對數(shù)據(jù)表進行水平拆分,從而形成多庫多表存儲多類型數(shù)據(jù)的結(jié)構(gòu)。
      [0003]—般對于已進行拆分的數(shù)據(jù)庫或者數(shù)據(jù)表進行操作的原則是盡量避免同時操作幾個數(shù)據(jù)庫的數(shù)據(jù)。但是隨著業(yè)務量的逐漸增多,很多情況下,一些業(yè)務是需要同時對多個數(shù)據(jù)庫或者數(shù)據(jù)表進行操作的。例如:現(xiàn)在越來越多的人開始網(wǎng)上購物,電子商務運營的模式發(fā)展迅速,當出現(xiàn)一個客戶訂單中既包括食品,又包括衣服時,大多會因為食品和衣服的分類不同而要從多個數(shù)據(jù)庫中操作數(shù)據(jù)。目前,對于多庫多表中數(shù)據(jù)的操作,使用較多的方法是通過分布式事務來保證數(shù)據(jù)的準確性和一致性。
      [0004]目前,分布式事務的處理比較常用的是兩階段提交協(xié)議(Two-phaseCommit,2pc)方法。即:由客戶端提交請求到事務協(xié)調(diào)器(TC),然后由事務協(xié)調(diào)器來確認各個事務執(zhí)行者是否都執(zhí)行完畢。待全部執(zhí)行成功后,才能將整個事務提交完成。
      [0005]但是,在使用過程中,發(fā)現(xiàn)現(xiàn)有的兩階段提交的方法具有以下的缺陷:
      [0006]1、現(xiàn)有的方法需要事務協(xié)調(diào)器主動確認各個事務執(zhí)行者的狀態(tài),因此涉及多次節(jié)點間的網(wǎng)絡通信,通信時間長,系統(tǒng)性能消耗大;
      [0007]2、現(xiàn)有的方法需要各個事務執(zhí)行者同步執(zhí)行分配的任務,因此不適合高并發(fā)的系統(tǒng),且數(shù)據(jù)庫實例越多,可用性能越差;
      [0008]3、現(xiàn)有的方法對線上環(huán)境的容錯性要求高,一旦一臺機器出現(xiàn)問題,整個事務就會執(zhí)行失敗,無法部分重試。
      [0009]綜上,正是由于現(xiàn)有的處理分布式事務的方法存在很嚴重的性能問題,故而大部分高并發(fā)服務器都在盡量避免使用,尤其是那些對時間需求不是很高,但是對性能要求很尚的系統(tǒng)。

      【發(fā)明內(nèi)容】

      [0010]有鑒于此,本發(fā)明提供一種基于消息隊列實現(xiàn)數(shù)據(jù)庫事務處理的方法及裝置,能夠通過消息隊列使指定服務器異步消費和處理消息,通過記錄消息狀態(tài)解決各事務執(zhí)行者之間的頻繁通信問題,且容錯性能強,具有異常重試的功能。
      [0011]為實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供了一種基于消息隊列實現(xiàn)數(shù)據(jù)庫事務處理的方法。
      [0012]—種基于消息隊列實現(xiàn)數(shù)據(jù)庫事務處理的方法,包括:接收數(shù)據(jù)庫訪問請求,所述數(shù)據(jù)庫訪問請求包括一個或多個數(shù)據(jù)庫操作;根據(jù)所述數(shù)據(jù)庫訪問請求生成有序的消息隊列,其中,所述消息隊列中的消息對應數(shù)據(jù)庫操作,每個消息包括消息狀態(tài)和重試次數(shù);通過監(jiān)控機構(gòu)按順序執(zhí)行所述消息隊列的處理,直到所述消息隊列中所有消息被成功處理或者該消息隊列中消息狀態(tài)為“異常”的消息的重試次數(shù)超過預定閾值;當所述消息隊列中的消息狀態(tài)為“異?!钡南⒌闹卦嚧螖?shù)超過預定閾值,則回退所述消息隊列中已執(zhí)行的消息。
      [0013]可選地,所述消息隊列的處理包括:按順序查找所述消息隊列中消息狀態(tài)為初始狀態(tài)的第一個消息;調(diào)用相應的數(shù)據(jù)庫服務來處理該消息對應的數(shù)據(jù)庫操作;根據(jù)處理的結(jié)果更新該消息的消息狀態(tài)和重試次數(shù),其中,如果該消息對應的數(shù)據(jù)庫操作成功完成,則修改該消息的消息狀態(tài),否則把該消息的消息狀態(tài)設為“異常”并把該消息的重試次數(shù)遞增
      1
      [0014]可選地,所述消息隊列保存在消息狀態(tài)表中,所述消息狀態(tài)表以雙向鏈表形式實現(xiàn)。
      [0015]可選地,所述消息狀態(tài)表還保存消息的回退消息。
      [0016]可選地,回退所述消息隊列中已執(zhí)行的消息包括:從所述消息狀態(tài)表中倒序讀取所述消息隊列中已執(zhí)行消息對應的回退消息并根據(jù)所述回退消息執(zhí)行回退,直至將所述消息隊列回退至初始狀態(tài)。
      [0017]可選地,所述回退消息根據(jù)當前消息的數(shù)據(jù)庫操作類型包括以下情況:若當前消息是做插入操作的,則根據(jù)當前消息待執(zhí)行插入操作對象的標識符生成刪除操作指令作為回退消息;若當前消息是做更新操作的,則根據(jù)當前消息需要更新的對象及更新前的初始值生成更新操作指令作為回退消息;若當前消息是做刪除操作的,則根據(jù)當前消息待執(zhí)行刪除操作對象的標識符生成插入操作指令作為回退消息。
      [0018]根據(jù)本發(fā)明的另一方面,提供了一種基于消息隊列實現(xiàn)數(shù)據(jù)庫事務處理的裝置。
      [0019]—種基于消息隊列實現(xiàn)數(shù)據(jù)庫事務處理的裝置,包括:訪問請求接收模塊,用于接收數(shù)據(jù)庫訪問請求,所述數(shù)據(jù)庫訪問請求包括一個或多個數(shù)據(jù)庫操作;消息隊列生成模塊,用于根據(jù)所述數(shù)據(jù)庫訪問請求生成有序的消息隊列,其中,所述消息隊列中的消息對應數(shù)據(jù)庫操作,每個消息包括消息狀態(tài)和重試次數(shù);監(jiān)控機構(gòu),用于按順序執(zhí)行所述消息隊列的處理,直到所述消息隊列中所有消息被成功處理或者該消息隊列中消息狀態(tài)為“異常”的消息的重試次數(shù)超過預定閾值;回退模塊,用于當所述消息隊列中的消息狀態(tài)為“異?!钡南⒌闹卦嚧螖?shù)超過預定閾值時回退所述消息隊列中已執(zhí)行的消息。
      [0020]可選地,所述監(jiān)控機構(gòu)還用于:按順序查找所述消息隊列中消息狀態(tài)為初始狀態(tài)的第一個消息;調(diào)用相應的數(shù)據(jù)庫服務來處理該消息對應的數(shù)據(jù)庫操作;根據(jù)處理的結(jié)果更新該消息的消息狀態(tài)和重試次數(shù),其中,如果該消息對應的數(shù)據(jù)庫操作成功完成,則修改該消息的消息狀態(tài),否則把該消息的消息狀態(tài)設為“異?!辈言撓⒌闹卦嚧螖?shù)遞增I。
      [0021]可選地,所述消息隊列保存在消息狀態(tài)表中,所述消息狀態(tài)表以雙向鏈表形式實現(xiàn)。
      [0022]可選地,所述消息狀態(tài)表還保存消息的回退消息。
      [0023]可選地,所述回退模塊還用于:從所述消息狀態(tài)表中倒序讀取所述消息隊列中已執(zhí)行消息對應的回退消息并根據(jù)所述回退消息執(zhí)行回退,直至將所述消息隊列回退至初始狀態(tài)。
      [0024]可選地,所述回退消息根據(jù)當前消息的數(shù)據(jù)庫操作類型包括以下情況:若當前消息是做插入操作的,則根據(jù)當前消息待執(zhí)行插入操作對象的標識符生成刪除操作指令作為回退消息;若當前消息是做更新操作的,則根據(jù)當前消息需要更新的對象及更新前的初始值生成更新操作指令作為回退消息;若當前消息是做刪除操作的,則根據(jù)當前消息待執(zhí)行刪除操作對象的標識符生成插入操作指令作為回退消息。
      [0025]根據(jù)本發(fā)明的技術方案,將接收到的數(shù)據(jù)庫訪問請求生成消息隊列,并將消息數(shù)據(jù)寫在zookeeper服務器的節(jié)點上,然后通過zookeeper的監(jiān)聽回調(diào)機制來通知注冊在各節(jié)點上的業(yè)務服務器異步消費、處理消息,從而實現(xiàn)數(shù)據(jù)庫分布式事務的處理。通過使用消息隊列來處理數(shù)據(jù)庫事務,可以對消息進行異步處理,當一條消息出現(xiàn)重試預定次數(shù)仍未能處理的異常時,將會執(zhí)行消息回退直至初始狀態(tài),相應消息隊列中未處理的消息便不再執(zhí)行,從而節(jié)省了系統(tǒng)資源;且通過消息狀態(tài)對消息的處理過程進行管理避免了上下級系統(tǒng)間的頻繁通信,從而極大地提高了系統(tǒng)的性能。同時本發(fā)明的技術方案還具有較強的容錯性,當一臺業(yè)務服務器出現(xiàn)故障時,會有其他的業(yè)務服務器來接手處理未完成的任務,且可以部分重試
      當前第1頁1 2 3 4 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1