System.ArgumentOutOfRangeException: 索引和長度必須引用該字符串內的位置。 參數名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技術實現步驟摘要】
本專利技術涉及sql數據庫,具體涉及一種基于javaagent和javassist的數據庫分表方法及系統。
技術介紹
1、結構化查詢語言(structured?query?language)簡稱sql,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統。分表,是指將數據庫中的一張表按一定的規則分解成n個具有獨立存儲空間的實體表。系統讀寫時需要根據定義好的規則得到對應的字表明,然后進行操作。由于sql數據庫表隨著數據的增加,查詢會變慢,因此在sql數據庫運維的過程中需要經常進行分區、分表操作。
2、現有技術中,已存在有針對分表后的sql數據庫進行維護的技術方案,比如,中國專利cn201711000959.5公開了一種分庫分表模式下邏輯sql語句翻譯方法和裝置,接收并輸出邏輯sql語句;對所述輸出的邏輯sql語句進行語句分析,獲取所述邏輯sql語句的語法分析樹;對所述語法分析樹中表名與預設的分庫分表策略進行匹配,獲取所述語法分析樹中表名的分庫分表信息;基于所述分庫分表信息,將所述邏輯sql語句翻譯為物理sql語句。采用該技術方案,能提供便捷、高效的分庫分表的物理sql語句生成能力。
3、但是,在實際實施過程中,專利技術人發現,該類技術方案在使用過程中,比如對某個分表中的數據進行操作時,仍需要通過代碼的形式添加對應的分表名稱,再由數據庫側維護對應的分表,導致了使用不便的問題,特別是在原有業務的基礎上產生了新的分表時,需要對相關業務的代碼進行修改才能實現正常操
技術實現思路
1、針對現有技術中存在的上述問題,現提供一種基于javaagent和javassist的數據庫分表方法;另一方面,還提供用于實施該數據庫分表方法的數據庫分表系統。
2、具體技術方案如下:
3、一種基于javaagent和javassist的數據庫分表方法,包括:
4、步驟s1:針對目標數據庫,創建分表線程并對關聯于所述目標數據庫的sql執行語句添加執行節點形成替換語句;
5、步驟s2:當執行所述替換語句時,數據庫系統調用所述分表線程以獲取分表信息,依照所述分表信息對所述替換語句中的表名信息進行修改形成實際執行語句;
6、步驟s3:執行所述實際執行語句來構建對應于所述目標數據庫的數據庫分表。
7、另一方面,所述步驟s1中,所述分表線程的線程創建過程包括:
8、步驟a11:針對所述目標數據庫創建所述分表線程;
9、步驟a12:于所述分表線程中寫入所述分表信息。
10、另一方面,所述步驟s1中,生成所述替換語句的節點插入過程包括:
11、步驟b11:遍歷所述sql執行語句,于所述sql執行語句中查找得到執行函數;
12、步驟b12:對所述執行函數的方法體部分添加所述執行節點以形成所述替換語句。
13、另一方面,所述步驟b11中,所述sql執行語句包括關聯于連接對象的sql語句和關聯于預處理對象的sql語句。
14、另一方面,所述步驟s2包括:
15、步驟s21:當觸發所述執行節點時,所述數據庫系統調用所述分表線程,以獲取所述分表信息;
16、步驟s22:自所述替換語句中查找得到原表表名;
17、步驟s23:依照所述分表信息替換所述原表表名得到所述實際執行語句。
18、另一方面,于執行所述步驟s3之后還包括:
19、步驟s4:清除所述分表線程中的所述分表信息。
20、一種基于javaagent和javassist的數據庫分表系統,用于實施上述的數據庫分表方法,包括:
21、線程生成模塊,所述線程生成模塊針對目標數據庫,創建分表線程并對關聯于所述目標數據庫的sql執行語句添加執行節點形成替換語句;
22、語句替換模塊,所述語句替換模塊連接所述線程生成模塊,所述語句替換模塊在所述數據庫系統執行所述替換語句時,調用所述分表線程以獲取分表信息,依照所述分表信息對所述替換語句中的表名信息進行修改形成實際執行語句;
23、執行模塊,所述執行模塊連接所述語句替換模塊,所述執行模塊執行所述實際執行語句來構建對應于所述目標數據庫的數據庫分表。
24、另一方面,所述線程生成模塊包括:
25、線程創建模塊,所述線程創建模塊針對所述目標數據庫創建所述分表線程;
26、線程寫入模塊,所述線程寫入模塊連接所述線程創建模塊,所述線程寫入模塊于所述分表線程中寫入所述分表信息。
27、另一方面,所述線程生成模塊包括:
28、語句遍歷模塊,所述語句遍歷模塊遍歷所述sql執行語句,于所述sql執行語句中查找得到執行函數;
29、方法體替換模塊,所述方法體替換模塊連接所述語句遍歷模塊,所述方法體替換模塊對所述執行函數的方法體部分添加所述執行節點以形成所述替換語句。
30、另一方面,還包括:
31、線程清除模塊,所述線程清除模塊連接所述執行模塊,所述線程清除模塊在構建所述數據庫分表后清除所述分表線程中的所述分表信息。
32、上述技術方案具有如下優點或有益效果:
33、針對現有技術中的數據庫分表后需要對業務代碼中對應的表名稱進行直接修改,使用不便的問題,本方案中,引入了上述的分表方法,在數據庫系統中出現了分表時,創建對應的分表線程,并對關聯的sql執行語句插入執行節點。當調用該sql執行語句時,通過分表線程對替換語句中對應的表名信息進行修改,來使得原有的語句指向分表處理后的實體表,實現了對分表的操作的同時不需要修改業務代碼。
本文檔來自技高網...【技術保護點】
1.一種基于JavaAgent和Javassist的數據庫分表方法,其特征在于,包括:
2.根據權利要求1所述的數據庫分表方法,其特征在于,所述步驟S1中,所述分表線程的線程創建過程包括:
3.根據權利要求1所述的數據庫分表方法,其特征在于,所述步驟S1中,生成所述替換語句的節點插入過程包括:
4.根據權利要求3所述的數據庫分表方法,其特征在于,所述步驟B11中,所述sql執行語句包括關聯于連接對象的sql語句和關聯于預處理對象的sql語句。
5.根據權利要求1所述的數據庫分表方法,其特征在于,所述步驟S2包括:
6.根據權利要求2所述的數據庫分表方法,其特征在于,于執行所述步驟S3之后還包括:
7.一種基于JavaAgent和Javassist的數據庫分表系統,其特征在于,用于實施如權利要求1-6任意一項所述的數據庫分表方法,包括:
8.根據權利要求7所述的數據庫分表系統,其特征在于,所述線程生成模塊包括:
9.根據權利要求7所述的數據庫分表系統,其特征在于,所述線程生成模塊包括:<
...【技術特征摘要】
1.一種基于javaagent和javassist的數據庫分表方法,其特征在于,包括:
2.根據權利要求1所述的數據庫分表方法,其特征在于,所述步驟s1中,所述分表線程的線程創建過程包括:
3.根據權利要求1所述的數據庫分表方法,其特征在于,所述步驟s1中,生成所述替換語句的節點插入過程包括:
4.根據權利要求3所述的數據庫分表方法,其特征在于,所述步驟b11中,所述sql執行語句包括關聯于連接對象的sql語句和關聯于預處理對象的sql語句。
5.根據權利要求1所述的數據庫分表方法...
【專利技術屬性】
技術研發人員:丁號,丁軼,
申請(專利權)人:上海寰創通信科技股份有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。