Domanda

Voglio tenere i registri di alcune cose che le persone fanno nella mia app, in alcuni casi in modo che possano essere annullate se necessario.

È meglio archiviare tali registri in un file o in un database?Non so quali siano i pro e i contro, tranne che è un altro tavolo da impostare.

Esiste una terza (o quarta ecc.) opzione di cui non sono a conoscenza e che dovrei esaminare e conoscere?

È stato utile?

Soluzione

Quasi sicuramente vorrai utilizzare un database per un accesso flessibile basato su record e per sfruttare la capacità del database di gestire l'accesso simultaneo ai dati.Se è necessario tenere traccia delle informazioni che potrebbero dover essere annullate, averle in un formato strutturato è un vantaggio, così come avere la possibilità di aggiornare una riga che indica quando e da chi una determinata transazione è stata annullata.

Probabilmente vorrai scrivere su un file solo se prestazioni molto elevate sono un problema o se disponi di quantità di dati per record molto non strutturate o grandi che potrebbero essere inopportunamente archiviate in un database.Tieni presente che, a meno che la tua applicazione non abbia un numero molto elevato di transazioni, è improbabile che la velocità del database costituisca un problema.Tieni inoltre presente che se stai lavorando con un file dovrai gestire l'accesso simultaneo (lettura/scrittura/blocco) con molta attenzione, il che probabilmente non è qualcosa con cui vuoi avere a che fare.

Altri suggerimenti

Esiste almeno un motivo preciso per procedere all'archiviazione nel database.Puoi utilizzare INSERT DELAYED in MySQL (o costrutti simili in altri database), che restituisce immediatamente.Non otterrai dati di ritorno dal database con questo tipo di query e non è garantito che vengano applicati.

Utilizzando INSERT DELAYED, non rallenterai molto la tua app a causa della registrazione.Il database è libero di scrivere gli INSERT su disco in qualsiasi momento, quindi può raggruppare insieme un gruppo di inserimenti.

È necessario fare attenzione all'utilizzo della funzione timestamp incorporata di MySQL (come CURRENT_TIMESTAMP o CUR_DATE()), perché verranno chiamate ogni volta che la query viene effettivamente eseguita.Quindi dovresti assicurarti che ogni volta che i dati vengano generati nel tuo linguaggio di programmazione e non dal database.(Questo paragrafo potrebbe essere specifico di MySQL)

Sono un grande fan di log4php.Fornisce un'interfaccia standard per la registrazione delle azioni.È basato su log4j.La libreria carica un file di configurazione centrale, quindi non è mai necessario modificare il codice per modificare la registrazione.Offre inoltre diversi obiettivi di registro, come file, syslog, database, ecc.

Utilizzerei un database semplicemente per la manutenibilità: anche più modifiche su un file potrebbero far sì che alcune vengano perse.

Asseconderò entrambi i suggerimenti di cui sopra e aggiungerò che il blocco dei file su un registro di file flat può causare problemi quando sono presenti molti utenti.

Dai un'occhiata al mio thread precedente Una buona strategia per lasciare una traccia di controllo/cronologia delle modifiche per le applicazioni DB? sembra trattare lo stesso argomento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top