SQLAlchemyのパフォーマンスを向上させたいのですが、1回のAPI呼び出しで、あらゆる場所にコミットがあります。代わりに、これらのセッション追加を集約し、API呼び出しの最後にコミットを実行しますか?それとも、私がいたるところにそれをするかどうかは重要ですか?
ありがとう!
SQLAlchemyのパフォーマンスを向上させたいのですが、1回のAPI呼び出しで、あらゆる場所にコミットがあります。代わりに、これらのセッション追加を集約し、API呼び出しの最後にコミットを実行しますか?それとも、私がいたるところにそれをするかどうかは重要ですか?
ありがとう!
コミットは、これらすべてのレコード(オブジェクト)を保存するか、まったく保存しない、関連する呼び出しの論理ブロックの後に発生する必要があります。1つが失敗した場合は、すべてを失敗させます(ロールバック)。反対に、無関係な呼び出しを1つのトランザクションにグループ化すると、予期しない副作用が発生したり、予期しないエラーが発生したり、意図しないものが実際に正常に保存されたはずのときにロールバックされたりする可能性があります。これは、あなたが行っていることではありません。しかし、私はパフォーマンスのためにこれを以前に見ました。
とにかく、通常、私は各API呼び出しの最後にコミットを持っています。これは、API呼び出しをすべてまたは何も処理しないと考えているためです。一意のキー違反がどこかで発生したときにデータを半分保存した場合、呼び出し元が満足することはないと思います。途中で。
このページはSAのドキュメントにあり、セッションの取り扱いでは、セッションやトランザクションなどのレイアウト方法が説明されています。 コンテキストセッションの寿命