私は、Sphinx 2とリアルタイムインデックスをスタンドアロンで、DatamapperとActiveRecordで処理するための一連のgemに取り組んでいます。これを行うために、(明らかに)Sphinxへの接続を開きます。
https://github.com/d11wtq/oedipus
Oedipus.connection("sphinxql.host.tld:9306")
現在、接続の管理については何もしていません... gemのユーザーが接続を確立すると、新しい接続が開かれます。それがそれです。その接続を管理するのはユーザーの責任です。ただし、他のgemはプーリングの概念をもたらしているようであり、シングルスレッド環境では実際には意味がわかりません。
誰かが、なぜプーリングが必要になるのか、私のKISSアプローチの結果はどうなるのか、そしてどのようにプーリングを追加するのかについて教えてくれませんか?プーリングは、スレッドごとに1つの接続が事実上存在するマルチスレッドアプリケーションでのみ本当に意味がありますか、それとも他の有効なユースケースがありますか?マルチスレッドアプリの場合、これはユーザーが想定している宝石よりもうまく管理できるものではないでしょうか。
スレッド化された実装の場合、単純な「無制限の接続」アプローチは次のようになります。
def connection
Thread.current[:oedipus_connection] ||= connect(args)
end
したがって、スレッドがなくなると、接続もなくなります(リソースが解放されたときにクリーンアップが行われます)。
それは私の頭の中で遊んでいて、組み込みの接続プール/管理がないことが私を悩ませるために戻ってくるのではないかと思っています。