[Seasar-user:13192] Re: R e:[DBFlute]S2DAO 初期化について

kubo [E-MAIL ADDRESS DELETED]
2008年 3月 7日 (金) 22:14:19 JST


久保です。

>  確かに、その後のテーブルの初期化をよく
>  比較してみると全体的に速くなっているようです。

おお、よかったです。
よろしくお願いします。


ただ、どのみち、この初期化の問題は以下のような潜在的な問題を抱えます。
「単体テストでは遅延初期化で都合が良いが、
 画面アプリ起動時は最初のアクセスが遅いよりは
 起動時に初期化された方が都合が良い」
時と場合によるかもしれませんが、今までの経験上はこうでした。

なので、DBFluteの次バージョンでは、
behaviorSelector.initializeConditionBeanMetaData();
を呼び出すと、全てのDaoのConditionBeanのメソッドを一括初期化します。
画面起動時のS2Containerの初期化直後に呼び出せば効果的です。
利用者任意のオプション機能として装備します。


2008/3/7  <[E-MAIL ADDRESS DELETED]>:
> いつもお世話になっております。
>  米原です。
>
>
>  久保さんへ
>  詳しいご説明ありがとうございます。
>  なるほど、無限階層対応によるものだったのですね。
>
>  確かに、その後のテーブルの初期化をよく
>  比較してみると全体的に速くなっているようです。(失礼致しました。。)
>  以前の初期化の高速化にて、格段に速くなっていたので、
>  規模の小さなサンプル環境で確認していたので気づきにくいだけかも
>  しれませんねm(__)m
>
>  こちらの環境によるものかもしれません。少し様子を見てみようかと思います。
>  ご回答、ありがとうございました。
>
>
>  >久保です。
>  >
>  >米原さん、こんばんは
>  >
>  >説明させて頂きます。
>  >
>  >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 mailing list
>  >[E-MAIL ADDRESS DELETED]
>  >https://ml.seasar.org/mailman/listinfo/seasar-user
>  _______________________________________________
>  Seasar-user mailing list
>  [E-MAIL ADDRESS DELETED]
>  https://ml.seasar.org/mailman/listinfo/seasar-user
>


Seasar-user メーリングリストの案内