Frage

Ich will, dass die Protokolle einige Dinge, die Menschen tun, in meiner app, in manchen Fällen so, dass es kann wieder rückgängig gemacht werden, wenn nötig.

Ist es am besten, um zu speichern von Protokollen in einer Datei oder einer Datenbank?Ich bin völlig ratlos, was die vor-und Nachteile sind, außer, dass es in einer anderen Tabelle setup.

Wird es eine Dritte (oder vierte usw.) option, ich bin mir nicht bewusst, dass ich in Aussehen sollte und mehr erfahren?

War es hilfreich?

Lösung

Sie werden fast sicher, dass für die Verwendung einer Datenbank für die flexible, record basierten Zugriff und nutzen die Datenbank in der Lage, um gleichzeitigen Zugriff auf Daten.Wenn Sie benötigen track Informationen, die müssen rückgängig gemacht werden, nachdem Sie in einem strukturierten format ist ein Vorteil, der hat die Möglichkeit, eine Zeile zu aktualisieren, die angibt, Wann und durch wen eine Transaktion rückgängig gemacht wurde.

Sie wahrscheinlich nur wollen, um eine Datei zu schreiben, wenn sehr hohe Leistung ist ein Problem, oder wenn Sie sehr unstrukturiert oder große Mengen an Daten pro Datensatz, könnte unweidly zur Speicherung in einer Datenbank.Beachten Sie, dass, Wenn Ihre Anwendung hat eine sehr große Anzahl von Transaktionen, Datenbank-Geschwindigkeit ist unwahrscheinlich, dass Sie ein Problem haben.Beachten Sie auch, dass, wenn Sie mit einer Datei müssen Sie Griff gleichzeitigen Zugriff (Lesen / schreiben / sperren) sehr sorgfältig, das ist wahrscheinlich nicht etwas, das Sie haben wollen, zu beschäftigen.

Andere Tipps

Es gibt mindestens einen bestimmten Grund zu gehen für die Speicherung in der Datenbank.Sie können INSERT DELAYED in MySQL (oder ähnliche Konstrukte, die in anderen Datenbanken), die sofort zurückgegeben.Sie erhalten keine Rückgabe von Daten aus der Datenbank mit dieser Art von Fragen, und Sie sind nicht garantiert zu werden angewendet.

Durch die Verwendung von INSERT DELAYED ist, die Sie nicht verlangsamen Ihre app zu viel, denn mit der Anmeldung.Die Datenbank ist frei zu schreiben, die Fügt auf die Festplatte zu jeder Zeit, so kann es bundle-ein Bündel von Einsätzen zusammen.

Sie müssen aufpassen, für die Verwendung von MySQL built-in timestamp-Funktion (CURRENT_TIMESTAMP oder CUR_DATE()), weil Sie wird immer aufgerufen, wenn die Abfrage ausgeführt wird.So sollten Sie machen sicher, dass jedes mal Daten generiert, der Programmiersprache, und nicht von der Datenbank.(Dieser Absatz kann eine MySQL-spezifische)

Ich bin ein großer fan von log4php.Es gibt Sie eine standard-Schnittstelle für die Protokollierung von Aktionen.Es basiert auf log4j.Die Bibliothek lädt eine zentrale config-Datei, so dass Sie nie brauchen, um zu ändern Sie Ihren code so ändern Sie die Protokollierung.Es bietet auch mehrere log-Ziele, wie zum Beispiel Dateien, syslog, Datenbanken, usw.

Ich möchte eine Datenbank verwenden, einfach für Wartbarkeit - auch mehrere änderungen an einer Datei können dazu führen, dass einige immer verpasst.

Ich werde die zweite der beiden obigen Vorschläge und hinzufügen, dass die Datei-sperren auf einer flachen Datei log kann zu Problemen führen, wenn es eine Menge von Benutzern.

Haben Sie einen Blick auf meinen früheren thread Gute Strategie für das verlassen eines audit-trail/änderungshistorie für DB-Anwendungen? es scheint cover das gleiche Thema.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top