[Seasar-user:13189] Re: [DBFlute]S2DAO 初期化について
kubo
[E-MAIL ADDRESS DELETED]
2008年 3月 7日 (金) 19:49:54 JST
久保です。
米原さん、こんばんは
説明させて頂きます。
ConditionBeanのsetupSelectを無限階層化したことにより、
S2Dao内部での初期化において、再利用方式での初期化を
するようにしました。(具体的にはBeanMetaDataというクラスですが)
以前:
A. 階層の座標の数だけBeanMetaDataを生成
B. 3階層まで
今:
A. 1テーブル1BeanMetaDataで再利用
B. 関連辿れるところまで(既に初期化済のものは再利用)
となっています。
(ってちょっとかなり内部の話なので言葉にしづらいのですが...)
これにより、以下のような初期化時間の違いが出てきます。
以前:
A. メモリをたくさん食べていた&生成処理が多い
B. それぞれのテーブルの初期化が平均して遅い
今:
A. メモリ節約&生成処理が少ない
B. 最初のテーブルの初期化は以前より遅い可能性があるが、
その分、次のテーブルの初期化や別のメソッドの初期化が速い
という感じです。(ややこしい...)
例えば、AAAというテーブルとBBBというテーブルがあって、
最初にAAAテーブルのあるメソッドを初期化して、
次にBBBを初期化したとしたら:
以前:
AAAの初期化とBBBの初期化は特にスピード変わらず
今:
AAAの初期化は少し遅い(可能性あり)が、BBBの初期化は速い
となるはずです。
しかし、
> その後のテーブルの初期化時間はさほど変わらず)
とおっしゃられるので、なぜだろうという感じではあります。
理論値で申し訳ありませんが、
一番最初のテーブル(メソッド)は以前より遅くなる可能性ありですが、
「テーブル全体としての総合初期化時間」は遥かに少なくなっているはずです。
(自分のローカル環境で幾つか試した限りではそのようになっています)
これに関連して、それら初期化処理を起動時に一気に行うモードを
検討しています。DBFluteはDBのメタデータを既に保持しているので、
基本的にはコネクション無しで初期化が可能なので、起動時に自動で
初期化するようなモードをもうけることによって、画面起動時の
初回の検索の「もったり感」を回避できるかなと考えております。
と、このような説明で足りますでしょうか?
(何か疑問がありましたら遠慮なく言って下さい)
2008/3/7 <[E-MAIL ADDRESS DELETED]>:
> いつもお世話になっております。
> 米原です。
>
>
> DBFlute0.58⇒0.64に移行して、最初にアクセスするテーブルの
> 初期化が遅くなったのですが、(こちらのサンプル環境で3秒⇒7秒
> その後のテーブルの初期化時間はさほど変わらず)
> 初期化の方式やデフォルト設定など変更になりましたでしょうか?
> お気づきの点などありましたらご教授お願い致します。
>
> ※Build.propertiesは変更いていません。
> 以前から(torque.isAvailableDaoMethodLazyInitializing = true)を設定しています。
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内