È meglio memorizzare i log di utilizzo in modo saggio o centralizzato?

4

Devo sviluppare un sistema di registrazione per il mio progetto che ha molteplici funzionalità. Sono bloccato a una scelta. Potrei fare un database centralizzato e un front end per tutto. Oppure potrei avere una tabella di registro per ogni funzione e un front-end comune, tuttavia.

Centralizzato sembra la strada da percorrere ma ha i suoi svantaggi.

  • Alcune funzionalità creano più voci di registro mentre altre no. Quindi la tabella finale può avere un milione di voci di registro per la caratteristica xe 23 per la caratteristica y. Quindi ogni funzione paga il costo del tempo di accesso per l'uso avido di una funzione.

  • Anche una tabella può diventare abbastanza grande.

  • E dovrò standardizzare un singolo formato di registro e non potrò modellarlo per le singole funzionalità pur facendo uso delle funzionalità di DBMS come ordinamento, join, gruppo ecc. Dovrò memorizzare tutti i dettagli delle funzioni in un campo dati JSON.

I lati negativi di un sistema distribuito includono

  • Dovrò mantenere più tabelle.

  • Non ci sarà uno schema standardizzato, quindi costruire un front-end comune sarà molto problematico.

Qualcuno ha qualche esperienza con questo genere di cose?

    
posta Achshar 18.12.2016 - 23:13
fonte

3 risposte

4

Per la massima flessibilità, fai una combinazione di entrambi: una singola tabella centralizzata e singole tabelle che gestiscono dati specifici per una particolare azione o processo.

Avere una tabella centrale per registrare tutte le azioni di base. Potrebbe trattarsi di una voce individuale "Conto pagabile - Aggiungi" o "Processo del libro paga" in blocco. Potrebbero esserci tabelle separate che gestiscono più dettagli.

In questo modo, puoi trovare ciò che un utente o gli utenti hanno fatto durante un determinato periodo di tempo senza troppi problemi. Man mano che questa tabella cresce, non c'è motivo per cui non possa essere gestita eliminando o archiviando i dati.

Avere una tabella per un particolare processo o anche per ogni tabella nel database per tenere traccia delle modifiche consente di acquisire i dati in un modo che ha senso, ma ha una sorta di IDActivityCenter per il collegamento.

Questo sarà molto più facile avere il tuo logging corrispondente a ciò che l'applicazione sta facendo ora e in futuro. Non tutti i processi richiedono la propria tabella di dettagli.

    
risposta data 19.12.2016 - 12:27
fonte
0

Non sono esperto in log o database. Vorrei usare un sistema di registrazione come logstash per questo, ma per la tua domanda, usare una tabella singola con indici su funzionalità e livello è la scelta migliore, dato che gli indici ti daranno velocità, mentre avere una tabella ti darà flessibilità. Ad esempio, è possibile interrogare tutti gli errori o tutte le voci di registro da un utente, in modo da poter eseguire il debug del sistema in modo incrociato quando necessario.

    
risposta data 18.12.2016 - 23:43
fonte
0

È un po 'difficile rispondere alla domanda senza sapere per cosa utilizzerai i log.

Se la registrazione è puramente per il debug interno e la risoluzione dei problemi, i log delle singole funzioni potrebbero avere senso, poiché lo zoom verrà eseguito su un particolare sottosistema comunque.

Se la registrazione viene utilizzata per report o dashboard rivolti al cliente nel prodotto, è necessario considerare le relazioni di chiave esterna tra azioni in diverse funzionalità (ad esempio, l'utente ha eseguito le azioni X e Y negli ultimi 10 minuti che hanno generato Z), che a sua volta spinge verso una singola tabella (ad esempio con NoSQL DB) e / o schema normalizzato.

    
risposta data 19.12.2016 - 01:01
fonte

Leggi altre domande sui tag