有人知道Python的shelve
模块是否使用内存映射IO?
也许这个问题有点误导。我意识到shelve
使用底层的dbm样式模块来完成它的脏工作。底层模块使用mmap
的几率是多少?
我正在对数据存储进行原型设计,虽然我发现过早优化通常不受欢迎,但这可以帮助我理解设计中涉及的权衡。
答案 0 :(得分:4)
Python标准库中的现有dbm
实现都使用“普通”I / O,而不是内存映射。您需要使用内存映射对自己的dbm
ish实现进行编码,并将其与shelve
(直接或更高效地通过anydbm
)进行集成。
答案 1 :(得分:3)
我不确定你要通过提出这个问题来学习什么,因为你似乎已经知道了答案:它取决于所使用的实际dbm存储。他们中的一些人会使用mmap - 我希望除了dumbdbm之外的所有东西都能使用mmap - 但那又怎么样?搁置的开销几乎肯定不在mmap-versus-fileIO选项中,而是在酸洗操作中。在任何一种情况下,你都无法合理地mmap dbm文件,因为dbm模块可能有自己的花哨锁定(并且它可能不是单个文件,就像它使用bsddb时一样。)
如果你只是想为自己的数据存储寻找灵感,那么,不要看看搁置,因为它所做的只是腌制并传递到另一个数据存储区。