2009-11-20 7 views
11

Ich habe ASP.NET verwendet und arbeite jetzt an einer Sinatra/MongoDB App. Bei der ASP.NET-Architektur stammt die Verbindung zu der Datenbank, die eine bestimmte Anforderung verwendet, aus einem Pool von Verbindungen, die von ADO.NET verwaltet werden. Die Verbindungen werden im Pool zwischen Anfragen am Leben erhalten, so dass die Kosten für den Aufbau und das Abbauen der Verbindung nicht für jede HTTP-Anfrage bezahlt werden.Mit Sinatra und MongoDB - was ist die empfohlene Methode, um die Mongodb-Verbindung zwischen http-Anfragen "am Leben zu erhalten"?

Gibt es einen ähnlichen Mechanismus in einer Sinatra MongoDB App, oder muss ich mich bei jeder Anfrage verbinden/trennen? Wenn es einen Mechanismus gibt, wie sieht der Code aus?

EDIT1: Folgendes funktioniert NICHT. Jede HTTP-Anfrage, die der Browser sendet, trifft die Zeile new.db, einschließlich Anfragen für CSS-, JS- und JPEG-Dateien.

require 'mongo' 
include Mongo 

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

class MyApp < Sinatra::Base 
    get '/' do 
     etc 
+0

Hier ist eine ziemlich gute [Beispiel-App] (http://github.com/dancroak/shorty), die Sinatra und MongoDB verwendet - wahrscheinlich kann man einen guten Start von diesem Code bekommen. – mdirolf

+0

Wenn ich das mache, was Sie tun und die Ausgabe von mongod betrachten, sehe ich Verbindungen für jede HTTP-Anfrage, einschließlich Anfragen für CSS, JS-Dateien. –

Antwort

8

Die neueste Version des ruby mongodb driver enthält Verbindungspooling. Sie könnten Ihren Pool in Ihrem configure Block in Ihrer Sinatra-App und Bobs Onkel einrichten.

6

Wenn Sie Ihre Datenbankverbindung außerhalb des Bereichs der Anforderungsmethoden erstellen, wird die Verbindung bei jeder Anforderung nicht erneut hergestellt.

Sie können versuchen, eine globale oder Instanzvariable zu verwenden, wenn Sie die Datenbank initialisieren.

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

Auch Verbindungspooling ist hier nicht das Problem und ist sicherlich nicht die Lösung für dieses spezielle Problem.

+0

Ich denke, ich mache, was Sie vorschlagen, aber es verhält sich nicht wie Sie sagen. –

+0

Siehe "EDIT1" in meiner Frage als ein Beispiel für was nicht funktioniert. –

Verwandte Themen