Il modulo Shelve di Python utilizza IO mappato a memoria?
Domanda
Qualcuno sa se Python's shelve
Il modulo utilizza IO mappato a memoria?
Forse questa domanda è un po 'fuorviante. Mi rendo conto shelve
Utilizza un modulo in stile DBM sottostante per fare il suo lavoro sporco. Quali sono le possibilità che il modulo sottostante usi mmap
?
Sto prototipando un dataStore e mentre mi rendo conto che l'ottimizzazione prematura è generalmente disapprovata, questo potrebbe davvero aiutarmi a capire i compromessi coinvolti nel mio design.
Soluzione
Esistente dbm
Le implementazioni nella libreria standard Python usano tutte l'I/O "normale", non la mappatura della memoria. Dovrai codificare il tuo dbm
ISH Implementation con mappatura della memoria e integrala con shelve
(direttamente o, più produttivo, attraverso anydbm
).
Altri suggerimenti
Non sono sicuro di ciò che stai cercando di imparare ponendo questa domanda, dal momento che sembri già conoscere la risposta: dipende dall'uso del negozio DBM effettivo. Alcuni di loro useranno MMAP - mi aspetto che tutto tranne DumbDBM usi MMAP - ma e allora? Il sovraccarico di Shelve non è quasi certamente nella scelta MMAP-veo-file, ma nell'operazione di decapaggio. Non è possibile mMap il file DBM in modo sensibile in entrambi i casi, poiché il modulo DBM potrebbe avere il suo blocco fantasia (e potrebbe non essere comunque un singolo file, come quando utilizza BSDDB.)
Se stai solo cercando ispirazione per il tuo DataStore, beh, non guardare Shelve, poiché tutto ciò che fa è il sottaceto e il passaggio per un altro dataStore.