У меня есть Java-приложение, которое выполняет следующие действия:
Чтение CSV-файла с удаленного сервера.
Проверка формата ( длина, формат даты, формат чисел и т. д.) и наличие в базе данных (существуют ли данные в БД).
Вставьте все действительные данные в БД.
< /ol>
До сих пор мой подход заключался в следующем:
Читать CSV-файл с однозначностью и зацикливать все строки. >
Разделите строку по разделителю на отдельную переменную, проверьте каждую переменную (например, длину, формат даты, существуют ли данные в БД и т. д.) и добавьте в подготовленный оператор с помощью .addBatch()< /li>
Вставьте действительные данные с помощью .executeBatch()
на данный момент для этого требуется 22 минуты. обработать CSV-файл объемом 280 тыс. строк, что довольно много.
Пример CSV:
Я понятия не имею, как его оптимизировать. Я хотел бы знать, как я могу улучшить этот подход или даже использовать совершенно другой подход, если это необходимо.
У меня есть Java-приложение, которое выполняет следующие действия: [list] [*]Чтение CSV-файла с удаленного сервера. [*]Проверка формата ( длина, формат даты, формат чисел и т. д.) и наличие в базе данных (существуют ли данные в БД). [*]Вставьте все действительные данные в БД. < /ol> До сих пор мой подход заключался в следующем:
[*]Читать CSV-файл с однозначностью и зацикливать все строки. > [*]Разделите строку по разделителю на отдельную переменную, проверьте каждую переменную (например, длину, формат даты, существуют ли данные в БД и т. д.) и добавьте в подготовленный оператор с помощью .addBatch()< /li> Вставьте действительные данные с помощью .executeBatch() [/list] на данный момент для этого требуется 22 минуты. обработать CSV-файл объемом 280 тыс. строк, что довольно много. Пример CSV: [code]ID|TransID|TransDate|TransAmount|TransType
123ABC1234|TRXL123456|25102024|000000016343100|N [/code] Пример кода: [code]public void consumeCsvFile() { File[] listOfFiles = new File(outUrl).listFiles(); try { for(File file : listOfFiles) { try (Reader reader = new InputStreamReader(new FileInputStream(file), "UTF-8") ){ List parsedRows = parser.parseAll(reader);
if(isValid){ // here code to insert dataRow to Database. }else{ // Data row not valid, add to list to write into ErrorFile in the end. } } } } } catch (Exception e) { throw new IllegalStateException("Unable to open input file", e); } }
private boolean validateDate(String dt) { try { if(dt.trim().length() != 8){ return false; }else { SimpleDateFormat sdf = new SimpleDateFormat("ddMMyyyy"); sdf.setLenient(false); try{ Date javaDate = sdf.parse(dt); }catch (Exception ex){ return false; } } } catch (Exception ex){ return false; } return true; } [/code] Я понятия не имею, как его оптимизировать. Я хотел бы знать, как я могу улучшить этот подход или даже использовать совершенно другой подход, если это необходимо.