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]); } }
もしかしたら使い方自体が間違ってるかもしれないので
間違っているところとか気になることあったら指摘してください。