2012-06-05 11 views
9

Ho un grande dizionario Python di vettori (150k vettori, 10k dimensioni ciascuno) di numeri mobili che non possono essere caricati in memoria, quindi devo usare uno di i due metodi per la memorizzazione di questo su disco e il recupero di specifici vettori quando appropriato. I vettori verranno creati e archiviati una sola volta, ma potrebbero essere letti molte (migliaia di) volte - quindi è davvero importante avere una lettura efficiente. Dopo alcuni test con il modulo shelve, tendo a credere che sqlite sarà una scelta migliore per questo tipo di compito, ma prima di iniziare a scrivere codice vorrei sentire altre opinioni su questo ... Ad esempio, ci sono altri opzioni tranne quelle due di cui non sono a conoscenza?Selezione tra shelve e sqlite per un dizionario molto grande (Python)

Ora, partendo dal presupposto che l'opzione migliore è sqlite, un'altra domanda si riferisce alla forma esatta della tabella. Sto pensando di utilizzare una struttura a grana fine con righe del modulo vector_key, element_no, value per semplificare l'impaginazione, invece di memorizzare tutti gli elementi 10k di un vettore nello stesso record. Gradirei davvero qualche suggerimento su questo problema.

risposta

9

Si desidera sqlite3, quindi se si utilizza un ORM come sqlalchemy, è possibile espandere facilmente e utilizzare altri database di back-end.

Shelve è più un "giocattolo" che effettivamente utile nel codice di produzione.

L'altro punto di cui si parla si chiama normalizzazione e personalmente non sono mai stato molto bravo in questo this dovrebbe spiegarlo per voi.

Proprio come una nota extra this mostra fallimenti di performance nel ripiano vs sqlite3

+0

Ciao, ho visto prima il link che stai suggerendo, il problema è che mette alla prova solo la scrittura, non la lettura che è la mia più grande preoccupazione. Per quanto riguarda la normalizzazione, entrambe le forme che suggerisco sopra sono già in forma normale, mi chiedo solo quale delle due sarà la più efficace per la lettura - immagino di poter eseguire alcuni test su questo. In ogni caso grazie per la risposta :) – dkar

3

Come avete a che fare con i vettori numerici, è possibile trovare PyTables un'alternativa interessante.

+0

Ciao, sembra davvero un'interessante alternativa, la guarderò meglio. Grazie per il suggerimento :) – dkar

Problemi correlati