Person(id, country_id, name)
のデータを保存しているとします。ユーザーがidとcountry_idを送信した後、名前を送り返したとします。httpリクエストごとのダイレクトdb接続と接続プーリング - 違いは
私は1つのdbと2つのウェブサーバを持っており、各ウェブサーバは20の接続の接続プール(たとえばc3p0)を保持しています。
つまり、dbは40の接続を維持し、各Webサーバーは20の接続を維持しています。
人が「DB接続を作成することは高価である」と言うので、これは全てのセンスを作る
は、今の私はcountry_id
上の表データをシャード言わせ
を我々は、接続プールを使用していることがわかります上記のシステムを分析しますので、現在200のデータベースがあるかもしれません。私たちのアプリが現在普及していると仮定し、Webサーバーを50台持つ必要があります。
上記の接続プールの戦略は、各Webサーバーが各データベースのプールに20の接続を保持しているかのように失敗します。
これは、各Webサーバーが20 * 200db = 4000接続を持つことを意味します。
であり、各dbは50のWebサーバー* 20 = 1000接続を持ちます。
これは良いとは言えないので、なぜWeb接続ごとに1つの接続を作成するオーバーヘッドが接続プールを使用するのかという疑問があります。
私は、DriverManager.getConnection()
がローカルホストで平均20ミリ秒かかるというテストを実行しました。要求ごとの余分な
20ミリ秒のゲームキラー
Question1ではありません: Webリクエストごとに1つの接続を使用して、任意の他の欠点はありますか?
質問2:インターネット上の人は "db connection is expensive"と言っています。異なる経費は何ですか?
プールを強化するテクノロジ(つまり、同じサーバー上のJavaサーブレットコンテキストで接続プールを共有できます)とシャーディング(つまり、['pgpool'](http://www.pgpool.net/mediawiki/index。 php/Main_Page)) – pozs
フロントエンドで毎秒10000ページのインプレッションに対処する必要がある場合にかかる時間をテストしましたか?すなわち、ネットワーク接続を介して1秒間に 'getConnection()'を10000回呼び出しますか? –