Domanda

Ok, ecco lo scenario.Ho un'utilità che elabora tonnellate di record e inserisce di conseguenza le informazioni nel database.

Funziona su questi record in batch multi-thread.Ciascuno di questi batch scrive nello stesso file di registro per creare una traccia del flusso di lavoro per ciascun record.Potenzialmente, potremmo effettuare quasi un milione di scritture di log in un giorno.

Questo registro dovrebbe essere inserito in un database che risiede su un altro server?Considerazioni:

  1. L'ovvio svantaggio di più thread che scrivono sullo stesso file di registro è che i messaggi di registro vengono mescolati tra loro.Nel database possono essere raggruppati per ID batch.
  2. Prestazioni: cosa rallenterebbe maggiormente l'elaborazione batch?scrivere su un file locale o inviare dati di registro a un database su un altro server sulla stessa rete.In teoria, il file di registro è più veloce, ma c'è un trucco qui?

Ci sono ottimizzazioni che possono essere fatte su entrambi gli approcci?

Grazie.

È stato utile?

Soluzione

Confermo le altre risposte qui, dipende da cosa stai facendo con i dati.

Abbiamo due scenari qui:

  1. La maggior parte della registrazione avviene su un DB poiché gli utenti amministratori dei prodotti che creiamo devono essere in grado di visualizzarli nella loro piccola e simpatica app con tutti i fronzoli.

  2. Registriamo tutta la nostra diagnostica e le informazioni di debug in un file.Non abbiamo bisogno di "abbellirlo" davvero e TBH, non ne abbiamo nemmeno bisogno spesso, quindi per la maggior parte ci limitiamo a registrare e archiviare.

Direi che se l'utente sta facendo qualcosa con esso, quindi accedi al DB, se è per te, probabilmente sarà sufficiente un file.

Altri suggerimenti

La domanda interessante, se dovessi decidere di accedere al database, è dove registri gli errori di connessione al database?

Se accedo a un database, ho sempre una posizione di registro secondaria (file, registro eventi, ecc.) nel caso in cui si verifichino errori di comunicazione.Rende davvero più semplice la diagnosi dei problemi in un secondo momento.

Una cosa che mi viene in mente è che potresti fare in modo che ogni thread scriva nel proprio file di registro e quindi eseguire un'esecuzione batch giornaliera per combinarli.

Se stai accedendo al database probabilmente avrai bisogno di qualche messa a punto e ottimizzazione, soprattutto se il DB si troverà sulla rete.Come minimo dovrai riutilizzare le connessioni DB.

Inoltre, hai qualche esigenza specifica per avere il database dei log in?Se tutto ciò di cui hai bisogno è un "grep", non penso che guadagni molto accedendo al database.

Non sono sicuro che sia d'aiuto, ma c'è anche un'utilità chiamata Microsoft LogParser che presumibilmente puoi utilizzare per analizzare file di registro basati su testo e utilizzarli come se fossero un database.Dal sito web:

Log Parser è uno strumento potente e versatile che fornisce l'accesso universale a query a dati basati su testo come file di registro, file XML e file CSV, nonché fonti di dati chiave sul sistema operativo Windows® come il registro degli eventi, il registro, Il file system e Active Directory®.Racconta a Log Parser quali informazioni hai bisogno e come vuoi elaborare.I risultati della query possono essere formati su misura in output basato sul testo, oppure possono essere persistiti in obiettivi più speciali come SQL, syslog o un grafico.La maggior parte del software è progettata per svolgere un numero limitato di attività specifiche.Il parser di registro è diverso ...Il numero di modi in cui può essere utilizzato è limitato solo dalle esigenze e dall'immaginazione dell'utente.Il mondo è il tuo database con parser di registro.

Non ho usato il programma personalmente, ma sembra piuttosto interessante!

Oppure che ne dici di accedere a una coda?In questo modo puoi cambiare i sondaggi ogni volta che vuoi accedere a cose diverse.Rende molto semplici operazioni come il rollover e l'archiviazione dei file di registro.È anche bello perché puoi aggiungere sondaggi che registrano cose diverse, ad esempio:

  • un poller che cerca messaggi di errore e li pubblica sul tuo account FogBugz
  • un poller che cerca violazioni di accesso ("x ha tentato di accedere a /foo/y/bar.html") a un file di "tentativi di hacking"
  • eccetera.

Database: dal momento che hai menzionato più thread.La sincronizzazione e il recupero filtrato sono le ragioni della mia risposta.
Verifica se hai un problema di prestazioni prima di decidere di passare ai file
"Knuth:L'ottimizzazione prematura è la radice di tutti i mali" Non sono andato oltre in quel libro...:)

Esistono modi per aggirare le limitazioni della registrazione dei file.

Puoi sempre iniziare ogni voce di registro con un ID di thread di qualche tipo ed estrarre i singoli ID di thread.Oppure un file di registro diverso per ogni thread.

Ho effettuato l'accesso al database in passato, in un thread separato con una priorità inferiore.Devo dire che l'interrogabilità è molto preziosa quando stai cercando di capire cosa è andato storto.

Che ne dici di accedere al file di database, ad esempio un database SQLite?Penso che possa gestire scritture multi-thread, anche se ciò potrebbe anche avere dei costi generali in termini di prestazioni.

Penso che dipenda molto da cosa farai successivamente con i file di registro.

Delle due operazioni, la scrittura nel file di registro sarà più veloce, soprattutto perché suggerisci di scrivere in un database su un altro server.

Tuttavia, se si tenta di elaborare e cercare regolarmente i file di registro, il posto migliore per farlo sarebbe un database.

Se si utilizza un framework di registrazione come log4net, spesso forniscono semplici modi basati su file di configurazione per reindirizzare l'input al file o al database.

Mi piace la risposta di Gaius.Metti tutte le istruzioni di log in una coda thread-safe e poi elaborale da lì.Per DB potresti raggrupparli, diciamo 100 istruzioni di registro in un batch e per file potresti semplicemente trasmetterli in streaming nel file non appena entrano in coda.

File o DB?Come dicono molti altri;dipende dallo scopo per cui ti serve il file di registro.

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