Ich entwickle eine Webanwendung, die MS SQL für verschiedene Daten verwendet: Benutzer, Benutzerkonten, Benutzerlizenzen, Lizenzpreise, Rechnungen.
Ich muss die Echtzeitnutzung des Systems durch die Benutzer protokollieren und diese für die monatliche Abrechnung verwenden: z. B. protokollieren, wann immer ein Benutzer eine bestimmte Seite / URL erhält, und die Benutzer am Monatsende anhand der Anzahl der abgerufenen Seiten abrechnen.
Soll ich diese Protokollereignisse in eine Tabelle in meiner MS SQL-Datenbank schreiben?
Soll ich diese Protokollereignisse in eine reine Nicht-SQL-Anhängeprotokolldatei schreiben?
Soll ich diese Protokollereignisse für jeden Benutzer in eine andere Protokolldatei schreiben?
Hierbei handelt es sich nicht um eine Website mit besonders hohem Datenaufkommen. Beispielsweise führen maximal 10.000 Benutzer durchschnittlich 5 protokollierbare Ereignisse pro Tag aus => 50.000 Ereignisse pro Tag = 30 Ereignisse pro Minute = 18.000.000 Ereignisse pro Jahr.
Ich frage, weil eine der beiden Optionen sinnvoll erscheint und ich nicht sehe, ob man einen klaren Vorteil hat.
Die mit einem abrechenbaren Ereignis verbundenen Daten sind einfach:
- Benutzer-ID (Fremdschlüsselbeziehung zur Users-Tabelle in SQL)
- Datum (und Uhrzeit
- URL der abzurechnenden Seite
Meine eigene Antwort auf diese Frage lautet wie folgt:
Einige Vorteile des Schreibens des Protokolls in eine Datenbanktabelle:
- Relationale Integrität: Beispielsweise werden protokollierte Ereignisse gültigen Benutzer-IDs zugeordnet (indem die Benutzer-ID als Fremdschlüssel zwischen den Tabellen definiert wird).
- Gut lesbar für die Abrechnung: ZB
SELECT COUNT GROUP BY
um die Anzahl der Log-Ereignisse pro Benutzer zu ermitteln
Einige Vorteile des Schreibens in eine Protokolldatei:
- Einfachere Leistung: SQL wird seltener verwendet, z. B. nur für Benutzeranmeldungsereignisse, und meist nur zum Lesen
- Einfachere Verwaltung: Einfachere Archivierung alter Daten, z. B. zum Jahresende, durch Verschieben alter Protokolldateien anstatt durch Löschen / Archivieren aus der Datenbank
Bitte lassen Sie mich wissen, wenn meine Antwort falsch ist. oder übertreibt die Wichtigkeit von etwas; oder hat einige wichtige Überlegungen vergessen.
Und / oder lassen Sie mich bitte wissen, wie Ihre Antwort lautet, falls sie sich von meiner unterscheidet.
Antworten:
Da Sie diese Informationen für Abrechnungszwecke verwenden, verstehe ich nicht, warum Sie sie nicht in der Datenbank haben möchten, in der sie einfach abgefragt, aggregiert, gemeldet und mit anderen Daten verknüpft werden können.
Ich denke auch, dass es viel einfacher ist, eine einzelne Datenbanktabelle zu verwalten, die die Protokollinformationen enthält, als mehrere separate Protokolldateien. Dasselbe gilt für Ihre Bedenken hinsichtlich der Auslastung des Servers - es gibt viel bessere Möglichkeiten, damit umzugehen, als auf das Speichern von Daten in Einfachdateien zurückzugreifen.
Ihre dritte Option ist übrigens, beides zu tun. Verwenden Sie die Datenbank für die meisten Anforderungen, verfügen Sie jedoch über die Protokolldatei für Überwachungszwecke.
quelle