Tengo un archivo de texto ~ 6GB que necesito analizar y luego persistir. Al 'analizar' estoy leyendo una línea del archivo (generalmente 2000 caracteres), creo un objeto-coche de la línea y luego lo conservo.problema de rendimiento de hibernación, persiste uno por uno o la masa?
Estoy usando un patrón de consumidor productor para analizar y persistir y me pregunto si hace alguna diferencia (por razones de rendimiento) para persistir un objeto a la vez o 1000 (o cualquier otra cantidad) en una confirmación?
Por el momento, me lleva> 2hr persistir todo (3 millones de líneas) y me parece demasiado tiempo (o puedo estar equivocado).
Actualmente estoy haciendo esto:
public void persistCar(Car car) throws Exception
{
try
{
carDAO.beginTransaction(); //get hibernate session...
//do all save here.
carDAO.commitTransaction(); // commit the session
}catch(Exception e)
{
carDAO.rollback();
e.printStackTrace();
}
finally
{
carDAO.close();
}
}
Antes de hacer cualquier cambio de diseño que me preguntaba si hay una razón por la que este diseño es mejor (o no) y si es así, cuáles deben ser los coches. tamaño()? Además, ¿la sesión abierta/cerrada se considera costosa?
public void persistCars(List<Car> cars) throws Exception
{
try
{
carDAO.beginTransaction(); //get hibernate session...
for (Car car : cars)
//do all save here.
carDAO.commitTransaction(); // commit the session
}catch(Exception e)
{
carDAO.rollback();
e.printStackTrace();
}
finally
{
carDAO.close();
}
}
Voy a probar este código para el rendimiento y volver a esta respuesta. ¡Gracias! – adhg
por lotes es mejor! – adhg