11

ASP.NETを使用しましたが、現在はSinatra/MongoDBアプリに取り組んでいます。ASP.NETアーキテクチャでは、特定の要求が使用するデータベースへの接続は、ADO.NETが管理する接続のプールから取得されます。接続はリクエスト間でプール内で維持されるため、接続の構築と切断のコストはhttpリクエストごとに支払われません。

Sinatra MongoDBアプリにも同様のメカニズムがありますか、それとも各リクエストに接続/切断する必要がありますか?メカニズムがある場合、コードはどのようになりますか?

編集1:以下は機能しません。ブラウザが送信する各HTTPリクエストは、css、js、jpegファイルのリクエストを含め、new.db行にヒットします。

require 'mongo'
include Mongo

db = Mongo::Connection.new.db("MyDb")

class MyApp < Sinatra::Base
    get '/' do
       etc
4

2 に答える 2

8

最新バージョンのrubymongodbドライバーには、接続プールが含まれています。configureあなたはあなたのsinatraアプリとあなたの叔父のあなたのブロックにあなたのプールを設定することができます。

于 2009-11-28T05:04:18.113 に答える
6

要求メソッドの範囲外でデータベース接続を作成した場合、接続は各要求で再インスタンス化されません。

dbを初期化するときに、グローバル変数またはインスタンス変数を使用してみることをお勧めします。

# Should be in a configure block
configure do
  DB = Connection.new.db('test-sinatra')
end

また、接続プールはここでは問題ではなく、確かにこの特定の問題の解決策ではありません。

于 2009-11-20T23:04:32.120 に答える