批量生產資料時,效率是關鍵

2021-08-31 07:59:42 字數 2444 閱讀 3082

昨天被安排了乙個任務,要生成撫順地區所有的聯通和移動的手機號,最後要隨機匯出,每50w乙個文字.

開發思路是先找到所有的撫順號段,然後生成號段下所有的手機號,最後隨機匯出成文字.

看了一下我們的資料庫,撫順地區所有的號段一共有32個(可能不夠,不過我們的資料庫裡就這麼多,酬和用吧.不少了.),每個號段下有10000個號,最近就是3200000個手機號..

生成號碼不是難事.關鍵是生成**以後,從資料庫中取出320w資料,然後要隨機排列輸出,嘗試了各種辦法以後終於還是失敗,總是會記憶體溢位,要不然就是效率太低..

晚上回家突然想到乙個辦法,我何必要最後隨機抽出資料呢?為什麼不直接就做出隨機的資料呢?讓資料在資料庫中隨機儲存,然後之後分頁查詢,每次查詢50w儲存檔案就ok了啊...早上到單位一試驗果然有效..

首先是生成隨機資料的地方.隨機資料並不是說手機號碼隨機生成,如果隨機生成號碼還有驗證是否重複很麻煩,直接隨機生成主鍵id,然後儲存呵呵,一切ok.

int index = 0;

int number = 0;

string numberstr = "";

string part = "";

string pattern = "0000 ";

decimalformat df = new decimalformat(pattern);

connection connection = ormdao.jdbctemplate.getconnection();

connection.setautocommit(false);

string sql = "insert into t_phonexy (id,phone,part,number,prefix) values (?,?,?,?,?)";

preparedstatement prest = connection.preparestatement(sql, resultset.type_scroll_sensitive,resultset.concur_read_only);

//生成4000000萬個id.使用linkedlist提高插入效率

listids = new linkedlist();

while(number < 4000000)

//對400w個id隨機打亂隨機.

collections.shuffle(ids);

//將linkedlist轉換為陣列,提高取資料的效率

integer idss = new integer[400000];

idss = ids.toarray(idss);

//記錄取數索引

int idsindex = 0;

for(index = 0 ;index資料庫mysql5.0  表型別myisam.只有主鍵索引.  耗時 :0時-9分-35秒

我又測試了一下,注釋掉隨機主鍵部分的**,看看耗時是多少.耗時 :0時-8分-46秒

只慢了不到一分鐘,只慢了49秒而已~~

剩下的工作就簡單多了,取出資料,生成檔案.

class.forname("com.mysql.jdbc.driver");

connection connection = drivermanager.getconnection("jdbc:mysql://localhost:3306/xbexam?characterencoding=utf-8", "root", "123123");

// connection connection = ormdao.jdbctemplate.getconnection();

statement statement = connection.createstatement();

resultset resultset = statement.executequery(sql);

system.out.println("*****資料庫訪問結束*****==");

listlist = new linkedlist();

while(resultset.next())

int count = 0;

int filecount = 0;

while(iterator.hasnext())

count++;

} //寫出檔案

file file = new file("d:/"+filecount+".txt");

filecount++;

file.createnewfile();

filewriter filewriter = new filewriter(file);

filewriter.write(buffer.tostring());

filewriter.flush();

filewriter.close();

生成檔案..耗時 :0時0分-13秒...簡直~~~簡直~~

一切都搞定了..呵呵~~**要留好,不一定什麼時候還能用得上.

使用python,批量生產條形碼

在工作中,有時會遇見需要將數字轉換為條碼的問題,每次都需要開啟條碼轉換的 一次次的轉換後截圖,一兩個還行,但是當需要轉換的數量較多時,就會顯得特別麻煩,弄不好還會遺漏或者重複,為了解決這個問題,使用python寫了以下指令碼,用來解決此問題 1 安裝python barcode庫和pillow庫 需...

2023年前我國載人飛船將批量生產

我國空間站建成後,負責運送航天員的載人飛船將根據空間站任務需要,像航班一樣發射。全國人大代表 中國航天科技集團 五院載人飛船系統總設計師張柏楠 9 日向記者表示,未來我國飛船將告別 訂製 開始小批量生產。在我國載人航天工程空間實驗室任務階段,主要任務是突破和掌握關鍵技術,載人飛船主要根據攻關任務確定...

傳英特爾欲批量生產上網本 採用Android系統

英特爾最近公布了其第四財季的財報,由於市場對計算機的整體需求下滑,導致其營收大幅下滑.在該公司 會議上,其ceo歐德寧與分析師談及了上網本現象,暗示上網本不會大規模蠶食筆記本的銷售份額,只會逐漸增加整個市場的份額.不過無論如何,上網本的銷售量在不斷增長,英特爾當然會加入到任何具有增長潛力的領域中去....