Qual è il modo più efficiente per archiviare questi dati? (file flat CSV, intestazioni riga stessa, struttura ad albero)

1

I miei dati:

  • Dimensione - 15+ terabyte di testo.
  • Dati: massimo 1300 righe (sempre le stesse intestazioni delle righe), massimo 6 colonne
  • Le intestazioni delle colonne saranno diverse ma i valori sono tutti percentuali compresi tra 0 e 100. Il totale delle colonne in una riga aumenterà sempre fino al 100%. Quindi possiamo sbarazzarci immediatamente di una colonna.

Posso mantenere questo come un file system piatto? Questa sarà una struttura ad albero, quindi non credo che ci sia alcun valore in MySQL. Forse NoSQL. Una volta che i dati sono lì, non devono mai essere aggiornati. È appena letto. Esempio:

Item, action1, action2, action3
A, 20, 40, 60
B, 20, 30, 50
...
ZZZ 50, 50, 0

Utilizzo:

I dati verranno letti su un sito. Massimo 500 utenti (molto probabilmente meno di 100) e leggeranno tutti file diversi, raramente lo stesso allo stesso tempo. Durante la lettura di un file vengono utilizzate tutte le informazioni, quindi non vi è alcun valore nel poter leggere solo una riga. Caricheremo sempre tutte le informazioni dal file. Le informazioni sono solo leggere, non aggiornate mai.

Domande

  1. Il modo migliore per memorizzare queste informazioni?
  2. Ogni nodo (ovvero il file csv) nell'albero si trova nella propria cartella, con sottocartelle che rappresentano anche il nodo figlio. Andando fino in fondo all'albero. Si tratta di un enorme spreco di spazio? Non sei sicuro di un modo migliore di farlo se lo è.

Creerò una 15+ TB di dati. Molto facilmente crescerà fino a 50 tonnellate. Voglio davvero assicurarmi di farlo correttamente sin dall'inizio. Qualsiasi consiglio da parte di qualcuno con esperienza in questo può farmi risparmiare un sacco di tempo e mal di testa futuro. Anche suggerimenti che mi indicheranno nella direzione corretta stavo per usare qualcosa come MongoDB ma sto iniziando a pensare che forse tenerlo come un file system piatto non sarà male dato che caricherò sempre comunque il file completo e la struttura delle cartelle tiene traccia dell'albero. Nessuno dovrà saltare su un nodo molto lontano.

Questo è un enorme albero del gioco (più simile a this ). Quindi iniziamo dalla radice. La radice sarà una cartella chiamata root e avrà un file csv come sopra. Questa cartella avrà sottocartelle che rappresentano i bambini anche con file CSV come sopra e cartella che rappresenta i loro figli. E così via ... Quindi per ottenere informazioni fai clic sull'albero. Ci sarà un codice che legge solo le sottocartelle e crea collegamenti ai nodi successivi. (Un albero di gioco avrà 25-100 nodi di nodi ... quindi significa 25-100.000 cartelle che penso possano essere uno spreco di spazio.)

    
posta lessharm 24.08.2017 - 22:44
fonte

1 risposta

1

I file system sono ottimizzati molto bene, quindi i file piatti potrebbero funzionare molto bene. Dato che si tratta di un albero di gioco, immagino che ogni utente stia camminando sull'albero, scegliendo ogni volta un nodo figlio.

Non hai menzionato il tasso di richiesta. Se è alto, vorrete un SSD, che è ottimo per scrivere una volta letti molti.

Dato che un utente carica sempre l'intero file, sarebbe bene assicurarsi che il file si adatti a un singolo blocco nel file system. Il modo più semplice è creare un volume personalizzato se necessario. Questo potrebbe anche spingerti ad usare una codifica binaria del file piuttosto che ASCII. Dato che le etichette delle righe sono costanti, non è necessario memorizzarle affatto.

I valori in ogni file sono arbitrari? O può quindi essere calcolato in base ai valori nel genitore? Se è così, potrebbe essere meglio ricalcolare su richiesta - la lunghezza del percorso dell'istruzione per I / O è piuttosto lunga, quindi puoi fare un bel po 'di calcoli.

    
risposta data 28.08.2017 - 17:38
fonte

Leggi altre domande sui tag