Python的搁置模块是否使用内存映射IO?

时间:2010-04-11 22:18:52

标签: python mmap shelve dbm

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

也许这个问题有点误导。我意识到shelve使用底层的dbm样式模块来完成它的脏工作。底层模块使用mmap的几率是多少?

我正在对数据存储进行原型设计,虽然我发现过早优化通常不受欢迎,但这可以帮助我理解设计中涉及的权衡。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

我不确定你要通过提出这个问题来学习什么,因为你似乎已经知道了答案:它取决于所使用的实际dbm存储。他们中的一些人会使用mmap - 我希望除了dumbdbm之外的所有东西都能使用mmap - 但那又怎么样?搁置的开销几乎肯定不在mmap-versus-fileIO选项中,而是在酸洗操作中。在任何一种情况下,你都无法合理地mmap dbm文件,因为dbm模块可能有自己的花哨锁定(并且它可能不是单个文件,就像它使用bsddb时一样。)

如果你只是想为自己的数据存储寻找灵感,那么,不要看看搁置,因为它所做的只是腌制并传递到另一个数据存储区。