有人知道Python是否 shelve 模块使用内存映射的IO?

也许这个问题有些误导。我意识到这一点 shelve 使用基础DBM式模块来完成其肮脏的工作。基础模块使用的机会是什么 mmap?

我正在制作数据存储,尽管我意识到通常会皱眉过过早优化,但这确实可以帮助我理解设计中涉及的权衡。

有帮助吗?

解决方案

现存的 dbm Python标准库中的实现都使用“正常” I/O,而不是内存映射。您需要编码自己的 dbm使用内存映射的ISH实现,并将其集成 shelve (直接,或更有效地通过 anydbm).

其他提示

我不确定您想通过问这个问题来学习什么,因为您似乎已经知道答案:这取决于正在使用的实际DBM商店。他们中的一些人会使用MMAP-我希望除了dumbdbm以外的其他所有内容都可以使用MMAP-但是呢?几乎可以肯定的是,搁置的开销肯定不是在MMAP-versus-fileio选择中,而是在腌制手术中。在任何一种情况下,您都不能明智地击败DBM文件,因为DBM模块可能具有自己的精美锁定(无论如何它可能不是一个文件,例如当使用BSDDB时。)

如果您只是在寻找自己的数据存储的灵感,那么,不要看搁置,因为它所做的只是腌制和帕斯 - 还有另一个数据存储。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top