Le module d'étagère de Python utilise-t-il des IO mappés par la mémoire?
Question
Quelqu'un sait-il si Python shelve
Le module utilise des IO mappés par la mémoire?
Peut-être que cette question est un peu trompeuse. Je le réalise shelve
Utilise un module de style DBM sous-jacent pour faire son sale boulot. Quelles sont les chances que le module sous-jacent utilise mmap
?
Je prototype un montant de données, et même si je réalise que l'optimisation prématurée est généralement désapprouvée, cela pourrait vraiment m'aider à comprendre les compromis impliqués dans ma conception.
La solution
Existant dbm
Les implémentations dans la bibliothèque standard Python utilisent toutes des E / S "normales", pas du mappage de mémoire. Vous devrez coder le vôtre dbm
Implémentation ISH avec mappage de mémoire et intégrer avec shelve
(directement, ou, plus productif, à travers anydbm
).
Autres conseils
Je ne sais pas ce que vous essayez d'apprendre en posant cette question, car vous semblez déjà connaître la réponse: cela dépend de l'utilisation du magasin DBM réel. Certains d'entre eux utiliseront MMAP - je m'attends à ce que tout sauf DumbDBM utilise MMAP - mais alors quoi? Les frais généraux de Shelve ne sont certainement pas dans le choix MMAP-Versus-Fileio, mais dans l'opération de décapage. Vous ne pouvez pas mmap le fichier DBM raisonnablement vous-même dans les deux cas, car le module DBM peut avoir son propre verrouillage fantaisie (et ce n'est peut-être pas un seul fichier de toute façon, comme lorsqu'il utilise BSDDB.)
Si vous cherchez simplement l'inspiration pour votre propre banque de données, eh bien, ne regardez pas la plate-forme, car tout ce qu'il fait est de cornichon et de pass à un autre centre de données.