Est-ce que quelqu'un sait si le module shelve
de Python utilise des E/S mappées en mémoire? Peut-être que cette question est un peu trompeuse. Je me rends compte que shelve
utilise un module sous-jacent de style dbm pour faire son sale boulot. Quelles sont les chances que le module sous-jacent utilise mmap
? Je suis en train de prototyper une banque de données, et bien que je réalise que l'optimisation prématurée est généralement mal vue, cela pourrait vraiment m'aider à comprendre les compromis impliqués dans ma conception.Le module shelve de Python utilise-t-il des E/S mappées en mémoire?
Répondre
Les implémentations dbm
existantes dans la bibliothèque standard Python utilisent toutes des E/S «normales», pas de mappage mémoire. Vous devrez coder votre propre implémentation ish dbm
avec le mappage de la mémoire, et l'intégrer avec shelve
(directement, ou, de façon plus productive, via anydbm
).
Je ne suis pas sûr de ce que vous essayez d'apprendre en posant cette question, puisque vous semblez déjà connaître la réponse: cela dépend du magasin dbm utilisé. Certains d'entre eux utiliseront mmap - je m'attends à tout sauf à dumbdbm pour utiliser mmap - mais alors quoi? Les frais généraux dans les étagères ne sont certainement pas dans le choix mmap-versus-file, 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 (et il peut ne pas s'agir d'un seul fichier, comme quand il utilise bsddb.)
Si vous êtes Je cherche juste de l'inspiration pour votre propre magasin de données, eh bien, ne regardez pas shelve, car tout ce qu'il fait est pickle-and-pass-long à un autre magasin de données.
Je suis assez sûr que BerkeleyDB utilise 'mmap()', si seulement il peut se casser dans des endroits inattendus :) J'ai aussi vu des implémentations de dbm qui utilisent mmap. –