[seasar-dotnet:2403] Re: 初心者的な質問で申し訳ないですが・・・(追加質問ありです)

kubo [E-MAIL ADDRESS DELETED]
2015年 1月 14日 (水) 18:31:47 JST


久保(jflute)です

> ■DBリンクはセッションあたりの接続数が制限(初期値は4)されていますという 記事を目にしたのですが
> 外だしSQLで連結して4つを超えると接続エラーとなるということでしょうか?

おっと、これはやったことがないので検証してみてください、
としか言いようが無いです。。。

> AccessContext
Process と Module が余ってるのでそこが使えます。
が、ちょっと変なので、
AccessValueMap を使うといいと思います。
(Mapで何でも入ります)


2015-01-14 16:46 GMT+09:00 志水正幸 <ie2m-smz @ asahi-net.or.jp>:
> 志水です。
> 超お世話になっております。
>
> 久保さん、早速の回答ありがとうございます。
> なるほど、よくわかりました。
> 浅い知識なので自信がなかったですが
> 私の認識は間違ってはないようで安心しました。
>
> 小谷さん
>  ->お手数ですがお願いします。
>
>
> DBLINKと複数DBは一長一短で判断が難しいですね。。
> DBLINKの簡単な方にしたいが、複数DBも視野にいれるべきか・・・・
> でも、設定が難しそう・・・、ちょっと逃亡したくなっちゃいました(笑)
>
>
> 設定していてまたまた疑問があり、
> 追加で質問させてください。
>
> ■DBリンクはセッションあたりの接続数が制限(初期値は4)されていますという 記事を目にしたのですが
> 外だしSQLで連結して4つを超えると接続エラーとなるということでしょうか?
>
> ■commonColumnMap で以下のように、DateTime型でなくて全部 Varcharにしたいのです。
> (私はしたくないんですが・・適当に無理ともいえないorz)
> それも、ADD_DT=追加日付、ADD_TM=追加時間って感じで分ける必要があって。
> この場合って自動生成後にAccessContextへ自分でメソッド追加し ないといけないのでしょうか?
>
>     ; commonColumnMap = map:{
>         ; ADD_ID=VARCHAR ; ADD_DT=VARCHAR ; ADD_TM=VARCHAR
>         ; UPD_ID=VARCHAR ; UPD_DT=VARCHAR ; UPD_TM=VARCHAR
>     }
>
>     ; beforeInsertMap = map:{
>         ; ADD_ID = $$AccessContext$$.GetAccessUserOnThread()
>         ; ADD_DT = ?
>         ; ADD_TM = ?
>         ; UPD_ID = entity.RegisterUser
>         ; UPD_DT = ?
>         ; UPD_TM = ?
>     }
>     ; beforeUpdateMap = map:{
>         ; UPD_ID   = $$AccessContext$$.GetAccessUserOnThread()
>         ; UPD_DT   =?
>         ; UPD_TM   = ?
>     }
>
>
>
> 以上、宜しくお願いします。。
>
>
>
>
>
>> 久保です
>>
>> 志水さん、こんにちは
>>
>>> ■DBFLUTEはコネクションプーリングをデフォルトで使用していると
>>>   勝手に思いこんでいるのですが合ってますか?
>>
>> DBFlute.NETの方は、S2Dao.NETを経由しています。
>> コネクションプールしてないとお話にならないと思うので、
>> どう考えてもしていると思いますが、一瞬どこでやってたっけ?って。。。
>>
>> to 小谷くん
>> Seasar.NETの中でConnectionPoolしてるんだっけかな?
>> (JavaだとSeasar自体がConnectionPool持ってるけど)
>>
>>> ■DBFLUTEは1リクエスト内ではコネクションは張りっぱなしと思っていますが 合ってますか?
>>
>> スレッドトランザクション方式になっている、その通りです。
>> トランザクションを開始するとDataSourceの常に同じコネクションを戻します。
>> (同じスレッド内では)
>>
>>> ■WEBでは基本的にリクエスト跨いだロック(For Update)はできないと思ってい ますが合ってますか?
>>
>> そうですね。リクエスト間でトランザクションを貼りっぱなしに
>> しないといけないので、まったくやったことはないです。
>>
>>> ■お客から接続コストを抑えるためにコネクションをセッションに
>>> 保持して使い 回しできないの?って質問されたんですが
>>
>> コネクションプールしていればそんなことする必要ないですね。
>> というか、セッションに入れたらセッション消えるまでそのコネクションが
>> 残っちゃうので、逆に枯渇しそうですね。その方式は聞いたことないです。
>>
>>> ■DBFLUTEのコネクションプーリングの最大数などは、どこで管理しているので しょうか?
>>
>> これもSeasar.NETの方の話次第で。
>>
>>> ■DBFLUTEでDBLLINKしているテーブルを更新したいのですが
>>
>> DBLLINKに対してシノニムを作ればできると思います。For Updateできるかと。
>> 手元のテーブルとして扱えるようになります。(こちらマニアックですが実績ありです)
>>
>>> ■DBLINKって遅いと聞きましたが、どの辺が遅いのでしょうか?
>>>   通常のプライマリキーでのSELECTではどうなんでしょう?
>>
>> 別インスタンスのDBに対してのSQLゲートウェイな感じなので、
>> 直接SQLを投げるよりかは遅いと思います。(経由してる分)
>> ただ、どの程度遅いのかはパフォーマンス検証しないとわからないですが。
>> (許容できるレベルなのかどうか。許容レベルは業務によって変わるでしょうし)
>>
>>> ■マスタ類とかの参照があるなら、DBLINK使うより、複数DB接続の方がいいので しょうか?
>>>  DBLINKと複数DBのメリットとデメリット(判断基準みたいなもの)ってなんで しょう?
>>
>> 直接参照できるなら直接参照の方が世話ないかと。スピードも環境構築も。
>> DBLinkのいいところは、手元のテーブルと同じ扱いができるところに尽きます。
>> 要は、SQL的に手元のテーブルとリモートのテーブルを結合ができるというところです。
>> 複数DBではそれができません。
>> マスタ類のデータを個別のクエリで取得するので構わないのであれば、
>> 複数DBの方がいいかなと。SQLの中で一緒に扱いたいならDBLinkですね。
>>
>>> 以上、本当にこんな初心者的な質問、
>>> だれも頼る人がいないもので・・・
>>
>> そのために、オープンソースコミュニティのMLがあるんですよー!(^^
>> _______________________________________________
>> seasar-dotnet mailing list
>> seasar-dotnet @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>>
>
>
> ---
> このEメールはアバスト アンチウイルスによりウイルススキャンされています。
> http://www.avast.com
>
> _______________________________________________
> seasar-dotnet mailing list
> seasar-dotnet @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet


seasar-dotnet メーリングリストの案内