User since
2003-08-15
2653
Artikel
BenutzerIn
Da ich mit mod_perl2 arbeite und es scheinbar nicht möglich ist, die verbindung global zu gestalten, habe ich nun ein paar fragen zu DBI::connect_cached.
1. wird die gesamte Datenbank gecached oder die einzelnen Suchabfragen? Wenn letzteres Zutrifft, hat das ja gar keinen Sinn, da jeder User ja sowieso etwas anderes abfragt.
2. Genügt es, wenn ich die Verbindung "cache"? Also connect_cached() mache? Oder muss ich die einzelnen Abfragen/Inserts/Updates auch cachen?
3. wie verhält sich der Cache von DBI im Fall eines Stromausfalls? Ist dann alles weg oder wie?
Ich habe keinen Hardware/Software-RAID... nur den simplen von Linux der aber Stromausfälle nicht vorsieht...
User since
2005-08-17
1420
Artikel
BenutzerIn
zu 3. wuerd ich einfach mal sagen, dann hast du Pech gehabt. Der Datenbank sollte das normal weniger tun, die hat ihre Recovery-Verfahren, aber die Anweisungen, die noch gecached waren duerften weg sein.
User since
2003-08-15
2653
Artikel
BenutzerIn
und wann cached DBI? wie hoch ist der Intervall?
User since
2003-08-04
12208
Artikel
Admin1
mach einfach connect_cached statt connect. alles andere regelt DBI für dich.
alles, was intern passiert, ist, dass das $dbh objekt nicht jedesmal neu erstellt
wird, sondern ein schon vorhandenes aus dem pool genommen wird. vereinfacht
gesagt.
User since
2003-08-06
2246
Artikel
ModeratorIn
[quote=Froschpopo,24.02.2006, 14:58]und wann cached DBI? wie hoch ist der Intervall?[/quote]
Was steht denn dazu in der Doku?
User since
2003-08-06
2246
Artikel
ModeratorIn
Was erträumst Du Dir eigentlich? Mir sieht es etwas so aus, als geht es gar nicht um einen Cache, sondern um ein Transaktionsmanagement außerhalb der Datenbank, etwa auf dem Webserver?
Vielleicht beschreibst Du einfach mal ausführlicher, was Du Dir vorgenommen hast.
User since
2003-08-15
2653
Artikel
BenutzerIn
Ok: Ich arbeite mit mod_perl2.
Um nicht in jeder funktion einen verbindungsaufbau zur datenbank machen zu müssen, möchte ich diesen als einzigsten global machen.
use vars [$dbh];
$dbh = ...
nun ist mir wichtig, dass nicht meine ganzen inserts/updates verschwinden, wenn mein server mal plötzlich nen stromausfall hat.
Ist doch ziemlich simpel, oder?
User since
2005-01-17
14748
Artikel
Admin1
Was hindert doch denn daran, ein FLUSH TABLES auf die Tabellen zu machen? Dann werden die auch zurück geschrieben.
Einerseits willst du cachen, anderseits höchste Datensicherheit. ich glaube, das geht nicht.
Wenn du verhindern willst, dass immer wider auf dine Datenbank zugegriffen wird, dann solltest du wirklich Apache::DBI nutzen.\n\n
<!--EDIT|GwenDragon|1140797470-->
User since
2003-08-15
2653
Artikel
BenutzerIn
ich wills doch gar nicht verhindern!! Ich will lediglich mit mod_perl2 arbeiten und ptk meint, ich soll dann die datenbank cachen.\n\n
<!--EDIT|Froschpopo|1140798610-->
User since
2005-01-17
14748
Artikel
Admin1
QuoteDBI::connect_cached.
Die Doku von DBI sagt dazu:
Quoteconnect_cached is like connect, except that the database handle returned is also stored in a hash associated with the given parameters. If another call is made to connect_cached with the same parameter values, then the corresponding cached $dbh will be returned if it is still valid. The cached database handle is replaced with a new connection if it has been disconnected or if the ping method fails.
Es werde nur die Handles gecached, keine Inhalte der DB.