Java - 700000 registros desde java a Mysql lanza la excepción Java.out.memory

 
Vista:
Imágen de perfil de Brandon
Val: 5
Ha aumentado su posición en 6 puestos en Java (en relación al último mes)
Gráfica de Java

700000 registros desde java a Mysql lanza la excepción Java.out.memory

Publicado por Brandon (3 intervenciones) el 21/06/2017 02:20:32
colegas una consulta tengo que insertar a una BD mysql un promedio de 700000 registros diarios cuál creen que sea la forma más eficiente de hacerlo desde Java actualmente lo hago uno por uno pero tarda demasiado casi 7 Hrs y a los 500000 registros lanza la excepción Java.out.memory




Ayuda de antemano gracias ☺️
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 358
Bronce
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

700000 registros desde java a Mysql lanza la excepción Java.out.memory

Publicado por Andrés (340 intervenciones) el 21/06/2017 06:48:30
El origen de esos registros cómo es?, es decir, es un fichero, varios ficheros?

Quá usas para persistencia?, jdbc, mybatis, hibernate, jpa?

Si puedes usar jdbc, genera archivos de 100000 registros, es un valor X,

Agreaglos a un directorio

Que un servicio lea cada archivo del directorio y por cada uno de ellos, ejecuta un thread donde el run sea algo como esto:

dbConnection.setAutoCommit(false);//commit trasaction manually

String insertTableSQL = //Insert statement;

PreparedStatement = dbConnection.prepareStatement(insertTableSQL);

para cada uno de los registros en el fichero hacer
preparedStatement.setInt(1, /*valor 1*/);
preparedStatement.setString(2, /*valor 2*/");
preparedStatement.setString(3, /*valor 3*/);
preparedStatement.setTimestamp(4, /*valor 4*/);

fin_para

preparedStatement.addBatch();

preparedStatement.executeBatch();

dbConnection.commit();

y mmm listo solo faltaría hacer pruebas para ver si el numero de threads con esa cantidad de registros es demasiado y necesitas más memoria
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

700000 registros desde java a Mysql lanza la excepción Java.out.memory

Publicado por Costero (139 intervenciones) el 21/06/2017 20:07:06
Este codigo lo encontre en la internet. Segun el autor haciendolo asi evita run out of memory.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
String sql = "insert into employee (name, city, phone) values (?, ?, ?)";
Connection connection = new getConnection();
PreparedStatement ps = connection.prepareStatement(sql);
 
final int batchSize = 1000;
int count = 0;
 
for (Employee employee: employees) {
 
	ps.setString(1, employee.getName());
	ps.setString(2, employee.getCity());
	ps.setString(3, employee.getPhone());
	ps.addBatch();
 
	if(++count % batchSize == 0) {
		ps.executeBatch();
	}
}
ps.executeBatch(); // insert remaining records
ps.close();
connection.close();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 358
Bronce
Ha disminuido su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

700000 registros desde java a Mysql lanza la excepción Java.out.memory

Publicado por Andrés (340 intervenciones) el 21/06/2017 20:09:10
Yeah, pero employees tendria los 700000 registros en tu caso
mmm prueba
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

700000 registros desde java a Mysql lanza la excepción Java.out.memory

Publicado por Costero (139 intervenciones) el 21/06/2017 20:30:08
Otra recomendacion que dan es utilizar LOAD DATA INFILE, si la data proviene de un file.

Aqui dejo el enlace: https://dev.mysql.com/doc/refman/5.7/en/load-data.html

Dicen que es super, super rapido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar