MySQL5.6を使用したいと思っています。Javaの経験は多数ありますが、PlayやScalaは初めてです。
調べてみると、JavaではEbeanを使うのが基本のように感じました。しかしEbeanでは、select句に指定する列を減らして無駄なデータを取ってこないようにしたり、USE INDEX などのヒントを使うことができる記述が見つかりませんでした。
自動生成されるSQLを使うしかなく、あとでパフォーマンス問題が出てきそうで不安です。
Ebeanでもそうしたことができる仕組みはあるのでしょうか。また、JavaではなくScalaだとAnormがあり、こちらはSQLを直接書けるので、そういう心配はないということでしょうか。しかしControllerではJavaを使いたいです。Model部分だけScaleでAnormを使うということは現実的なのでしょうか。
まとめると、
(1) Ebeanでもselect句の列の指定やMySQLのヒントは利用可能なのか
(2) ScalaのAnormなら可能なのか
(3) ControllerはJavaのままで、ModelだけScala+Anormにしてもいいのか。いいならそのやり方について。
以上、アドバイスいただけると幸いです。
Ebeanでもselect句の列の指定でググればぐぬぬダイアリーが出てくるわ。
辿ればJava Play framework 2.0で、ebeanを利用した直接SQL 一言多いプログラマーの独り言にも行きつくわね。
でもあたしはJPAを推したいわ。JPQLのほうがNativeより早いという結果もあるわよ。
NativeQueryじゃだめ?~JPAクエリ表現ごとのパフォーマンス比較 - Dev3TechHack
JPQL速かった!~JPAクエリ表現ごとのパフォーマンス比較 その2 - Dev3TechHack
Ebean.createSqlQuery を使えば、ネイティブSQLが記述できます。
なるほど、こういうのがあるんですね、ありがとうございます。
Ebeanでもselect句の列の指定でググればぐぬぬダイアリーが出てくるわ。
辿ればJava Play framework 2.0で、ebeanを利用した直接SQL 一言多いプログラマーの独り言にも行きつくわね。
でもあたしはJPAを推したいわ。JPQLのほうがNativeより早いという結果もあるわよ。
NativeQueryじゃだめ?~JPAクエリ表現ごとのパフォーマンス比較 - Dev3TechHack
JPQL速かった!~JPAクエリ表現ごとのパフォーマンス比較 その2 - Dev3TechHack
なるほどJPAですか。SQLより速いというのは確かに気になりますね。でもこれDB製品に特化した記法は使えないわけですよね。単純なクエリじゃなく、凝ったやつでも、チューニング頑張ったSQLより速いんでしょうか。
なんというか、すべてを1秒でも速くしたい、というわけではないですが、何分たっても終わらないとか、そういう話にならないくらい重くなった場合に、インデックス+ヒントで劇的に改善して回避、みたいな余地があるのかという点がまだ心配です。
以前、SAStrutsでSQL自動生成を全面的に使っていて、結局そのあたりで困ってしまって部分的に生のSQLに書き換えた経緯があります。
しかしすごく参考になりました。ありがとうございます。
(1) Ebeanでもselect句の列の指定やMySQLのヒントは利用可能なのか
ヒントを書くにはSQLを生で書き下ろすしかありませんが、取得列指定はEbeanの枠内でも簡単です。
フィールドを絞り込んだエンティティクラスを別に作ればいいのです。
などと。
ここで、色気を出して User extends UserBasic などとやろうとすると実行時にこけます。EBeanは単純なクラスしかエンティティとして認めません。
それでもあえてコードの重複を排除したいときは User クラスに @Embedded アノテーションを付けて UserBasic 型のフィールドを設けます。
ちなみに心配になったので念のため確認ですが、内部的に、select * ではなく、ちゃんとエンティティのフィールドの分だけでselect句を生成してる、ということですよね?
もちろんです!
なるほどJPAですか。SQLより速いというのは確かに気になりますね。でもこれDB製品に特化した記法は使えないわけですよね。単純なクエリじゃなく、凝ったやつでも、チューニング頑張ったSQLより速いんでしょうか。
2014/06/27 13:30:26なんというか、すべてを1秒でも速くしたい、というわけではないですが、何分たっても終わらないとか、そういう話にならないくらい重くなった場合に、インデックス+ヒントで劇的に改善して回避、みたいな余地があるのかという点がまだ心配です。
以前、SAStrutsでSQL自動生成を全面的に使っていて、結局そのあたりで困ってしまって部分的に生のSQLに書き換えた経緯があります。
しかしすごく参考になりました。ありがとうございます。