MySql SELECT Cache

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
DoubleBig
Beiträge: 2
Registriert: Mi 15. Okt 2014, 12:02

MySql SELECT Cache

Beitrag von DoubleBig »

Moin,

ich habe nach dem Update meiner Entwicklungsumgebung einige Probleme... das erste, dass Transactions jetzt manuell Commited werden müssen habe ich nach einiger recherche herausgefunden... aber ich habe ein weiteres problem, an dem ich verzweifle:

Meine Datenbank wird von verschiedenen Anwendungen benutzt, einerseits meine Anwendung an der ich hier entwickle, andererseits auch von Webanwendungen über PHP... Nun ändert die Webseite regelmäßig Daten in der Datenbank.. Meine Anwendung verwendet immer irgendwie lokal gecachte Daten :?: dieses Verhalten ist irgendwie neu? wie kann ich das umgehen und die aAnwendung zwingen die Daten bei einem SELECT auch wirklich aus der Datenbank zu holen?

Hier ein Beispiel:

Code: Alles auswählen

Form1.SQLQuery1.Close;
Form1.SQLQuery1.SQL.Text := 'SELECT * FROM users WHERE username = :username and password = :password ;';
Form1.SQLQuery1.ParamByName('username').AsString := Edit1.Text;
Form1.SQLQuery1.ParamByName('password').AsString := s;
Form1.SQLQuery1.Open;


Beim ersten Ausführen kommen die Daten aus der Datenbank, danach werden lokale Daten verwendet... Nun können sich diese Daten im Hintergrund aber jeder Zeit ändern.... das ist suboptimal...

Entschuldigt bitte meine ggf. blöde Frage.. ich entwickle sonst Webanwendungen mit PHP :oops: dort gibt es weder Transactions noch irgendwelche lokal gecacheten Daten

Schon mal vielen Dank!

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: MySql SELECT Cache

Beitrag von mse »

DoubleBig hat geschrieben:Hier ein Beispiel:

Code: Alles auswählen

 
//Form1.SQLQuery1.Close;
 <deine Transaction>.rollback();
//(oder "commit()") hiermit werden alle mit der transaktion verbunden queries
//geschlossen und beim öffnen der queries wird ein neuer "snapshot" abgeholt.
 


Der Zweck von Transaktionen ist ja gerade eine stabile, unveränderliche Datenumgebung zu erzeugen.
MSEgui hat für Anwendungen in welchen dieses Verhalten unerwünscht ist die Option tao_fake. Vermutlich musst du das in FCL/Lazarus selber implementieren und dann als Patch anbieten. Ich habe es bei den massgebliche Personen schon mehrmals ergebnislos angeregt.

Antrepolit
Beiträge: 340
Registriert: Di 12. Sep 2006, 08:57
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: MySql SELECT Cache

Beitrag von Antrepolit »

Offensichtlich verstehst du das Transaktionen-Konzept nicht. Du solltest dich etwas damit auseinandersetzen, sonst wirst du Verständnisprobleme haben. Stichwort: Transaction Isolation Level.
Grüße, Antrepolit

care only if your os is really burning

DoubleBig
Beiträge: 2
Registriert: Mi 15. Okt 2014, 12:02

Re: MySql SELECT Cache

Beitrag von DoubleBig »

Im Prinzip sind mir der Sinn und Zweck von Transactions durchaus bewusst... Hab ich irgendwann in meiner Ausbildung mal gelernt.... ;-)
Ich muss aber zugeben, dass ich durch meine jahrelange Arbeit im PHP / MySql bereich (da wo ich meine Brötchen verdiene) gewohnt bin ohne zu arbeiten... da war es bisher für mich ein mehr oder weniger nutzloses Objekt, dass ich in meiner Application mit mir rumschleppen musste, ohne es wirklich zu benötigen...

Die Tragweite der Änderung ist doch schon imens, wenn man sich bisher nicht mit den Transactions beschäftigen musste und die gesamte Application die Transactions auch nirgendwo nutzt... kleine Änderung, große Wirkung...

Da sich meine bestehende Anwendung aber nun so nicht mehr funktioniert muss ich es gezwungener maßen umbauen... jeah... nachtschicht :D :D 8)

Vielen Dank für die schnelle Hilfe!

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: MySql SELECT Cache

Beitrag von Socke »

DoubleBig hat geschrieben:Ich muss aber zugeben, dass ich durch meine jahrelange Arbeit im PHP / MySql bereich (da wo ich meine Brötchen verdiene) gewohnt bin ohne zu arbeiten... da war es bisher für mich ein mehr oder weniger nutzloses Objekt, dass ich in meiner Application mit mir rumschleppen musste, ohne es wirklich zu benötigen...

Wenn du MyISAM als Tabellentyp verwendest, brauchst du auch keine Transaktionen (kann man machen, aber dann ist das halt doof). In SAP werden die Transaktionen in sogenannten Logical Units of Work (LUW) abstrahiert; Mit dem Begriff wird ganz gut beschrieben, was damit erreicht werden soll. Eine Transaktion in der gesamten Anwendung ist doch ein wenig ... wenig.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Antworten