java快速的生成測試資料
一個程式設計師,需要時刻關注新的技術方向,或者回顧一些老的技術知識,來完善自己的技術棧,或者加深細化某些知識點,思而不學則怠,所以我們需要一些測試來夯實我們的技術理論,如何短時間(數小時)獲取數以億計的測試資料?
總體的思路是:定時任務,多執行緒,批量插入,優化資料庫引數。
通過定時任務,可以讓程式按照一定的時間(如幾秒)自動觸發一次;利用執行緒池,每次觸發的時候,都有一個執行緒去處理程式,這樣是單執行緒的數倍獲取測試資料;在利用批量插入,可以一次插入50000條資料(具體量,可以根據jvm的記憶體看),每次程式迴圈執行100次,這樣,一個執行緒,執行一次程式可以獲取5000000的資料量,更具mysql的效能是沒有問題的,大概需要兩根分鐘左右,多個執行緒一起,可以獲取跟多的資料,具體程式如下:
測試實體(和資料庫的table對應)
public classTbTest {
privateIntegerid;
privateStringname;
privateIntegerage;
privateDatebrithday;
privateIntegerhigh;
privateIntegerwigth;
privateStringschool;
privateStringhappy;
privateShortisboy;
省略getter,setter方法
}
多執行緒定時任務:
@Scheduled(cron ="0/30 * * * * ?")
public voidschudleThread()throwsException {
ExecutorService tp = Executors.newCachedThreadPool();
tp.execute(newRunnable() {
@Override
public voidrun() {
logger.info("==========開始批處理 當前的執行緒名稱為 ==== "+Thread.currentThread().getName()+"=========");
String[] f =newString[]{"張","王","周","武","李",
"胡","趙","陳","苗","戴","習","毛","朱","韓","陸"};
String[] s =newString[]{"克","明","發","代發","犯的",
"和","我","人","同","娟","娟娟","麗","美麗","利","陸"
,"空間","改","辦法","航空",
"留","泰","晨光","長城","層層","莉莉","胡霍","娜娜","大","光榮"};
Random random =newRandom();
longc = System.currentTimeMillis();
List tests =newArrayList<>(100);
for(inti =0; i <500000; i++) {
if(i >0&& (i %40000) !=0) {
TbTest tbTest =newTbTest();
tbTest.setAge(random.nextInt(100));
try{
tbTest.setBrithday(DateUtil.parseDate(random.nextInt(2017) +"-"+ random.nextInt(12)
+"-"+ random.nextInt(30) +" "+ random.nextInt(24) +":"+ random.nextInt(60) +":"+ random.nextInt(60),"yyyy-MM-dd HH:mm:ss"));
}catch(ParseException e) {
e.printStackTrace();
}
tbTest.setHigh(random.nextInt(200));
tbTest.setIsboy((short) random.nextInt(2));
tbTest.setName(f[random.nextInt(f.length-1)] + s[random.nextInt(s.length-1)]);
tbTest.setSchool("學院"+ random.nextInt(10000));
tbTest.setWigth(random.nextInt(200));
tests.add(tbTest);
}
if(i >0&& (i %40000) ==0) {
tbTestMapper.inserts(tests);
tests.clear();
}
}
logger.info("耗時:"+ (System.currentTimeMillis() - c) /1000);
}
});
}
mapper檔案
@Component
public interfaceTbTestMapper {
intbatchinsert(@Param("tests") List tests);
}
xml檔案sql
insert into tb_test
name,
age,
brithday,
high,
wigth,
school,
happy,
isboy
相關文章
- Eolink Apikit 快速發起 API 測試,一鍵生成測試資料API
- Mock生成測試資料Mock
- shell生成測試資料
- laravel seed生成測試資料Laravel
- Sql Server生成測試資料SQLServer
- mysql 動態生成測試資料MySql
- 測試資料之自動生成
- 如何優雅地生成測試資料
- 介面測試的時候如何生成隨機資料進行測試隨機
- 使用 Laravel 資料填充功能生成中文測試資料Laravel
- MySQL 快速創造百萬測試資料MySql
- MySQL 資料庫生成 10000 條測試資料MySql資料庫
- Sysbench測試神器:一條命令生成百萬級測試資料
- Python factory_boy 生成測試資料Python
- Redis快速產生測試資料的三種方法Redis
- 讓測試更方便系列:快速建立資料
- Elasticsearch 8.X 如何生成 TB 級的測試資料 ?Elasticsearch
- 竟然拿ETL當測試資料生成工具使用
- Mysql生成100w條測試資料MySql
- java的geojson格式測試資料模擬JavaJSON
- 資料遷移指令碼的快速生成指令碼
- python 使用 random模組生成隨機測試資料Pythonrandom隨機
- 為 java 開發者設計的效能測試框架,用於壓測+測試報告生成Java框架測試報告
- DBA福音 | 如何無視資料量快速搭建測試資料庫資料庫
- gpt生成測試GPT
- 快速生成一組環形資料
- 測試資料
- Java單元測試之JUnit 5快速上手Java
- 自動化測試資料生成:Asp.Net Core單元測試利器AutoFixture詳解ASP.NET
- 大資料測試與 傳統資料庫測試大資料資料庫
- 基於儲存過程的百萬級測試資料自動生成儲存過程
- 開源神器:自動生成隨機 mock 資料測試物件隨機Mock物件
- 如何在Python中用scikit-learn生成測試資料集Python
- IMUSTOJ運維——批量自動化生成題目測試資料運維
- 圖資料庫基準測試 LDBC SNB 系列講解:Schema 和資料生成的機制資料庫
- 功能測試之存量資料新與增資料測試
- JB的測試之旅-測試資料的準備/構造
- Visual Studio 2010生成SQL Server測試資料SQLServer