Ich bin auf der Suche nach einer Lösung ähnlich der Inotify-Methode, Dateien für Änderungen zu beobachten. Ich bin mir bewusst, dass ich die binlog-Datei der MySQL-Datenbank beobachten und Abfragen ausführen kann, um die neuen Ergebnisse herauszusuchen, aber das scheint sehr ineffizient und unelegant zu sein; ebenso wie Massen von Abfragen in einer Schleife, die auf neue Ergebnisse warten.Gibt es eine Möglichkeit, eine MySQL-Datenbank für Änderungen mit Perl zu beobachten?
Antwort
Wenn Sie die Tabelle (n), an denen Sie interessiert sind, um eine TRIGGER ergänzen, können Sie damit die überwachte Anwendung benachrichtigen. Sie können dies auf verschiedene Arten tun:
- Erstellen Sie eine Audit-Tabelle in der Datenbank, und lassen Sie den Auslöser die relevanten Informationen dort schreiben; und lassen Sie Ihre Überwachungsanwendung die Audit-Tabelle nach neuen Einträgen abfragen. Sie pollen immer noch, aber in einer kontrollierten Weise, die den Server nicht zu hart trifft.
- Haben Sie den Auslöser call an external app durch eine UDF.
Das ist was [ich bereits vor 6 Tagen kommentiert] (http://stackoverflow.com/q/4418598#comment-4820725) als bereits existierende Antwort. Genießen Sie Ihre Prämie. – daxim
FWIW, ich habe diese Antwort hinzugefügt, bevor ich Ihren Kommentar bemerkt habe (was ich getan habe); und die erste meiner vorgeschlagenen Lösungen ist anders als deine. Ich habe wirklich nicht plagiiert. –
@daxim: Wenn Sie das Kopfgeld wollten - sollten Sie Ihren Kommentar als Antwort geschrieben haben! ;-) – Brad
Soweit MyISAM Tabellen gehen können Sie information_schema.TABLES.UPDATE_TIME
ansehen. Das würde Sie davon abhalten, alle Tabellen abzufragen, an denen Sie interessiert sind. Für InnoDB ist das Anschauen von binlog das Beste, was ich mir vorstellen kann.
+1 für information_schema. TABLES.UPDATE_TIME – DVK
Ein anderer Ansatz ist ein Push/Signal anstelle einer DB-Abfrage. Haben Sie einen Prozess, der die Datenbank aktualisiert, benachrichtigen Sie Ihren Perl-Code, dass ein Update über einen von Ihnen ausgewählten IPC durchgeführt wurde (heck, eine angehängte Protokolldatei mit Namen der Tabelle, die geändert wird, könnte den Erfolg gut genug machen).
Dies ist besonders effektiv, wenn die Updates eine ziemlich seltene/geringe Lautstärke, aber die Reaktionszeit auf sie muss schnell sein.
Ein weiterer Vorteil ist die Portabilität - funktioniert für jedes MySQL-Backend oder für jede andere DB-Engine.
Dies ist leider keine Option, da die Datenbank von einem anderen von mir verwendeten Drittanbieterprogramm aktualisiert wird und das Perl-Skript, das ich schreibe, die Datenbank nicht aktualisiert. – Drake
- 1. Perl Spott gibt es eine Möglichkeit, $ zu verspotten?
- 2. Gibt es eine Möglichkeit, eine Regex in Perl vorzukompilieren?
- 3. Beobachten einer Eigenschaft für Änderungen
- 4. Gibt es eine Möglichkeit, eine Variable für "isForEachable" zu testen?
- 5. Gibt es eine Möglichkeit, iPhone-Klassen geschlossen zu bearbeiten und zu beobachten
- 6. Gibt es eine Möglichkeit, eine lokale Niederlassung unveränderlich zu machen?
- 7. Gibt es eine Möglichkeit, nur Änderungen und Fehler anzuzeigen
- 8. VS debuggen und beobachten eine Variable für Änderungen
- 9. gibt es eine Möglichkeit, eine Liste der gültigen Locales in meinem Linux mit Perl zu finden?
- 10. Gibt es eine Möglichkeit, django.db.connection.queries zu löschen?
- 11. Gibt es eine Möglichkeit, Fenstereigenschaften zu verbergen?
- 12. Gibt es eine Möglichkeit, Datenbanktransaktionen zu beschleunigen?
- 13. Gibt es eine Möglichkeit, Webkonsolenfehler zu erkennen?
- 14. Gibt es eine allgemeine Möglichkeit, eine ConfirmIfDirty-Funktion für eine Webseite zu implementieren?
- 15. Gibt es eine Möglichkeit, ConfigurationManager.AppSettings zu überschreiben?
- 16. Gibt es eine Möglichkeit, Formularantwort zu ignorieren?
- 17. Gibt es eine Möglichkeit, Selektoren zu gruppieren?
- 18. Gibt es eine Möglichkeit, Typdeklarationen zu erweitern?
- 19. Gibt es eine Möglichkeit, schleichende Linie ohne Flackern zu erzeugen?
- 20. Gibt es eine Möglichkeit, Kovarianz zu deklarieren?
- 21. Gibt es eine Möglichkeit, Alamofire-Anfragen mit Wiederholungen zu tun
- 22. Gibt es eine Möglichkeit, Mehrfacheinspritzung zu propagieren?
- 23. Gibt es eine einfache Möglichkeit, die sichtbaren Zellen in einem UITableView zu beobachten?
- 24. Gibt es eine Möglichkeit, AMDPlugin zu deaktivieren?
- 25. Gibt es eine Möglichkeit, onPanResponderMove zu verwalten?
- 26. Gibt es eine Möglichkeit, PreparedStatement zu aktualisieren?
- 27. Gibt es eine Möglichkeit, Unterabfragen zu vermeiden?
- 28. Gibt es eine Möglichkeit, dies zu loopen?
- 29. Gibt es eine Möglichkeit, "träge" zu lesen?
- 30. Gibt es eine Möglichkeit, Duplikate zu vermeiden?
http://stackoverflow.com/questions/3501346/how-do-i-hook-into-an-event-triggered-once-a-mysql-query-is-true – daxim