私は、DatamapperとActiveRecordを使用して、スフィンクス2 &リアルタイムインデックスを処理するための一連の宝石、スタンドアロンに取り組んでいます。これを行うには、(明らかに)スフィンクスとの接続を開きます。ネットワークサービスへの接続を開いている宝石の接続プーリング
https://github.com/d11wtq/oedipus
Oedipus.connection("sphinxql.host.tld:9306")
今私は、接続の管理について空想何もしていないよ...宝石のユーザが接続を行う場合、新しい接続が開かれ、それはそれです。その接続を管理するのはユーザーの責任です。しかし、他の宝石はプールのコンセプトを持っているようですが、私は実際にはシングルスレッドの環境では決して得られません。
誰かがについて啓発してください。なぜプールが必要なのか、私のK.I.S.S.の影響私はプールを追加する方法は?スレッドごとに1つの接続が有効に存在するマルチスレッドアプリケーションでは、プーリングは本当に意味をなさないでしょうか?それとも他の有効なユースケースがありますか?それがマルチスレッドアプリケーションのためだけのものであれば、ユーザーはおそらく宝石製作の前提条件よりも管理しやすいだろうか?私は、ねじ実装に推測している
、シンプルな「無制限の接続」のアプローチは、次のようになります。
def connection
Thread.current[:oedipus_connection] ||= connect(args)
end
スレッドが消えたときに、その接続がありません(リソースが解放されたときにクリーンアップが起こります) 。
それは私の心の中で遊んでいて、私は組み込みのプール/管理を持たないと私を迎えに戻ってくるだろうと思っています。
私は実際に接続タイムアウトについては考えていませんでした。これはそれを追加する理由かもしれません。ユーザーが接続を長時間開いていると、サーバーは接続を終了する可能性があります。おそらく接続が切れている必要があり、過去60秒など古い場合は新しい接続が返されます。ありがとう。本当に2つの心で。たぶん、暗黙のうちにオプトインでオプティマイザを選択するだけです。 – d11wtq
私は何かを実装しました、私は大丈夫だと思います。 https:// github。com/d11wtq/oedipus/blob/master/lib/oedipus/connection/pool.rb長い時間8スレッドを同時にスラミングしましたが、プールのサイズは大きくなりませんでした。最大80スレッドまで同時にスケーリング(自分の正気のため)とビンゴ、魔法のプーリングを起こす。助けてくれてありがとう :) – d11wtq