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

一種將Mysql數(shù)據(jù)批量遷移到Redis的方法與流程

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