Python的搁架模块是否使用内存映射IO?
题
有人知道Python是否 shelve
模块使用内存映射的IO?
也许这个问题有些误导。我意识到这一点 shelve
使用基础DBM式模块来完成其肮脏的工作。基础模块使用的机会是什么 mmap
?
我正在制作数据存储,尽管我意识到通常会皱眉过过早优化,但这确实可以帮助我理解设计中涉及的权衡。
解决方案
现存的 dbm
Python标准库中的实现都使用“正常” I/O,而不是内存映射。您需要编码自己的 dbm
使用内存映射的ISH实现,并将其集成 shelve
(直接,或更有效地通过 anydbm
).
其他提示
我不确定您想通过问这个问题来学习什么,因为您似乎已经知道答案:这取决于正在使用的实际DBM商店。他们中的一些人会使用MMAP-我希望除了dumbdbm以外的其他所有内容都可以使用MMAP-但是呢?几乎可以肯定的是,搁置的开销肯定不是在MMAP-versus-fileio选择中,而是在腌制手术中。在任何一种情况下,您都不能明智地击败DBM文件,因为DBM模块可能具有自己的精美锁定(无论如何它可能不是一个文件,例如当使用BSDDB时。)
如果您只是在寻找自己的数据存储的灵感,那么,不要看搁置,因为它所做的只是腌制和帕斯 - 还有另一个数据存储。
不隶属于 StackOverflow