Integrità dei dati, BinaryWriter, C #

0

Ho sviluppato un sistema di acquisizione dati per un esperimento scientifico. Un FPGA bufferizza i dati scientifici in un FIFO e in un programma C # vuota questo FIFO ad una velocità di ~ 45MB / s.

Poiché la durata dell'esperimento è cambiata improvvisamente da secondi a giorni, ora i dati devono essere archiviati come dati binari.

Non essendo un programmatore o un informatico, mi sembra che esista un enorme potenziale di corruzione dei dati. In precedenza ogni pacchetto veniva scritto su una nuova riga. Se, per qualche ragione, mancasse un bit, si corromperebbe un pacchetto.

Tuttavia, per un bit mancante nei dati binari potremmo perdere TBs di dati insostituibili.

C'è un modo per assicurare che i dati non si trasformino in spazzatura? Il mio primo pensiero è di scrivere un file ASCII separato di dati del codice hamming, ma non so se sia fattibile.

    
posta ThomasRB 01.05.2015 - 13:31
fonte

2 risposte

0

Se vuoi resilienza contro gli errori nel tuo file, archivia i dati aggiuntivi che ti aiuteranno a risincronizzare e rilevare errori.

Se disponi di una tabella di offset per i record di dati, puoi utilizzarla per trovare un record, indipendentemente dal contenuto dei record.

Se hai un'intestazione per un record con le dimensioni e il checksum attesi, puoi verificare l'integrità e sapere come ignorarla se non è interessante o difettosa. Se assegni alla tua intestazione una firma univoca ragionevolmente, è probabile che sarai in grado di risincronizzare semplicemente scansionando in avanti fino a trovare un'intestazione valida.

Se inizi ad avere grandi quantità di dati, considera alcuni formati di archiviazione dei dati esistenti che sono stati testati in battaglia nella realtà. Qualsiasi database decente dovrebbe essere abbastanza buono per la memorizzazione di BLOB di dati binari con integrità accettabile.

    
risposta data 01.05.2015 - 13:37
fonte
0

per concetto logico Memorizza i dati in un database.
Memorizza datetimeoffset timestamp con i dati.
Usa 1 record per concetto o periodo.
Mantieni le righe inferiori a 4k in generale.
Se la convalida può essere eseguita sui dati prima di archiviarli.
Potresti persino persistere il checksum con i dati.

    
risposta data 01.05.2015 - 13:45
fonte

Leggi altre domande sui tag