Domanda

Siamo nel valutare le tecnologie che useremo per memorizzare i dati che raccogliamo durante l'analisi del C / codice C ++. Nel caso di C ++, la quantità di dati può essere relativamente grande, ~ 20Mb per tu.

Dopo aver letto la seguente risposta SO mi ha fatto ritengo che HDF5 potrebbe essere una tecnologia adatta per noi da usare. Mi chiedevo se la gente qui potessero aiutarmi a rispondere ad alcune domande iniziali che ho:

  1. Prestazioni. L'uso generale per i dati saranno scrivere una volta e leggere "diverse" volte, simili alla vita di un file '.o' generato da un compilatore. Come si HDF5 confrontare contro l'uso di qualcosa di simile a uno SQLite DB? È che anche un confronto ragionevole fare?

  2. Nel corso del tempo l'aggiungeremo alle informazioni che abbiamo memorizzato, ma non necessariamente vogliono ridistribuire una serie completamente nuova di "lettori" per sostenere un nuovo formato. Dopo aver letto il manuale d'uso capisco che HDF5 è simile a XML o un DB, in quanto le informazioni è associato ad un tag / colonna e quindi uno strumento costruito per leggere una struttura più vecchio sarà solo ignorare i campi che non si preoccupa? È la mia comprensione su questo corretto?

  3. Un pezzo significativo delle informazioni che vogliamo scrivere sarà un tipo di albero di struttura: gerarchia di portata, tipo di gerarchia ecc Idealmente vorremmo modellare ambiti come avere genitori, figli, ecc E 'possibile avere un oggetto "punto" HDF5 ad un altro? In caso contrario, c'è una tecnica standard per risolvere questo problema utilizzando HDF5? Oppure, come è richiesto in un DB, abbiamo bisogno di una chiave unica che avrebbe "link" un oggetto all'altro con ricerche appropriate durante la ricerca per i dati?

Molte grazie!

È stato utile?

Soluzione

  

Come si HDF5 confrontare contro l'uso di qualcosa di simile a uno SQLite DB?   È che anche un confronto ragionevole fare?

Un po 'simile, ma non proprio. Sono entrambi file strutturati. SQLite ha caratteristiche per supportare le query di database utilizzando SQL. HDF5 ha caratteristiche per supportare grandi serie di dati scientifici.

Sono entrambi destinati ad essere elevate prestazioni.

  

Nel corso del tempo l'aggiungeremo alle informazioni che abbiamo memorizzato, ma non necessariamente vogliono ridistribuire una serie completamente nuova di "lettori" per sostenere un nuovo formato.

Se si memorizzano i dati in forma strutturata, i tipi di dati di queste strutture sono anche memorizzati nel file HDF5. Sono un po 'arrugginito su come questo funziona (ad esempio, se si comprende all'indietro innate di compatibilità), ma so che se si progetta il "lettore" in modo corretto dovrebbe essere in grado di gestire i tipi che vengono modificate in futuro.

  

E 'possibile avere un oggetto HDF5 "punto" ad un altro?

Assolutamente! Ti consigliamo di utilizzare attributi . Ogni oggetto ha una o più stringhe che descrivono il percorso per raggiungere tale oggetto. HDF5 gruppi analoghe a cartelle / directory, se non che le cartelle / directory sono gerarchico = un percorso unico descrive di ciascuna posizione (in file system w / o collegamenti rigidi almeno), mentre i gruppi formano un grafo orientato che può includere cicli. Non sono sicuro se è possibile memorizzare un "puntatore" per un oggetto direttamente come un attributo, ma si può sempre memorizzare un percorso assoluto / relativo come un attributo di stringa. (O in qualsiasi altro luogo come una stringa;. Si potrebbe avere tabelle di ricerca a bizzeffe se si voleva)

Altri suggerimenti

Produciamo dati HDF5 sul mio progetto, ma io non trattiamo direttamente con esso in genere. Posso prendere una pugnalata alle prime due domande:

  1. Usiamo un write once, read molte volte il modello e il formato sembra gestire questo bene. Conosco un progetto che sia usato per scrivere a un Oracle database e HDF5. Alla fine hanno rimosso l'uscita di Oracle dal prestazioni sofferto e nessuno stava usando. Ovviamente, SQLite non è Oracle, ma il formato HDF5 era più adatto per il compito. Sulla base di questo punto uno dei dati, un RDBMS può essere meglio sintonizzati per più inserimenti e aggiornamenti.

  2. I lettori utilizzano i nostri clienti sono robuste quando aggiungiamo nuovi tipi di dati. Alcune delle modifiche sono previste, ma non c'è bisogno di preoccuparsi di rompere cosa quando l'aggiunta di più campi di dati. Il nostro DBA ha recentemente scritto un programma Python per leggere i dati HDF5 e popolare file KMZ per la visualizzazione in Google Earth. Dal momento che si trattava di un progetto che ha usato per imparare Python, direi che non è difficile costruire lettori.

Sulla terza questione, mi inchino a di Jason S conoscenza superiore .

Direi HDF5 è una scelta del tutto ragionevole, soprattutto se sei già interessati in esso o piano di produrre qualcosa per la comunità scientifica.

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