S2DaoとS2Hibernate性能テスト(新規追加のみ)をやってみた。

結論から行くとS2Dao思ったより結構早くて思ったよりいい感じでもやっぱり
Hiberanteを使おうかなぁ・・。

気になったのはなぜかOracleの場合はS2DaoでOutOfMemoryErrorが発生したこと
どういうこと??(非常にあやしい・・)

PS:MYSQLのバージョンが低いのは気にしちゃやーよ。 DB比較はちょっとやってみようって思っただけなんで

測定結果は下記

<テスト内容>

10万件のデータを単純にインサートしてみる。

<結果>

MySql 4.0.17
 
 S2Hibernate:EntityManager.persist(entity);
 計測結果 -->[71.985]秒
 
 S2Dao:insert(entity)
 計測結果 -->[93.016]秒
 
 S2Dao:insertBatch(entityList)
 計測結果 -->[69.859]秒

Oracle9i R2
 
 S2Hibernate:EntityManager.persist(entity);
 計測結果 -->[27.328]秒
 
 S2Dao:insert(entity)
 計測結果 -->[239.078]秒
 
 S2Dao:insertBatch(entityList)
 計測結果 -->[18.281]秒

 ※ -Xmx256m オプション付きじゃないと落ちた。
 exeption:java.lang.OutOfMemoryError: Java heap space

<コード>

		int insertCount = 100000;
//		ArrayList list = new ArrayList();
		for (int i = 0; i < insertCount; i++) {
			Employee employee = new Employee();
			employee.setEmpno(new Integer(i));
			employee.setEname("SCOTT");
//			list.add(employee);
			employeeDao.insert(employee);
		}
//		employeeDao.insertBatch((Employee[])list.toArray(new Employee[list.size()]));

HibernateのDaoはこんな感じにした
	public void insert(Employee employee) {
		entityManager.persist(employee);		
	}

	public void insertBatch(Employee[] employee) {
		for (int i = 0; i < employee.length; i++) {
			entityManager.persist(employee[i]);
		}
	}

もしかしたら使い方自体が間違ってるかもしれないので
間違っているところとか気になることあったら指摘してください。