2

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

也许这个问题有点误导。我意识到shelve使用底层 dbm 样式的模块来完成其肮脏的工作。底层模块使用的机会是什么mmap

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

4

2 回答 2

4

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

于 2010-04-11T22:40:32.893 回答
3

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

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

于 2010-04-11T22:30:52.137 回答