Mailinglisten-Archive |
>[hasXX flag mitfuehren] >an solch einer stelle koennte man trigger gebrauchen. ;) >Werd ich beim naechsten MYSLQ ist doof thread auf heise mal >anfuehren ;) Hi niko, Sowas lässt sich sogar machen... z.B. über nen Hintergrundprozess (datenbankgesteuert) Ja das ist halt so ne Sache, Triggers bremsen die Datenbank auch... Ich hab da z.B. so ein Löschweitergabescript geschrieben, dass mir dann einfach alle Referenzen raushaut wenn ein Hauptdatensatz gelöscht wurde (via cron). Das muss nicht mal so oft laufen, da ja die Datensätze deren Refrenzstamm weg ist sowieso nicht gezeigt werden. Bei Triggers ist das freilich anders. Das könnte man z.B. über ne Zeitschleife laufen lassen (sleep()) um dann die Datenbankdateien nach ihrem Aktualisierungsdatum abzuscannen. Hat sich das geändert passt der Prozess den Mus entsprechend an. Hier wärs natürlich nützlich mit Timestamps (Auch für Updates!) zu arbeiten, denn sonst sucht der sich damisch... ;-). Du kannst natürlich auch die Anfrage - Log - Datei von mysql zu Rate ziehen (kostet aber auch Performance, ausserdem soll das Ganze die binary - Log ersetzen). Das grösste Problem sind aber die Löschungen, da ja hier wenns gelöscht ist auch kein timestamp mehr da ist ;-(. Da lässt sich dann ein Löschflag einsetzen, damit der Pseudotrigger das übernimmt, anderenfalls muss der sonst die ganzen Tabellen durchscannen. Theoretisch könnte das sogar völlig ohne Datenbankänderungen laufen (da würd sich bei deinen Ein- und Ausgabgeschichten garnichts ändern). Da du ja in deinem Falle keinen "Update - Trigger" bräuchtest (das Flag in der Hauptdatenbank bleibt ja beim Update unberührt), kannst du einen neuen DS erkennen, wenn die ID grösser ist als beim letzten scannen ([autoincrement, versteht sich] musst du natürlich merken, am besten in ner Tabelle speichern). Löschen erkennst du nur an der Änderung des Dateiänderungsdatums. Da musst du halt mit nem Join die flags abfragen und entsprechend anpassen... Tja, grad hab ich da deine letzte Mail gelesen, php ist da natürlich nicht besonders geeignet, sollte schon was kompiliertes sein und mit einer Zeitschleife versehen werden. Ob die Rückmeldung nun ein paar Sekunden länger dauert dürfte doch in deinem Fall keine Rolle spielen, ein Dauerscanner frisst natürlich ungemein. Zweitens solltest du erst dann eine Verbindung zur DB aufmachen (und danach auch wieder schliessen) wenn was zu tun ist, deshalb solltest du auch das Dateisystem bzw. die betroffenen Datenbankdateien über das Dateisystem scannen... Das was für deinen Pseudotrigger zu tun ist muss als Initialisierung zuerst ausgelesen und im Speicher gehalten werden (sendmail, apache & Co. machen das auch so, deshalb mussen die Init - Dateien auch bei Änderung neu eigelesen bzw. neu gestartet werden)... Genug gefraselt MfG Wolfgang -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive