[Seasar-user:21770] Re: 【Doma】SQLiteでのトランザクション処理について

Yuta Kaga [E-MAIL ADDRESS DELETED]
2013年 12月 4日 (水) 09:20:45 JST


中村さん

加賀です。

情報ありがとうございます。
早速下記の内容を試させていただきます。

(2013/12/03 21:26), Toshihiro Nakamura wrote:
> 中村(taedium)です。
>
> 情報ありがとうございました。
>
> きれいな方法ではありませんが、workaroundを紹介します。
> 次の3つの手順が必要です。
>
> 1. DomaのLocalTransactionalDataSourceをコピーして
> MyLocalTransactionalDataSourceを作成する
>
> 2. MyLocalTransactionalDataSourceの
> getConnectionInternalメソッドを次のように書き換える
>
>     private Connection getConnectionInternal() {
>         LocalTransactionContext context = localTxContextHolder.get();
>         if (context == null) {
>             return dataSource.getConnection(); // 変更箇所はココ
>         }
>         return context.getConnection();
>     }
>
> 3. 設定クラスにおいて、LocalTransactionalDataSourceの代わりに
> MyLocalTransactionalDataSourceを使うようにする
>
>
> これで、LocalTransactionをbeginしない場合は
> トランザクションなしで(autoCommitモードで)動作するはずです。
>
> よければお試しください。
>
> 2013年12月3日 16:03 Yuta Kaga <kaga_yt @ es-planning.jp>:
>> 中村さん
>>
>> 加賀です。
>>
>> 早期のご回答ありがとうございます。
>> Domaの仕様の件、了解致しました。
>>
>> また、条件は一例ですが約150万件のビックデータに対して
>> InsertやSelectを行う場合です。
>>
>> Insertに関してはトランザクションを行わないと約3時間
>> かかりましたが、トランザクションを入れると約1時間となりました。
>> Selectについてはトランザクションを行わない場合は約2分、
>> トランザクションを行うと約6分かかっておりました。
>>
>> およそ3倍くらいの性能差はあるかと思います。
>> ご参考までに。
>>
>> (2013/12/03 15:13), Toshihiro Nakamura wrote:
>>> 中村(taedium)です。
>>>
>>>> しかし、実装してみますとSelect時にbegin〜rollbackまでの
>>>> 処理を記述しないと、Doma側でトランザクションを
>>>> していないという内容のExceptionが発生してしまいます。
>>>>
>>>> 私のアプローチの仕方が間違っているのか、それとも
>>>> Domaの仕様なのかが判断がつきませんでしたので
>>>> メーリングリストに投稿致しました。
>>> これはDomaの仕様です。
>>>
>>>> SQLiteは、Select時にトランザクションすると
>>>> 実行速度が遅くなり、逆にInsert時はトランザクションを
>>>> しなければ、処理実行時間が遅くなってしまいます。
>>> 参考までに教えていただけるとうれしいのですが、
>>> どういった条件下でどの程度の差が出るのでしょうか?
>>>
>>>
>>> On Tue, 3 Dec 2013 14:09:29 +0900
>>> Yuta Kaga <kaga_yt @ es-planning.jp> wrote:
>>>
>>>> 初めて投稿させていただきます。
>>>> 加賀と申します。
>>>>
>>>> よろしくお願いします。
>>>>
>>>> 現在、DomaとSQLiteを利用して開発を行っております。
>>>>
>>>> リファレンスのトランザクションの項目を参考に
>>>> LocalTransactionalDataSourceを使い
>>>> トランザクション処理を行っております。
>>>>
>>>> SQLiteは、Select時にトランザクションすると
>>>> 実行速度が遅くなり、逆にInsert時はトランザクションを
>>>> しなければ、処理実行時間が遅くなってしまいます。
>>>>
>>>> しかし、実装してみますとSelect時にbegin〜rollbackまでの
>>>> 処理を記述しないと、Doma側でトランザクションを
>>>> していないという内容のExceptionが発生してしまいます。
>>>>
>>>> 私のアプローチの仕方が間違っているのか、それとも
>>>> Domaの仕様なのかが判断がつきませんでしたので
>>>> メーリングリストに投稿致しました。
>>>>
>>>> どなたか本件についてご教授願えないでしょうか。
>>>> よろしくお願い致します。
>>>>
>>>> --
>>>> 加賀 雄太
>>>> kaga_yt @ es-planning.jp
>> _______________________________________________
>> Seasar-user mailing list
>> Seasar-user @ ml.seasar.org
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>
>



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