千万級のデータはexcelの少しの心得を書き出します
1829 ワード
最近プロジェクトをして、MYSQLデータベースを使って、千万級のデータをEXCELでエクスポートするように要求して、長い間試して、いくつかの方法を見つけました.
1.バッチ読み取り、LIMITで、このデータ量が小さいときはまあまあ、データ量が大きいとその場でバカになる
2.ストリーミング方式の読み取りを使用して、3分を費やして、速度は更に最適化することができて、メモリを占有するのが大きすぎて、1000 Wデータは3 Gの運存を占めて、キーワードは
resultSetType="FORWARD_ONLY" fetchSize="-2147483648"
しかし、これではボスは私に迷惑をかけなければなりません.しかし、百万ぐらいのデータはこれを使って、スピードが速いですね.
3.両者を組み合わせてmybatisでストリーミング読み取りをオンにし、バッチ読み取りを有効にすると、データ量が大きいときにバッチ読み取りも遅くなりません.バッチデータを読み取り、バッチデータを処理して空にし、次のセグメントを読み取ると、10分ほどかかり、256 Mメモリも正常に動作し、easyexcelに合わせます.
ExcelWriter excelWriter = null;
try {
ServletOutputStream outputStream = response.getOutputStream();
excelWriter = EasyExcelFactory.write(outputStream, Device.class).build();
int j = (int) Math.ceil(i / 500000.0) + 1;
for (int k = 1; k < j; k++) {
List devices = deviceMapper.selectDevicenub(id, (k - 1) * 500000, 500000);
WriteSheet writeSheet = EasyExcel.writerSheet(k, " " + k).build();
excelWriter.write(devices, writeSheet);
devices=null;
}
} catch (IOException e) {
e.printStackTrace();
}
excelWriter.finish();
集合を必ずクリアしてください