1

node-mysql の接続プール機能を使用すると、アプリケーションで問題が発生しませんconnection.end()か? 私が懸念している理由は次のとおりです。SQL で変数を定義するか、トランザクションを開始すると、変数またはトランザクションは、接続が閉じられるまで持続します。接続が実際に閉じられることはなく、代わりに再利用されるため、変数とトランザクションは、変数やトランザクションの存在を予期しない別のルーチンに浸透する可能性があります。新しい接続が必要です。

変数は大きな問題を引き起こす可能性があります。ルーチンは、変数が未定義であると安全に想定することはできません。

1 つのルーチンが を呼び出す前にトランザクションのロールバックまたはコミットに失敗した場合、トランザクションはさらに大きな問題を引き起こす可能性がありend()ます。この接続を使用する次のルーチンがトランザクションを処理しない場合、すべてのクエリがトランザクションに追加されて停止され、実行されることはありません。アプリを作成するときに、そのようなエラーが発生しないように注意することはできますが、間違いは発生します。エラーが発生した場合は、デバッグが非常に困難になります (どのルーチンが接続を誤って処理しているのかわかりません。悪い悪い)。

これらは、プーリングの使用を検討する際の私の懸念事項の一部です。確かに、これらの問題について考えたのは私だけではありません。よろしければ、プールされた接続を適切に処理する方法を教えてください。:)

どうもありがとうございました。

4

1 に答える 1

0

すべてのトランザクションは、単一の接続のコンテキストで発生します。接続を終了または終了すると、そのトランザクションを操作できなくなります。一般的なパターンは、開いて、クエリして、閉じるというもので、実行時間の長いトランザクションがない限り、クエリや変数が他の接続に流れ込むという問題は発生しません。

トランザクションが長時間実行される場合、その接続オブジェクトを管理して、その接続オブジェクトが存在し、そのトランザクション内で動作するコードによってのみ使用されることを確認する必要があります。

于 2013-08-08T07:20:48.587 に答える