Mi è stato affidato lo sviluppo di un visualizzatore Web (cioè eseguito nel browser) per un file di registro proprietario.
Non ho il controllo sul formato dei log, li consumo solo. Il file di registro contiene dati binari aggiunti da un messaggio di testo su ogni riga, quindi la parte di ogni riga deve essere deserializzata in lettura.
Quello che sto proponendo è l'approccio preferito qui per leggere rapidamente il file e renderlo disponibile per la ricerca e la pagina di recupero del testo.
I miei approcci:
Ho un servizio Web che legge il file e ne inserisce il contenuto in massa
- Nell'installazione di un server SQL
- In un no-SQL senza server come LiteDb
- In un'istanza Sqlite senza server con un file sqlite per file di registro.
I dati vengono cancellati dopo che i dati del file di registro non sono stati visualizzati per una settimana.
Il problema è che questi approcci funzionano bene su file con meno di 100 MB ma si rompono rapidamente con file di registro che a volte diventano 2 GB.
Anche su un file da 2 GB, l'analisi è relativamente veloce e apparentemente non è il collo di bottiglia. Sulle opzioni inutili, anche la scrittura dei dati analizzati è relativamente veloce
La query di testo completo non è eccezionale su nessuna opzione, anche se una volta che l'indice ha il tempo di creare sul server Sql, è decente.
Mi chiedo se qualcuno abbia qualche consiglio / esperienza con questo tipo di progetto - in pratica, de-serializzare rapidamente un file di grandi dimensioni e inserirli in massa in una sorta di archivio dati (forse un data-store in memoria sarebbe meglio ) e renderlo disponibile per l'interazione tramite un servizio web.
CHIARIMENTI:
@Basile - Scusa, non volevo sottintendere questo, volevo solo assicurarmi che stavo guardando in basso alla migliore via e avessi la soluzione più adatta
@Basile - I file di registro sono semplici, solo un blob binario da 45 byte che ho letto come byte e copiato in una struct (in .NET), quindi ho letto il resto del testo fino a un nuovo carattere di riga. Ripeti fino a EOF.
@DocBrown Spiacente, ho letto questo, ho pensato che fosse appropriato vedi qui
@Christophe Non ho 3 DB, quelli sono solo i tre approcci che ho provato finora.