[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 メーリングリストの案内