解析して後で保持する必要があるテキスト ファイル ~6GB があります。「解析」することで、ファイルから 1 行 (通常は 2000 文字) を読み取り、その行から Car オブジェクトを作成し、後でそれを永続化します。
プロデューサー コンシューマー パターンを使用して解析と永続化を行っていますが、(パフォーマンス上の理由から) 一度に 1 つのオブジェクトを永続化するか、1 回のコミットで 1000 (またはその他の量) を永続化することに違いがあるかどうか疑問に思いますか?
現時点では、すべて (300 万行) を永続化するのに 2 時間以上かかります。
現在、私はこれをやっています:
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();
}
}
デザインを変更する前に、このデザインの方が優れている理由があるかどうか (またはそうでない理由) を考えていました。また、セッションの開始/終了は高価と見なされますか?
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();
}
}