Мне нужно прочитать записи из файла CSV и сохранить их в базе данных Mysql.Как вставить записи быстрее
Я знаю о «LOAD DATA INFILE», но в моем случае мне нужно получить отдельную запись из файла, проверить, находится ли он в допустимом формате/длине и т. Д., А затем сохранить его в базе данных.
// list to store records from CSV file
ArrayList<String> list = new ArrayList<String>();
//Read one line at a time
while ((nextLine = reader.readNext()) != null)
{
for (String number : nextLine)
{
if (number.length() > 12 && number.startsWith("88"))
{
list.add(number);
} else if (number.length() > 9 && number.startsWith("54"))
{
list.add(number);
}
else if (number.length() > 8 && number.startsWith("99"))
{
list.add(number);
}
else
{
// ....
}
// method to insert data in database
insertInToDatabase(list);
}
}
и способ вставки записи в БД: taken from here
private void insertInToDatabase(ArrayList<String> list)
{
try
{
String query = "INSERT INTO mytable(numbers) VALUES(?)";
prepStm = conn.prepareStatement(query);
for (String test : list)
{
prepStm.setString(1, test);
prepStm.addBatch();// add to batch
prepStm.clearParameters();
}
prepStm.executeBatch();
}
}
Это работает, но скорость, с которой записи вставив очень медленно. Есть ли способ, с помощью которого я могу быстрее вставлять записи.
Не могли бы вы дать более подробную информацию? Сколько строк соответствует CSV. содержат? Вы проверили, сколько времени прошло чтение файла/записи в БД? – eiselems
прямо сейчас, для тестирования файла CSV содержится 90 тыс. Записей, и для вставки всех записей потребовалось приблизительно 45 минут. –
Я имею в виду, вы проверили, сколько времени требуется для чтения и вставки? Вы можете просто вставить три System.out.println (System.currentTimeMillis()). Один до начала чтения, один после завершения считывания и один после вставки в db Таким образом, вы можете определить, действительно ли это вставка в db (или сам анализ), который так медленен – eiselems