Ho un file di testo ~ 6 GB che ho bisogno di analizzare e poi persiste. "Analizzando" sto leggendo una riga dal file (di solito 2000 caratteri), creo un oggetto Car dalla linea e successivamente lo mantengo.problema di prestazioni di ibernazione, persistono uno per uno o di massa?
Sto utilizzando un pattern consumer consumer per analizzare e persistere e mi chiedo se fa alcuna differenza (per motivi di prestazioni) per mantenere un oggetto alla volta o 1000 (o qualsiasi altra quantità) in un commit?
Al momento, mi ci vuole> 2hr per mantenere tutto (3 milioni di righe) e sembra troppo tempo per me (o potrei sbagliarmi).
Attualmente sto facendo questo:
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();
}
}
Prima di fare tutte le modifiche progettuali Mi chiedevo se c'è un motivo per cui questo progetto è meglio (o meno) e se sì, quali dovrebbero essere le vetture. dimensione()? Inoltre, l'apertura/chiusura della sessione è considerata 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();
}
}
Proverò questo codice per le prestazioni e tornare a questa risposta. Grazie! Il dosaggio – adhg
è migliore! – adhg