一種利用緩存表來提高資料庫數據插入性能的方法
2023-06-24 06:47:06 1
專利名稱:一種利用緩存表來提高資料庫數據插入性能的方法
技術領域:
本發明涉及一種利用緩存表來提高資料庫數據插入性能的方法。
背景技術:
大型業務應用系統,一般都要將系統相關業務數據存儲到資料庫之中。在系統實際運行過程中,將同類型的新增業務數據寫入到資料庫對應的數據表中,數據表的數據存儲在伺服器的硬碟,硬碟的寫入性能影響了數據表的插入性能,當前硬碟的讀寫性能是伺服器各組件中最低的一部分,硬碟的讀寫性能成為資料庫數據表的插入性能的瓶頸。為了提高資料庫的插入效率,現有採用的技術方案有升級伺服器硬體或者批量插入。通過升級伺服器硬體(主要是硬碟)的方法,可以較簡單地實現資料庫插入性能的提升,但是提升範圍有限,且硬體開銷比較大,綜合性價比不高。批量插入是一種將多條待插入數據拼接成一條語句然後一次提交到資料庫執行的方法,可以不用升級硬體就獲取到較大的性能提升,但在系統新增業務數據量巨大,業務系統對該表讀取頻繁的情況下容易造成數據表被鎖住,從而引發頻繁、階段性的性能下降, 不利於系統的穩定。
發明內容
針對現有技術方案的不足,本發明提出一種利用緩存表來提高資料庫插入性能的方法,可以在不用升級硬體、避免造成資料庫死鎖的條件下大大提高資料庫的插入性能。本發明一種利用緩存表來提高資料庫數據插入性能的方法,首先建立兩個基於內存的資料庫緩存表,該緩存表與待最終插入的目的數據表的表結構相同;先將數據插入到第一緩存表中,待第一緩存表中的數據超過最大個數閾值後,再將第一緩存表的數據批量導入到目的數據表,在導入過程中,若有新的數據要插入資料庫,則將新的數據插入到第二緩存表中,待第二緩存表中的數據超過最大個數閾值後,再將該第二緩存表中的數據導入到目的數據表中,該第一或第二緩存表一旦將其中的數據導入至目的數據表中後,則所述的第一或第二緩存表立即清空;上述往第一或第二緩存表插入數據到最大個數閾值所需要的時間必須大於將該第一或第二緩存表中的數據導入到目的數據表所需時間。採用本發明的技術方案後,由於緩存表是建立在內存之上,所以該表的插入性能取決於內存的寫入性能,遠遠大於基於硬碟的數據表,只要在保證緩存表的容量夠大的前提下,則就可以獲取到近似於緩存表的數據插入性能。
圖1為本發明的流程示意圖。以下結合附圖和具體實施例對本發明作進一步詳述。
具體實施方式
本發明一種利用緩存表來提高資料庫數據插入性能的方法,首先建立兩個基於內存的資料庫緩存表,該緩存表與待最終插入的目的數據表的表結構相同,因為緩存表是建立在內存之上,所以該表的插入性能取決於內存的寫入性能,遠遠大於基於硬碟的數據表; 先將數據插入到第一緩存表中,待第一緩存表中的數據超過最大個數閾值後,再將第一緩存表的數據批量導入到目的數據表,在導入過程中,若有新的數據要插入資料庫,則將新的數據插入到第二緩存表中,待第二緩存表中的數據超過最大個數閾值後,再將該第二緩存表中的數據導入到目的數據表中,該第一或第二緩存表一旦將其中的數據導入至目的數據表中後,則所述的第一或第二緩存表立即清空;上述往第一或第二緩存表插入數據到最大個數閾值所需要的時間必須大於將該第一或第二緩存表中的數據導入到目的數據表所需時間。如圖1所示,本發明具體實現步驟如下
步驟1、選用MYSQL作為資料庫引擎來部署資料庫,創建業務系統資料庫BizDB ;
步驟2、在業務系統資料庫BizDB中創建以下數據表
目的數據表,表引擎選擇Mylsam,表結構中定義若干數據欄位;
建立基於內存的第一和第二資料庫緩存表,該緩存表的表結構與目的數據表相同;
步驟3、在業務系統資料庫BizDB中創建以下存儲過程
存儲過程1 參數為第一緩存表中各欄位,將各參數插入到第一緩存表中,然後返回第一緩存表的當前數據行數,如果插入失敗則返回0 ;
存儲過程2 參數為第二緩存表中各欄位,將各參數插入到第二緩存表中,然後返回第二緩存表的當前數據行數,如果插入失敗則返回0 ;
存儲過程3 參數為整型,限制為1或2,返回值BOOL型,根據參數將對應的緩存表中的數據存入目的數據表中,存成功後將原緩存表清空,並返回操作結果;
步驟4、創建業務程序,設置緩存表最大行數限制閾值,根據預先配置好的參數連接業務系統資料庫BizDB,初始化當前緩存表標誌位為1 ;
步驟5、等待待插入的業務數據,一旦接收到待插入的數據,則根據當前緩存表標誌位選擇待插入數據的存儲過程,如果當前緩存表標誌為1則執行步驟3中的存儲過程1,如果當前緩存表標誌位為2,則執行步驟3中的存儲過程2 ;
步驟6、執行插入數據的存儲過程,並判斷其返回值,如果返回值大於0且小於緩存表最大行數限制閾值,說明存儲過程執行成功,且緩存表數據未滿,執行步驟9,如果返回值為 0,執行步驟7,如果返回值大於緩存表最大行數限制閾值,執行步驟8 ; 步驟7、程序執行異常,進行相應的異常處理,並列印日誌,執行步驟9 ; 步驟8、若存儲過程返回值大於緩存表最大行數限制閾值,說明該緩存表中的數據已滿,切換緩存表標誌位,原來為1的改為2,原來為2的改為1,並執行存儲過程3,將數據已滿的所述緩存表中的數據導入到目的數據表中,執行步驟9 ;
步驟9、判斷是否結束數據插入,如果是則執行步驟10,如果否則執行步驟5 ; 步驟10、關閉資料庫連接,退出數據插入過程。以上所述,僅是本發明較佳實施例而已,並非對本發明的技術範圍作任何限制,故凡是依據本發明的技術實質對以上實施例所作的任何細微修改、等同變化與修飾,均仍屬於本發明技術方案的範圍內。
權利要求
1. 一種利用緩存表來提高資料庫數據插入性能的方法,其特徵在於 首先建立兩個基於內存的資料庫緩存表,該緩存表與待最終插入的目的數據表的表結構相同;先將數據插入到第一緩存表中,待第一緩存表中的數據超過最大個數閾值後,再將第一緩存表的數據批量導入到目的數據表,在導入過程中,若有新的數據要插入資料庫,則將新的數據插入到第二緩存表中,待第二緩存表中的數據超過最大個數閾值後,再將該第二緩存表中的數據導入到目的數據表中,該第一或第二緩存表一旦將其中的數據導入至目的數據表中後,則所述的第一或第二緩存表立即清空;上述往第一或第二緩存表插入數據到最大個數閾值所需要的時間必須大於將該第一或第二緩存表中的數據導入到目的數據表所需時間。
全文摘要
本發明一種利用緩存表來提高資料庫數據插入性能的方法,首先建立兩個基於內存的資料庫緩存表,該緩存表與待最終插入的目的數據表的表結構相同;先將數據插入到第一緩存表中,待第一緩存表中的數據超過最大個數閾值後,再將第一緩存表的數據批量導入到目的數據表,在導入過程中,若有新的數據要插入資料庫,則將新的數據插入到第二緩存表中,待第二緩存表中的數據超過最大個數閾值後,再將該第二緩存表中的數據導入到目的數據表中;本發明可以在不用升級硬體、避免造成資料庫死鎖的條件下大大提高資料庫的插入性能。
文檔編號G06F17/30GK102542054SQ20111045012
公開日2012年7月4日 申請日期2011年12月29日 優先權日2011年12月29日
發明者餘建成, 傅建記, 吳曉前, 詹友陸 申請人:廈門雅迅網絡股份有限公司