2016-05-02 2 views
3

私は、プロジェクトでJavaを使ってプレイフレームワークを使用しています。同時ユーザーが非常に多いため、再生を使用してプロジェクト全体を書き直し、より多くの同時ユーザーをサポートする非ブロッキング機能の恩恵を受けることにしました。プロジェクトの背後にあるDBはOracleであり、すべてのJDBCドライバがReactivMongo以外のブロックIOを使用していることはわかっています。 私は多くを検索し、現在、Oracle JDBCドライバを非ブロッキングにする方法はないとの結論に達しました。しかし、OracleはネイティブOCIドライバで非ブロッキング呼び出しをサポートしています(残念ながら、コールバックや割り込みの代わりにポーリングに基づいています)実験的なプロジェクトでもありません!これは、必要性がまだ感じられておらず、理由があることを証明します。もちろん、私はJava用のmy-sql asynchronous connectorのリンクを見つけましたが、Oracle用のものはありません。JDBCが本質的にブロックしている間にPlayフレームワークを使用することは有益ですか?

これは私の質問に私をもたらします。 Oracle用のブロッキングJDBCドライバを使用しているときに、Playフレームワークを使用することは本当に有益ですか?

+0

[slick](http://slick.lightbend.com/doc/3.1.1/introduction.html#reactive-applications)を参照してください。 – marcospereira

+0

slickはパフォーマンスを向上させ、負荷の下でも反発力はあるものの、DB呼び出しがブロックされているようです。ところで、私は滑らかなJavaプロジェクトで使用できますか? – Morshedian

答えて

0

JDBC接続にバックグラウンドスレッドを使用し、メッセージ経由でこのスレッドと通信します。

正直なところ、nobodyは、ノンブロッキング・モードでOCIを使用します。さまざまな非公開の制限があります。また、OCIコールの中には、予期せずにライブラリをブロッキング・モードに戻すコールがあります。一方、OCIは、マルチスレッド環境から使用するのが非常に安全です。

+0

別の場所またはサーバー内の別のスレッドをブロックするため、どこで扱うかは関係ありません。あなたのCPUはそれが必要でない場所(IO)でまだ無駄です。 – Morshedian

+0

スレッドがスリープしている(DBからの応答を待っています)、リソースが無駄になりません。 – ibre5041

+0

実際にはスレッドがアイドル状態になっています。非ブロッキングスレッドの概念によれば、アイドル状態を維持してはいけません。他の要求を処理できるように解放する必要があります。 – Morshedian

関連する問題