Accedi al file o alla tabella del database?


12

Sto sviluppando un'applicazione Web che utilizza MS SQL per vari dati: inclusi utenti, account utente, licenze utente, prezzi delle licenze, fatture.

Devo registrare l'utilizzo del sistema in tempo reale da parte degli utenti e utilizzarlo per la fatturazione mensile: ad esempio, ogni volta che un utente riceve una pagina / URL specifici e fatturare gli utenti alla fine del mese in base al numero di pagine che hanno recuperato.

  • Devo scrivere questi eventi di registro in una tabella nel mio database MS SQL?

  • Devo scrivere questi eventi di registro in un file di registro di sola aggiunta non SQL?

  • Devo scrivere questi eventi di registro in un file di registro diverso per ciascun utente?

Questo non è un sito web particolarmente voluminoso: ad esempio, un massimo di 10.000 utenti ciascuno esegue una media di 5 eventi / giorno registrabili => 50.000 eventi / giorno = 30 eventi / minuto = 18.000.000 di eventi / anno.

Sto chiedendo perché entrambe le opzioni sembrano praticabili e non vedo se si ha un chiaro vantaggio.

I dati associati a un evento fatturabile sono semplici, ad esempio:

  • ID utente (relazione chiave esterna con la tabella Users in SQL)
  • Data e ora
  • URL della pagina fatturabile

La mia risposta a questa domanda è la seguente:

  • Alcuni vantaggi della scrittura del registro in una tabella del database:

    • Integrità relazionale: ad es. Gli eventi registrati sono associati a ID utente validi (definendo l'ID utente come chiave esterna tra le tabelle)
    • Facile da leggere per la fatturazione: ad es. SELECT COUNT GROUP BYPer ottenere un conteggio del numero di eventi di registro per utente
  • Alcuni vantaggi della scrittura nel file di registro:

    • Prestazioni più semplici: SQL viene utilizzato meno spesso, ad es. Solo per eventi di accesso degli utenti e principalmente utilizzato solo per la lettura
    • Gestione più semplice: archiviazione più semplice dei vecchi dati, ad esempio a fine anno, spostando i vecchi file di registro anziché eliminando / archiviando dal database

Per favore fatemi sapere se la mia risposta è sbagliata; o esagera l'importanza di qualcosa; o ha dimenticato alcune considerazioni importanti.

E / o per favore fatemi sapere quale è la vostra risposta, se è diversa dalla mia.


3
È necessario separare le informazioni utilizzate per prendere decisioni aziendali dalle informazioni di registrazione generali. Archivia tutto ciò che verrà successivamente utilizzato dall'applicazione nel database, le altre cose nei file di registro.
Tom,

1
Se stai usando un pacchetto ben noto come log4net - e probabilmente sarebbe una buona idea piuttosto che lanciare il tuo - dovrebbe essere solo una questione di lanciare la configurazione. @tom - la separazione è buona, ma perché non avere semplicemente due database, uno per i dati in tempo reale e uno per i registri di archiviazione ecc.?
Julia Hayward,

2
L'OP afferma che è per la fatturazione mensile - quindi mi sarei aspettato che applicare la logica di fatturazione a un db sarebbe molto più semplice dei file flat?
Julia Hayward,

1
Hai usato il termine "SQL" quando intendevi "database". Ho apportato alcune correzioni. SQL è un linguaggio che usi per leggere e scrivere nei database. MS SQL Server è il nome di un RDBMS. "SQL" da solo non significa "database MS SQL Server".
Tulains Córdova,

1
@gnat Non penso che questo sia un duplicato: l'altro riguardava gli errori di registrazione mentre si trattava dell'utilizzo della registrazione per la fatturazione (e in questo caso la risposta aggiornata e accettata era l'uso di un RDBMS).
ChrisW,

Risposte:


13

Dal momento che stai usando queste informazioni per scopi di fatturazione, non vedo perché non le vorresti nel database dove possono essere facilmente interrogate, aggregate, riportate e unite ad altri dati.

Penso anche che sia molto più semplice mantenere una singola tabella di database contenente le informazioni di registro rispetto a un mucchio di file di registro separati. Lo stesso vale per la tua preoccupazione per il carico sul server - ci sono modi molto migliori per gestirlo rispetto al ricorrere alla conservazione dei dati in file flat.

La tua terza opzione, comunque, è fare entrambe le cose. Utilizzare il database per la maggior parte delle esigenze, ma disporre del file di registro a scopo di controllo.


3
Un altro vantaggio dell'utilizzo di un database è l'utilizzo di trigger per determinate registrazioni. Non sarebbe necessario alcun codice aggiuntivo. Se i dati vengono inseriti nella tabella A, inserire il messaggio di registro X.
Greg Burghardt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.