2012-12-21 11 views
11

Ho lavorato a un progetto che genera un ordine di 10 - 100 milioni di output da una simulazione che vorrei conservare per analisi future. Esistono diversi livelli di organizzazione della natura dei dati, ad es. Le classi tengono gli studenti che prendono test che hanno una serie di metriche di rendimento differenti.Il modo migliore per archiviare da 10 a 100 milioni di output di simulazione da .net (SQL vs file flat)

Sembra che i miei dati siano una linea di confine in termini di poterli inserire tutti in una volta in memoria (dato che il calcolo delle simulazioni richiede una buona quantità di dati in memoria per eseguire il calcolo), ma non lo faccio avere immediatamente bisogno che tutti i dati siano disponibili per il mio programma in una sola volta.

Sto valutando la possibilità di inviare i valori calcolati a un database SQL oa un file di testo flat. Sto cercando consigli su quale approccio potrebbe essere più veloce/più facile da mantenere (o se hai un suggerimento alternativo per la memorizzazione dei dati che sono aperto a quello).

Non ho bisogno di essere in grado di condividere i dati con nessun altro o di preoccuparmi di accedere ai dati lungo la linea. Ho solo bisogno di un modo conveniente per evitare di rigenerare le simulazioni ogni volta che voglio apportare una modifica all'analisi dei valori.

risposta

3

In ordine sparso, sembra che sarebbe meglio salvare i risultati di ogni simulazione in un file flat. Non è necessario che sia un file di testo, potrebbe essere binario.

Dopo l'esecuzione di una o più simulazioni, i file possono essere letti e inseriti in un data warehouse per un'analisi successiva.

+2

Se i dati sono in oggetti .NET, Binary serializzazione potrebbe funzionare magicamente. – SWeko

4

Prenderei in considerazione l'utilizzo di un database: 100 milioni di file sono troppi per un file system senza alcun tipo di schema di classificazione, mentre un database può gestire facilmente molte righe. Potresti semplicemente serializzare l'output in una colonna BLOB in modo da non doverla mappare. Inoltre, considera che SQL Server ha file stream access, quindi questo potrebbe essere essenzialmente un approccio ibrido in cui SQL gestisce i file per te.

2

La velocità di back-of-the-envelope per il caricamento dei dati da un server RDBMS in memoria è di circa 10 KB al secondo. Se si dispone di record 100M e se è necessario utilizzare tutti i dati a un certo punto, si stanno esaminando circa tre ore per caricare i dati. Questo è prima di fare qualsiasi calcolo!

I file normali possono essere ordini di grandezza più veloci. Puoi ottenere abbastanza velocemente con un file basato su testo; andare in binario migliorerebbe ulteriormente la tua velocità a scapito della leggibilità del tuo file di dati.

Problemi correlati