[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 02/24 23:25 / Filesize : 149 KB / Number-of Response : 521
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]
|
↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました |
Java⇔RDBのMapping-Frameworkを語るスレ Vol.4
- 1 名前:デフォルトの名無しさん mailto:sage [2005/12/16(金) 11:54:44 ]
- 前スレ:
Java⇔RDBのMapping-Frameworkを語るThre Vol.3 ttp://pc8.2ch.net/test/read.cgi/tech/1090653286/ 過去スレ: 「Java⇔RDBのMapping-Frameworkを語るスレ Vol.2」(落ち) ttp://pc5.2ch.net/test/read.cgi/tech/1086315004/ 「Java⇔RDBのMapping-Frameworkを語るスレ」(落ち) ttp://pc5.2ch.net/test/read.cgi/tech/1049030272/ ●まずは、基礎知識と技術選択指針など [The Fundamentals of Mapping Objects to Relational Databases] (RDBに対するオブジェクトマッピングの基礎(英語)) ttp://www.agiledata.org/essays/mappingObjects.html [O/R-Mappingツールの比較サイト(英語)] ttp://c2.com/cgi-bin/wiki?ObjectRelationalToolComparison [Catalog of Patterns of Enterprise Application Architecture (PoEAA)] ttp://www.martinfowler.com/eaaCatalog/ あとは>>2以降
- 449 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:31:24 ]
- >検索→キャッシュ生成→(他スレッドなどがDB更新)→キャッシュの値は更新前の値のまま
~~~~~~~~~~~~~~~~~~~~~~~ これ何よ。こんなことするなよ。
- 450 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:34:37 ]
- アノテーション使えるDbUtilsが欲しい…
- 451 名前:447 mailto:sage [2006/11/04(土) 01:39:13 ]
- >>449
えーと、シングルスレッドで、順番に更新しないと駄目という意味??
- 452 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 01:44:57 ]
- Hibernateのキャッシュは2段階になってる
1次キャッシュ(Session)は一つのスレッド・トランザクションに閉じてる 自分でアクセスしたエンティティを再利用するだけだから遅延はない 2次キャッシュは複数のスレッド・トランザクションで共有されて実装を選択できる 2次キャッシュの実装に分散キャッシュを使えば複数のプロセスでも共有できる 遅延に関しては実装次第 一定時間でリフレッシュするのもあれば他プロセスから更新通知を受けるのもある 分散ロックや分散トランザクションをサポートしたものもある 当然遅延とパフォーマンスはトレードオフだから用途に合わせて実装を選べばよろし
- 453 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 02:00:11 ]
- >>451
そうじゃねーべ。 Hibernateでも何でもいいから一旦勉強してくれ!
- 454 名前:447 mailto:sage [2006/11/04(土) 02:06:22 ]
- >>452
なるほど。 1次キャッシュなら、遅延は無いものの、キャッシュとしての効果は薄いと思うし、 2次キャッシュは、どうしても遅延が発生するだろうと感じていたのです。 キャッシュを利用して高速になるからといって、やはり遅延することを無視できないわけですね。 >>441の話だと、遅延があり得ないように、聞こえたので疑問に思っただけです。 >>453 ごみんなさい。勉強しときます。
- 455 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 02:13:46 ]
- だから、Hibernateのデフォルト設定では
更新前に一旦SELECTして同期するようになっている。 DBを他システムからも操作されることが想定される場合には SELECTを含むクエリ発行のたびに毎回キャッシュと同期化するようにもできる。 他システムから操作されないのなら、キャッシュを最大限に利用する設定にすることも出来る。
- 456 名前:デフォルトの名無しさん [2006/11/04(土) 11:04:04 ]
- >>438
リフレクションやっぱ遅いのか。 ユーザ数の少ない業務アプリケーションしか作ったことないから、 SQL以外の速度気にしたことないな。。
- 457 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 11:10:57 ]
- 気にすることないよ実際。
>438はまともにプロファイリングしたことないかな? 相当いびつな使い方をしない限り影響はない。DBのそれと比べると誤差の範囲。
- 458 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 12:31:30 ]
- なんか Hibernate & DbUtils なモードだな。
DbUtils だけど、キャッシュはともかく、遅延ロードが無いことに関しては ナマSQLを書く以上、SQLの書き方/コーディング次第な所なんで 大規模・高負荷なシステムで使えんって理由には直結しないんじゃないかな。
- 459 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 14:10:33 ]
- >>457はdbUtilを使ってまともなアプリを作ったことが無いのだろうか。
- 460 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:02:20 ]
- 大規模・高負荷とか言ってるけど、逆にそういう用途にHibernateとかのORMは
使うのを躊躇するけどな。 キャッシュがあるといっても、このレベルじゃ到底信用できないし。 実際そういうところに使っている人いる? 俺の場合、パフォーマンスが必要なところでは基本JDBC直、得失を考慮したうえで 問題ない部分ではdbUtilsを使って楽をしてもいいかな、という感じ。 Hibernateを使うのは、パフォーマンスをあまり気にする必要がないところで ちょっと複雑なデータを永続化したい場合だな。
- 461 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:26:06 ]
- 今のHibernateはEJBの実装。
大規模システムでの利用を前提にしたプロダクトだと思うけど。
- 462 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 16:42:50 ]
- 元々EJBは大規模つぅか分散システムのアーキだしなあ。
パフォーマンスクリティカルな案件じゃ JDBC直(+軽いラッパ)が実状じゃなかろうかと
- 463 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 21:51:05 ]
- 一口に大規模高負荷と言っても、同時多アクセスのWebシステムなのか
大量データ一括処理のバッチなのかで大きく違うよね 前者ならHibernateの2次キャッシュが活用できそうだし 後者はやはりJDBC直書きか(というかストアド使えるならそっち使った方がいいかも) >>462 分散前提のEJB2と分散前提ではなくなったEJB3は大きく異なる。 更に、EJB3からも独立したJPAは分散とは無関係
- 464 名前:デフォルトの名無しさん [2006/11/04(土) 23:04:37 ]
- Hibernateにはバッチは向いてないの?
- 465 名前:デフォルトの名無しさん [2006/11/04(土) 23:05:40 ]
- うちの会社でHibernateか、Torqueか、iBatisか、JDBC直を
検討しているんだけど、どれがいいの? 個人的には 通常:Hibernate バッチ、複雑なSQL:JDBC直 かなあ
- 466 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:17:23 ]
- >>464
バッチには向いてないだろうね。 >>465 あなたの見解は正しいと思う。 Torqueは論外。
- 467 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:27:07 ]
- >>449
Webアプリなんかじゃ、ふつーに別スレッドに更新されることが、あるんじゃねーの?
- 468 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:47:26 ]
- >>467
遅いし、馬鹿だし、救いようがないな
- 469 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:48:32 ]
- >>467
あるよね。
- 470 名前:デフォルトの名無しさん mailto:sage [2006/11/04(土) 23:49:05 ]
- >>465
自分で選べないくらいプロダクトの特性を理解してないなら どれを選んでも失敗する
- 471 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 00:14:54 ]
- 煽ってるだけだから気にすんな
- 472 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 00:53:17 ]
- しかし、なんだ。
バッチ系にもWEB系にも使えるものてのは、ありそうでないもんだな
- 473 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 01:04:43 ]
- 万能ってのは無いよ。数あるフレームワークを適材適所で使うのが現実的。
- 474 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 05:12:40 ]
- うちでは、勉強するってモチベーションが低いのか、ちっともHibernateや他ORMが受け入れられない。
複雑なクエリ文を、しこしか書いている人たちに、HQL使えって言うのは厳しいし、 無理して使ってもらうこともないんだけど。 Hibernate最高って人は、 (実行パフォーマンスに目をつぶっても)開発側が楽だから? それとも、(開発は多少面倒になるが)実行時に効果的だから? もしくは、その両方?
- 475 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 07:38:32 ]
- 今からHibernateのAPIやHQLを覚える必要はほとんど無い。
JPA/JPQLを使えよ。
- 476 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 15:30:26 ]
- 開発効率も品質もそれなりの前提知識・意欲を持つ人が集まることで
ある程度保障されるものだし、何とも言えないんじゃ。 ただ、コンパクトなJDBCラッパだけで色々な案件を 問題無く捌けてりゃ、それはそれでハッピーだとは思う。
- 477 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 19:30:17 ]
- >>474
実行パフォーマンスについては、上手く作ればWebアプリ等では逆に早くなることもある。 開発に関しては、たしかに覚えることは多いが、 リスナーを使ってDBのトリガーみたいな処理をプログラムを使って書けたりとか、 あとは特に排他制御実装が非常に簡単になるのが嬉しい SQLも使えるから、難しいところは無理にHQL使わずに積極的にSQL使えばいいし (FROM句への副問い合わせやUNION以外はだいたいHQLで書けるけど)
- 478 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 19:36:19 ]
- たとえば、よくあるWebアプリの一覧検索から1件選んで更新処理とかする画面だと
一覧を取ってくる所は複雑な問い合わせ文になることが多いから SQLをORMに投げて結果をBeanのListで受け取る。 1件選ぶ処理では主キーを渡してORMでEntityを受け取る。 そこから先はORMの機能だけで関連Entityを取って来たり、 排他制御しつつ更新処理とか全部やってくれる。
- 479 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 20:09:47 ]
- 排他制御ってSpringやSeasarといったDIコンテナに
任せるものと違うの?
- 480 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 22:28:55 ]
- SpringやSeasarがテーブルのバージョンカラム定義や、
更新時の自動バージョンカラムチェックとかやってくれるのか?w
- 481 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 22:37:53 ]
- トランザクションかとおもたw
- 482 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 00:30:31 ]
- 比較的S2DAOが、バッチもオンラインも対応しやすい。
Seasarのリスクを受容出来るなら、S2DAOと必要に応じてストアドあたりが、 いい感じだな。
- 483 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 10:24:17 ]
- ibatisにsqlをフォーマットするクラスはありますか?
- 484 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 17:20:38 ]
- プリペアードステートメントの「?」にサブクエリーなどのSQLを書いても
SQLではなく短に文字列として処理されるのでしょうか? さらにibatisは$xx$はプリペアードステートメントの「?」で、#xx#はSQLとして展開ですよね?
- 485 名前:デフォルトの名無しさん mailto:sage [2006/11/11(土) 21:23:42 ]
- hibernate 3.2
hibernate annotation 3.2 hibernate tool 3.2 Eclipse 3.2 な環境でPOJO(アノテーション付き)からその他もろもろを生成したい。
- 486 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 08:41:06 ]
- >>485
今普通にそれでやってる。その他もろもろってDDLくらいしかなくね? とりあえずHibernateのサイト見ればできるようになんだろ。
- 487 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 08:46:53 ]
- そういやDdlUtilsってアプリ組み込みDB初期化に便利そうなんで
早くリリースされないかなぁ。
- 488 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 13:49:05 ]
- sqlを見やすいようにフォーマットしてくれるクラスありますか?
ibatis、dbutils何でもいいのですが・・
- 489 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 11:55:54 ]
- 一口に見易いと言っても好みがモロに出る所だと思うが、
とりあえずカンマの前後で改行入れる程度のものなら 自分ででっち上げる方が早い気もする。
- 490 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 14:14:39 ]
- そういうツールはいくらでもあるじゃん。
- 491 名前:デフォルトの名無しさん [2006/11/20(月) 04:29:31 ]
- MySQLにテーブルをいくつか作って、
Hibernate Toolsを使って.hbm.xmlと.javaを自動生成させた。 one-to-oneになって欲しい部分がone-to-manyになっている。 困った。
- 492 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 10:00:20 ]
- >>490
すいません。ツールは知っているのですが、管理者からPG側から整形済みをログで吐き出せといわれていまして・・・
- 493 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 10:16:39 ]
- 管理者ならログ整形するツールくらい用意しろよと言い返せ。
- 494 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 18:45:26 ]
- Hibernateなら整形出力あるんだけどね
- 495 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 18:57:18 ]
- >>492
その自称管理者がクソ
- 496 名前:デフォルトの名無しさん [2006/11/27(月) 01:29:48 ]
- WebアプリでHibernateを使うとき、updateて普通どうやるんですか?
マニュアルとか見ると、一般的なやり方として load -> データ変更 -> update しかないみたいなんですがWebアプリだとloadとupdateの間に 画面遷移が入るのが普通ですよね. ・最初にloadしたデータをセッションにでも入れておく ・updateのときにもういっかいloadする ・loadはせず、自分でオブジェクトを生成してidや全てのプロパティを手動で設定 どんなふうにやるもんなのでしょうか.
- 497 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 01:33:40 ]
- ・最初にloadしたデータをセッションにでも入れておく
の後、データを再度トランザクションにくくりつける。 ・updateのときにもういっかいloadする は、勝手にやってくれる。
- 498 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 01:38:35 ]
- >>496
前の画面で取得したEntityをsessionなどに保持しておいて Session(Hibernate Core)使うならupdate EntityManager(Hibernate EntityManager)使うならmerge 手動で再loadとかすると、排他制御をHibernateに任せられなくなるので お勧めできない ちなみに、同一トランザクション上なら、取得したEntityは 値を変えるだけでUPDATEされるので、updateメソッド使う必要はない ここを間違ってupdateメソッド使うかのように書いてる本が多いので、騙されないように
- 499 名前:496 [2006/11/27(月) 03:00:40 ]
- ありがとうございます.
セッション管理がいやなので更新時再loadでやろうと思ってました... ブラウザのウインドウをいくつも開いて同時に編集というのを 許可する場合はどうするんでしょうか? entityの種類とidごとに別のキーでセッションに入れたりして、 セッション内に作業中entityをどんどん保存/updateしていく という感じになるんでしょうか.
- 500 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 06:50:21 ]
- ログを常時監視してる場合も有るから、人間が直接読めるってのは重要な場合も有るかと。
まあ要求するのは良いが、それならおまいが管理までやれって返されるだけだよ(w やぶ蛇にならないようにガンガレ。
- 501 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 09:13:01 ]
- ログを監視する場合はむしろSQLを整形して吐かれるのは嫌だと思うんだけどなぁ。
ログは、基本一行で全部出して欲しい派。 正規表現で取り出しやすくなるし。
- 502 名前:デフォルトの名無しさん mailto:sage [2006/12/06(水) 02:35:47 ]
- いつの間にか、Dbutils1.1が出てますね。
- 503 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 02:23:14 ]
- Java6のJDBC4.0使った簡易O/Rマッピングってどんな感じですかね?
- 504 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 02:38:46 ]
- 系統的にはiBatisみたいだね。
www.onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html
- 505 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 22:45:10 ]
- >>498
いつも思うんだけど、Hibernateで排他制御を任せると、 複数サーバでの運用って事実上無理にならない? JavaVM1つでしか動きを保障できないようなフレームワークが なぜこんなに流行るのかわからない。
- 506 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 22:58:32 ]
- 複数サーバの並列運用が必要な案件がそんなにないからじゃないかと。
大規模案件はやっぱりEJBの出番なんでしょう。
- 507 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 23:18:00 ]
- >>505
普通にHibernate経由でDBロック取ればいいじゃん。 API提供されてるし。 >>506 なんでEJB?
- 508 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 23:24:00 ]
- 分散を最初から考慮しているってのは確かに大きいな。
- 509 名前:507 mailto:sage [2006/12/07(木) 23:33:33 ]
- >>506
ちょっと喧嘩売ってるみたいな書き方になった… 補足すると、そもそも並列稼動の実装ってかなり設計に依存するから 安易に大規模案件=EJBを持ち出す意味がわかんないって話。 単純なスケールアウトの話で、VMをまたいだキャッシュの同期を 意図してたならHibernateでもいくつかサポートしてるキャッシュ実装があるよ。 ※Coherenceとか ま、JBossのEJBって話だったら別に変わんないか。
- 510 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 00:27:16 ]
- >>505
Hibernateの排他制御は基本的に楽観的排他で、 UPDATE文発行するときに、検索条件に主キー+バージョンカラムの値をつけ、 UPDATEの結果が0だったら排他エラーにするものだよ 同期を取っているのはあくまでもDBで、JVMは関係ないと思うけど 2次キャッシュに対する更新は、たしかに複数サーバでの運用が問題になるが そんなときはクラスタ対応のJBoss TreeCacheを使えばいい
- 511 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 01:02:00 ]
- >>510
へー、そうなのか。勉強になった。 どちらにせよ、最近は状態を頑張って各ノードで通信して同期するより、 なるべく状態非依存にしてスケールアップする方向に進んでるから、 Hibernateの挙動はあまりいくないと思う。
- 512 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 01:33:17 ]
- >>511
参考までに聞きたいのだが、状態を持たない場合、複数画面の排他制御ってどうやってやるのが普通なの? 主キー+バージョン値だけを保持して、バージョン値も条件に入れて再SELECTとか? ただこの場合、関連するEntityを同時に再SELECTする場合、全部のバージョン値を保持しなきゃいけなくなるよね 自分もHibernate使っていたとき迷ったのだが、結局HttpSessionに保持してmerge以外に良い方法を思いつかなかった
- 513 名前:デフォルトの名無しさん mailto:sage [2006/12/08(金) 02:15:47 ]
- >>511
Hibernateの挙動というよりは、単に2次キャッシュを使わなければ良いだけでは? OptimisticLockも2次キャッシュ同様にデフォルトでは有効でないから そこに文句をつけるのは違うと思う。 > どちらにせよ、最近は状態を頑張って各ノードで通信して同期するより、 > なるべく状態非依存にしてスケールアップする方向に進んでるから、 これ、そうなの?クラスタ系プロダクトの信頼度が上がってくるのはこれからじゃないのかな。 あと、下のケースはスケールアウトと間違えてない?
- 514 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 18:52:08 ]
- ibatisでカスタムタグを作ることってできますか?
- 515 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 23:35:57 ]
- >>514
OpenSessionInViewパターン的な仕組みとやりとりするカスタムタグを 作るってことなら、そんなに悩まずできるんじゃないの? iBatisだろうとHibernateだろうと生Jdbcだろうと。 おれなら半日で作るね。
- 516 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 23:44:54 ]
- 半日もかかるのか。イラネ。
- 517 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 00:06:28 ]
- タグ作って、テストして、プロジェクトの他メンバーに仕様を伝えるためのドキュメント作って・・・
としていたら半日なんてあっという間。
- 518 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 01:45:16 ]
- ibatisの設定ファイルに書くタグのことじゃね?
- 519 名前:デフォルトの名無しさん mailto:sage [2006/12/15(金) 11:03:54 ]
- gcの対象って、インスタンスだけじゃなくてクラスも対象なんですか?
クラスに定義してあるメソッドの実行コードもメモリから消えちゃう? Cをやっていたとき、実行コードはメモリのtextにロードされるから、 textエリアは書込み禁止なはずなので・・・、javaでは実行コードはtextに書かないのかな
- 520 名前:デフォルトの名無しさん mailto:sage [2006/12/15(金) 12:26:48 ]
- >>519
スレ違いなので簡単に。詳細は別スレで語って。 ttp://www.nminoru.jp/~nminoru/java/class_unloading.html
|

|
[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ] 
前100
次100
最新50
▲ [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<149KB
read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef