最近、数百万行のテーブルを読み取るバッチを作成する必要がありました。テーブルには約12列あり、操作を行うだけで済みますread
。しかし、すべてのフィールドが必要だったため、永続オブジェクトの使用を検討しました。
私は実際にそれを達成するためだけに、微調整なしで最も基本的なコードのみを使用しました。とJPA
でカスタムページングを使用せざるを得なかったため、非常に面倒でした。興味があれば、以下のおおよそのコードのハイパーリンクを表示できます。デフォルトのXMLファイルなどを除いて、実際には何もありません。maxResults
minResults
JPAコード:http
://codeviewer.org/view/code:297e
Hibernateコード:http
://codeviewer.org/view/code:297f
JDBCコード:上記と同じですが、末尾に「d」が付いています(申し訳ありませんが、2つのリンクしか投稿できません)
完成した操作の結果はそのようなものでした。私は読み取り操作について話しているだけです:
JPA: Per 5 seconds: 1.000||Per Minute: 12.000||Per Hour: 720.000
Hibernate: Per 5 seconds: 20.000||Per Minute: 240.000||Per Hour: 14.400.000
JDBC: Per 5 seconds: 50.000-80.000||Per Minute: 600.000-960.000||Per Hour: 36.000.000-57.600.000
説明することはできませんが、JPAはばかげています。それは大きな悪い冗談にすぎない可能性があります。面白いことに、Hibernateコードと同じ速度で起動しますが、約30.000のレコードの後、5秒あたり1.000の読み取り操作で安定するまで、ますます遅くなりました。約10万件の記録を終えてその時点に達しました。しかし正直なところ...その速度には意味がありません。
どうしてこんなことに?説明してください。何が間違っているのか本当にわかりません。しかし、デフォルト設定であっても、それほど遅くなることはないと思います。ありえないし、あってはならない!それと比較して、休止状態とJDBC
速度は許容可能であり、常に安定しています。