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.