5

私は Oracle と Mysql を使用していますが、呼び出しを発行し、立ち去って別のことを行い、後で戻って NIO などを取得できるように API が作成されていない理由を理解するのに苦労しています。データを待機するスレッド。同期 IO がまだ強制されている唯一の場所は SQL インターフェイスのようです。これは、DB を待機しているスレッドを拘束することを意味します。

誰かがこの理由を説明できますか? これを難しくしている基本的なものはありますか?

ワーカー スレッドを使用してデータを取得するのではなく、1 ~ 2 個のスレッドを使用して DB クエリの問題と結果のフェッチを管理できると便利です。

非同期 API を実装するための 2 つの実験的な試み (adbcj など) があることに注意してください。

4

2 に答える 2

1

非同期の重大な問題は、多くのライブラリがトランザクションにスレッドローカルを使用していることです。

たとえば Java では、JDBC 仕様の多くは、トランザクションごとに単一のスレッドを実現するために同期動作に依存しています。つまり、手続き順にトランザクションを記述します。

それを正しく行うには、コールバックを介してトランザクションを実行する必要がありますが、そうではありません。これを行う node.js だけは知っていますが、本当に非同期かどうかは不明です。

もちろん、非同期を行ったとしても、おそらく同期を行っている場合、データベース自体としてパフォーマンスが本当に向上するかどうかはわかりません。

(Java) でスレッドの過密を回避する方法はたくさんあります: 非同期の jdbc 呼び出しは可能ですか?

個人的には、この問題を回避するために、RabbitMQ のようなメッセージ バスを使用しています。

于 2012-07-09T15:55:20.353 に答える
1

データベース サーバーは、数千のクライアントを処理できる必要があります。非同期インターフェースを提供するために、DB サーバーはクエリからの結果セットをメモリに保持する必要があるため、後の段階で取得できます。すぐにリソースが不足します。

于 2012-05-10T11:07:47.360 に答える