日韩成人黄色,透逼一级毛片,狠狠躁天天躁中文字幕,久久久久久亚洲精品不卡,在线看国产美女毛片2019,黄片www.www,一级黄色毛a视频直播

一種將Mysql數據批量遷移到Redis的方法與流程

文檔序號:39559990發(fā)布日期:2024-09-30 13:31閱讀:13來源:國知局
本發(fā)明屬于數據處理,特別是涉及一種將mysql數據批量遷移到redis的方法。
背景技術
::1、redis是一個key-value存儲系統(tǒng),它支持存儲的value類型包括string(字符串)、list(鏈表)、set(集合)、zset(sortedset--有序集合)和hash(哈希類型)等。在此基礎上,redis還支持各種不同方式的排序,且周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,實現主從同步,在部分場合可以對關系數據庫起到很好的補充作用。python是一種跨平臺的計算機程序設計語言,mysql是一種關系型數據庫管理系統(tǒng),關系數據庫將數據保存在不同的表中,而不是將所有數據放在一個大倉庫內,這樣就增加了速度并提高了靈活性。2、如中國專利cn109710485a提供一種用python語言采集mysql數據庫監(jiān)控數據的方法,通過python獲取本主機的機器名稱;將多臺mysql數據庫的連接信息放入一個字符串數組中;連接每一個mysql數據庫,并查詢數據庫的各個指標,放入一個python字典中;獲取mysql的監(jiān)控指標,從中提取需要搜集的幾個重要監(jiān)控指標的值,主要包括每秒查詢率、系統(tǒng)吞吐量、慢查詢數/秒、創(chuàng)建總的連接數目、運行中的連接數、拒絕的連接數、緩沖池指標;計算出需要的監(jiān)控指標值;將計算出的各個監(jiān)控項的值整理為時序數據庫的存儲格式轉發(fā)給監(jiān)控系統(tǒng)即可。3、目前,從mysql遷移數據到redis中,一般也會使用shell或python編程來完成。如中國專利cn115480711a公開了一種數據遷移方法和相關裝置,數據遷移系統(tǒng)包括數據遷移單元,數據遷移單元包括一個線程管理器、至少一個數據讀取器和至少一個數據寫入器。線程管理器獲取源集群的磁盤帶寬,根據磁盤帶寬確定用于執(zhí)行數據遷移的線程數量,并根據線程數量建立一個或多個線程。目標線程對應的目標數據讀取器和目標數據寫入器,目標數據讀取器從消息隊列中獲取目標行鍵,根據目標行鍵從源集群中獲取目標行鍵對應的目標待遷移數據,并向目標數據寫入器發(fā)送目標待遷移數據,目標數據寫入器將目標待遷移數據存儲至目標集群中。4、但是,對于大批量的從多個mysql數據庫遷移數據到redis集群中,而shell或其它解釋型的腳本語言,無法多線程工作,大批量遷移數據會比較繁瑣且耗時。技術實現思路1、本發(fā)明的目的在于提供一種將mysql數據批量遷移到redis的方法,通過主線程獲取機器的cpu核數n,啟動包含n個工作線程的線程池,讀取配置文件信息,主線程將讀取到的任務列表放入到消息隊列中等,實現多線程處理任務及大批量數據遷移的處理過程,解決了現有的問題,可節(jié)省數據遷時間,提高準確性。2、為解決上述技術問題,本發(fā)明是通過以下技術方案實現的:3、本發(fā)明為一種將mysql數據批量遷移到redis的方法,包括以下步驟:4、主線程獲取cpu核數n,并啟動包含n個工作線程的線程池;5、主線程讀取配置文件信息;所述主線程讀取配置文件信息的方法為:6、主線程讀取dbmanager區(qū)塊名,在dbmanager區(qū)塊下讀取dbnum標簽,得到需要訪問的數據庫個數m;所述主線程讀取dbmanager區(qū)塊名、dbnum標簽、數據庫個數時,若未找到dbmanager區(qū)塊名或數據庫個數不合理,則退出進程;7、循環(huán)拼接出區(qū)塊名db_x,并在各自的區(qū)塊名下獲取要遷移數據的信息,其中,1≤x≤m;在讀取區(qū)塊名、標簽名以及對應的值的過程中,如果未找到名稱或值不合理,發(fā)消息優(yōu)雅退出進程;8、在db_1區(qū)塊名下,分別讀取ip、user、passwd、dbname、tablecount對應的值,得到數據表的個數t,循環(huán)拼接出標簽名tabname、columnlist、rediskeycolumn,得到數據源的表名、列名、redis鍵名;9、讀取redis區(qū)塊名,在redis區(qū)塊下讀取ip_port、passwd標簽對應的值;在讀取區(qū)塊名、標簽名以及對應的值的過程中,如果未找到名稱或值不合理,發(fā)消息優(yōu)雅退出進程;10、主線程將讀取到的任務列表放入到消息隊列中;11、根據數據庫的個數m,使用mysql?c++api建立m個mysql連接池;12、建立一個redis連接池;13、工作線程從隊列中取出消息,根據mysql數據庫編號,從對應的連接池中獲取一個連接,并讀取表結構;14、根據每個任務配置的rediskeycloumn,確定redis?key的構成方式;15、工作線程從mysql數據庫中讀取一條記錄并將記錄寫入到redis集群中。16、進一步地,所述主線程讀取redis區(qū)塊名、ip_port、passwd標簽名及對應的值的過程中,若未找到redis區(qū)塊名或值不合理,則退出進程。17、進一步地,所述任務列表包括mysql數據庫編號、mysql表名、mysql字段名、redis鍵名。18、進一步地,每個所述連接池初始化時僅建立1個與mysql的連接,在處理任務時,先判斷對應的連接池中是否有閑置的連接:19、若有閑置的連接時,則使用該連接來訪問數據庫,并將該連接的狀態(tài)修改為“正在使用”,任務處理完成后,將該連接的狀態(tài)改為“閑置”;20、若沒有閑置的連接時,由工作線程根據任務信息中“數據庫編號”得到對應的數據庫連接參數;21、其中,判斷對應的連接池中是否有閑置的連接的方法為:22、連接池的編號=任務信息中的數據庫編號,則沒有閑置的連接;23、否則,有閑置的連接。24、進一步地,所述redis連接池初始化時僅建立1個與redis集群的連接,在處理任務時,先判斷redis連接池中是否有閑置的連接:25、當有閑置的連接,則使用該連接來訪問redis集群,并將該連接的狀態(tài)修改為“正在使用”,任務處理完成后,將該連接的狀態(tài)改為“閑置”;26、當沒有閑置的連接時,由工作線程根據redis集群的連接參數,使用redis?c++api建立連接。27、進一步地,所述工作線程讀取表結構時,如果沒有可用的連接,則新建一個連接;使用mysql官網提供的c++api讀取表結構,看配置的列名是否都存在,如果不存在,將錯誤信息輸入到日志記錄器。28、進一步地,所述工作線程從mysql數據庫中讀取記錄時僅讀取配置的字段;如果僅讀取配置的字段成功轉移到redis集群,將成功條數加1;如果失敗,將失敗條數加1,并將錯誤信息輸入到日志記錄器。29、進一步地,當一個任務列表的所有數據處理完成后,將統(tǒng)計出的mysql庫名、表名、記錄總條數,寫redis成功的條數,寫redis失敗的條數;輸入到日志記錄器;所述日志記錄器采用異步方式寫日志文件。30、本發(fā)明具有以下有益效果:31、本發(fā)明通過主線程獲取機器的cpu核數n,啟動包含n個工作線程的線程池,主線程讀取配置文件信息,將讀取到的任務列表放入到消息隊列中;根據數據庫的個數m,建立m個mysql連接池,建立一個redis連接池;工作線程從隊列中取出消息,根據mysql數據庫編號,從對應的連接池中獲取一個連接;使用mysql官網提供的c++api讀取表結構,看配置的列名是否都存在,如果不存在,將錯誤信息輸入到日志記錄器。根據每個任務配置的rediskeycloumn,來構成redis?key的構成方式;工作線程從mysql中讀取一條記錄,然后將這條記錄寫入到redis集群中。如果轉移成功,將成功條數加1;如果失敗,將失敗條數加1,并將錯誤信息輸入到日志記錄器;實現多線程任務處理、大批量數據遷移的處理過程,節(jié)省數據遷移時間,提高準確性。32、當然,實施本發(fā)明的任一產品并不一定需要同時達到以上所述的所有優(yōu)點。當前第1頁12當前第1頁12
當前第1頁1 2 
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1