2010-04-11 49 views
2

有誰知道Python的shelve模塊是否使用內存映射IO?Python的擱置模塊是否使用內存映射IO?

也許這個問題有點誤導。我意識到shelve使用底層的dbm樣式模塊來完成它的骯髒工作。底層模塊使用的機會是什麼mmap

我正在建立一個數據存儲原型,雖然我認識到過早的優化通常是不被接受的,但這真的可以幫助我理解設計中涉及的折衷。

回答

4

現有的dbm在Python標準庫中的實現都使用「正常」I/O,而不是內存映射。您需要使用內存映射編寫自己的dbm ish實現,並將其與shelve(直接或更高效地通過anydbm)集成。

+1

我很肯定BerkeleyDB使用'mmap()',如果只是這樣它可以突破意外的地方:)我也看到了使用mmap的dbm實現。 – 2010-04-12 14:55:08

3

我不確定你想問什麼,因爲你已經知道答案了,它取決於實際使用的dbm存儲。其中一些將使用mmap - 我期望一切,但dumbdbm使用mmap - 但那又如何?擱置中的開銷幾乎肯定不在mmap-versus-fileIO選擇中,而是在酸洗操作中。由於dbm模塊可能有自己的花式鎖定(無論如何,它可能不是一個單獨的文件,就像使用bsddb時一樣),所以無法在這兩種情況下合理地映射dbm文件。

如果您只是爲自己的數據存儲尋找靈感,好吧,不要看着擱置,因爲它所做的只是醃製 - 傳遞給另一個數據存儲。