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

Toshihiro Nakamura [E-MAIL ADDRESS DELETED]
2013年 12月 3日 (火) 21:26:37 JST


中村(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



-- 
Toshihiro Nakamura


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