2008-08-30 6 views
5

Ich möchte einige Dinge protokollieren, die Benutzer in meiner App tun, in einigen Fällen, damit sie bei Bedarf rückgängig gemacht werden können.Anmeldung in einer PHP-Webanwendung

Ist es am besten, solche Protokolle in einer Datei oder einer Datenbank zu speichern? Ich bin völlig ratlos, was die Vor- und Nachteile sind, außer dass es ein weiterer Tisch ist.

Gibt es eine dritte (oder vierte usw.) Option, von der ich nicht weiß, dass ich darüber nachdenken und etwas darüber erfahren sollte?

Antwort

5

Sie werden mit ziemlicher Sicherheit eine Datenbank für flexiblen, datensatzbasierten Zugriff verwenden und die Vorteile der Datenbank nutzen, um gleichzeitig Datenzugriff zu ermöglichen. Wenn Sie Informationen zurückverfolgen müssen, die möglicherweise rückgängig gemacht werden müssen, ist es ein Vorteil, sie in einem strukturierten Format zu haben, und Sie können eine Zeile aktualisieren, die angibt, wann und von wem eine bestimmte Transaktion rückgängig gemacht wurde.

Sie möchten wahrscheinlich nur in eine Datei schreiben, wenn eine sehr hohe Leistung ein Problem ist oder wenn Sie sehr unstrukturierte oder große Datenmengen pro Datensatz haben, die möglicherweise in einer Datenbank gespeichert werden. Beachten Sie, dass die Geschwindigkeit der Datenbank wahrscheinlich kein Problem darstellt, es sei denn, Ihre Anwendung hat eine sehr große Anzahl von Transaktionen. Beachten Sie auch, dass Sie, wenn Sie mit einer Datei arbeiten, sehr vorsichtig mit dem gleichzeitigen Zugriff (Lesen/Schreiben/Sperren) umgehen müssen, was wahrscheinlich nicht mit Ihnen zu tun haben wird.

2

Ich würde eine Datenbank einfach für die Wartbarkeit verwenden - auch mehrere Änderungen an einer Datei können dazu führen, dass einige verpasst werden.

1

Ich werde die beiden oben genannten Vorschläge wiederholen und hinzufügen, dass das Sperren von Dateien in einem Flatfile-Protokoll Probleme verursachen kann, wenn viele Benutzer vorhanden sind.

9

Es gibt mindestens einen bestimmten Grund für die Speicherung in der Datenbank. Sie können INSERT DELAYED in MySQL (oder ähnlichen Konstrukten in anderen Datenbanken) verwenden, das sofort zurückkehrt. Bei dieser Art von Abfragen werden keine Rückgabedaten aus der Datenbank abgerufen, und es ist nicht garantiert, dass sie angewendet werden.

Wenn Sie INSERT DELAYED verwenden, werden Sie Ihre App aufgrund der Protokollierung nicht zu sehr verlangsamen. Die Datenbank kann die INSERTs jederzeit auf die Festplatte schreiben, so dass sie eine Reihe von Einfügungen bündeln kann.

Sie müssen auf die Verwendung der eingebauten Timestamp-Funktion von MySQL (wie CURRENT_TIMESTAMP oder CUR_DATE()) achten, da sie immer dann aufgerufen werden, wenn die Abfrage tatsächlich ausgeführt wird. Sie sollten also sicherstellen, dass die Daten jederzeit in Ihrer Programmiersprache und nicht in der Datenbank generiert werden. (Dieser Absatz wird MySQL-spezifische)

+2

Das ist ein neues für mich. Sehr glatt. –

+1

nicht garantiert? das hört sich nicht so gut an. Könntest du das erklären? –

3

Ich bin ein großer Fan von log4php. Es bietet Ihnen eine Standardschnittstelle für Protokollierungsaktionen. Es basiert auf log4j. Die Bibliothek lädt eine zentrale Konfigurationsdatei, sodass Sie Ihren Code nie ändern müssen, um die Protokollierung zu ändern. Es bietet auch mehrere Protokollziele, wie Dateien, Syslog, Datenbanken usw.