- rokujyouhitoma
- 187945
- 16
- 418
- 68
コネクションプーリング、サイエンスになるほどの理論はなかなかないけど定番のノウハウはあって教科書にはないので難しくはないけどツラい。
2013-09-04 10:13:15@kaoriya あー。普通は1トランザクション=1処理なんですが、Web系ではどうしてもHTTPの1リクエストが基準になるので。
2013-09-04 10:16:37@methane それはわかるんですが、コネクションプールに対して「永続化」と「シェア」という語を割り当ててどんなユースケースを定義しようとしているのかがピンとこないんです。どちらもDBとその格納データに対して使うならわかるんですが。
2013-09-04 10:21:18僕の最初の理解では、TCP/IPのセッションを張るのが遅いから必要というのは眉唾(単体でみれば、大量につなぎに行くのも待つのも、十分安いコストで可能)。サーバ側の何かしらの処理で重くなる要因があるはず。というものだったんだけど、
2013-09-04 10:24:59割と(RDBの性質上)クライアント側の都合があるらしい。また経路によってはネットワーク的な都合でレイテンシが悪くなったり接続数を減らしたくなることがある(RDSの話がでてるけどAzureでも同様に問題になる)。
2013-09-04 10:31:34あとRDBMSの場合、処理の最初に繋ぎ行って最後に返す、という使い方が一般的でないという実装上の都合があるようにみえる。その方がアプリを書きやすいし、裏側で頑張ってコネクション使いまわして最適化できるからいいんだろうけど、これは必要な理由というより現状そうであるという話に見える
2013-09-04 10:38:35非同期なアプリで1リクエスト1接続にしちゃうと、接続一杯受け付けちゃって同じ数RDBMSにも接続張られちゃうから、プールを使ったって話は聞いたことある。
2013-09-04 10:47:35あ、さっきのコネクションプールの話、「RDBMSで」だったんだ。そういう制限が付いてるとぼくのつぶやきは全然違うかも。
2013-09-04 10:51:53多くのRDBMSのプロトコル設計が、接続時や切断時にリクエスト/レスポンスを投げるようになってるので、都度接続だと無駄が多いってのもあるな / “RDBMSでコネクションプールが必要な理由、わからない。 - Togetter” http://t.co/HFUj7MnQ1j
2013-09-04 10:53:06C/S型のRDBMSは、元々小数のクライアントとステートフルな通信を行うために設計されてきた(ことが多い)ので、HTTPのように多数のクライアントと接続切断を繰り返しながらやる方式とはインピーダンスミスマッチがあるんだよねー
2013-09-04 10:54:42僕の理解ではネットワーク経路に問題がなくてリクエスト処理数にも余裕があるようなRESTサービスではコネクションプールを使わなくても良い(処理時間とアクセス数を元に最大コネクション数の見積もりは必要だけど)。
2013-09-04 10:55:06DBのコネクションプール話乗り遅れたけど接続プロトコル知ってる人既に何人か参加してるみたいだからコーヒー飲みながら鼻クソほじってて良さそう
2013-09-04 10:58:19用途とRDBMSのプロダクトを明言してないから議論が発散してて参考にならない / RDBMSでコネクションプールが必要な理由、わからない。 - Togetter - http://t.co/5v09GyTVMm
2013-09-04 11:24:44Webアプリ MySQL に限って言えば、プロセスでコネクション張りっぱなしだとピークタイム以外の時にリソース使いすぎてて衛生的じゃ無いのと、接続コストが無視出来るレベルなのでリクエスト単位でコネクションしてる。
2013-09-04 11:27:56コネクション繋ぎっぱの実装だと、うっかりバグ入れこんで障害起こす問題を多々聞くので、安全なアプリケーションを作りたいなら永続性接続で作らないし、ミドルウェアでプーリングするのもシステム複雑化するだけなので手段として選択しない
2013-09-04 11:30:06負荷を問題にする前に適切にリソース監視をして、適切に増強していけばいいだけなので、それは理由にならない。ただし限られた予算の中でやりくりする時に必要になってくるのかなという感じですね。
2013-09-04 11:32:17