誰かがソケットに接続したときにスレッドが作成されるマルチスレッド アプリケーションを開発しています。接続ごとに新しいスレッドが作成され、各スレッドは JDBC を使用して MySQL データベースにクエリを実行します。異なるスレッドから MySQL へのこの複数の接続が、アプリケーションで問題を引き起こしたり、MySQL データに悪影響を及ぼしたりする可能性があるのではないかと考えています。
2 に答える
それどころか、常にマルチスレッド方式で DB に接続する必要があります。または本当に、プールされたファッション!
アプリケーションが世界的なヒットとなり、1 分間に 10 万件のヒットが発生する状況を考えてみましょう。その場合、大量のスレッド (つまり、接続ごとに 1 つ) が発生し、アプリケーション、アプリケーション サーバー、および DB が破壊されます。 . :-)
代わりに、DB 接続のプールを実装し、そこからスレッドが借りて、使い終わったら返すことができます。これにはいくつかの優れたオープンソース プロジェクトがあり、C3POとCommons DBCPはそのうちの 2 つにすぎません。
それが役立つことを願って、
CPU/ハードウェアスレッドの実際の数よりも多くのスレッドを使用しても、何も得られません。どちらかといえば、スレッドが増えるとオーバーヘッドが増え、アプリケーションの速度が実質的に低下します。
スレッドが提供するものは、同じことをより多く行うための比較的簡単な方法ですが、しばらくするとレンガの壁にぶつかり始め、他の潜在的な解決策について考え始める必要があります.
アプリケーションをスケーラブルにしたい場合は、今こそアプリケーションをスケールアウトする方法、つまり複数のシステムが負荷を共有する分散ソリューションについて考え始める良い機会です。
単一のシステムでより多くのスレッドを処理するのではなく、N 個のシステムに分散されたワーク キューとワーカー スレッドの観点から考えてください。