0

初めて複数のアプリケーションで並行して使用するmysqlデータベースを作成する必要があります。この時点まで、mysqlデータベースでの私の唯一の経験は、データベースをクエリする単一のプログラム(たとえば、Webサーバー)でした。今、私はいくつかのCXF javaサーブレットタイプのプログラムと、同じスキーマで編集および読み取りを行うバックグラウンドサーバーを持つシナリオに移行しています。Connector / J JDBCドライバーを使用して、すべてのインスタンスでデータベースに接続しています。

私の質問はこれです:並列アクセスが問題にならないようにするために何をする必要がありますか。必要に応じて取引を行う必要があることは承知していますが、本当に迷っているのは経営陣です。例えば。サーブレットがジョブを実行するたびに接続を閉じる必要がありますか?データベースにアクセスするプログラムごとに一意のユーザーが必要ですか?Connector / Jオブジェクトで何かする必要がありますか?別の方法でテーブルを宣言する必要がありますか?私は何かを逃しましたか、それとも私が考えなかった何かがありますか?トランザクションとSQL自体の処理方法についてはかなり良い考えがありますが、データベースをセットアップするときに何をする必要があるかについては、かなり迷っています。

4

1 に答える 1

2

接続のプールを維持する必要があります。接続は、数百ミリ秒のオーダーで思考を作成するのに非常に費用がかかります。したがって、大量のアプリの場合、それらをキャッシュして再利用することは理にかなっています。

サーブレットの場合、使用しているコンテナによって異なります。JBossのようなものは、コンテナの一部としてプーリングを提供します。データソース定義を介して定義し、JNDIを介してアクセスできます。tomcatのような他のコンテナは、C3POのようなものに依存している可能性があります。

これらのフレームワークのほとんどは、接続をプールに返すロジックを使用してclose()メソッドを実装するJDBC接続のカスタム実装を返します。サポートされている方法で物事を実行していることを確認するために、具体的な実装の詳細に精通している必要があります

同時実行性の考慮事項については、楽観的/悲観的ロックおよびトランザクション分離レベルの概念に精通している必要があります。これらにはトレードオフがあり、アプリケーションの運用コンテキストを考慮してのみ正しい答えを決定できます。

ユーザーを考慮すると、ほとんどのアプリケーションには、読み取り/書き込みユーザーと呼ばれるアプリケーションを表す1人のユーザーがいます。このユーザーは、アプリケーションに関連付けられているテーブル、インデックス、シーケンスなどからレコードを読み書きする権限のみを持っている必要があります。アプリケーションのすべてのインスタンスは、接続文字列でこのユーザーを指定します。

上記の概念に精通している場合は、そこまでの道のりは約95%になります。

もう一つ。管理側のコメントで指摘されているように、データベースエンジンは大きな考慮事項です。違いとチューニング/構成オプションをよく理解しておく必要があります。

于 2012-04-25T20:34:13.917 に答える