Pythonの棚モジュールはメモリマップIOを使用しますか?
質問
Pythonのかどうかは誰もが知っていますか shelve
モジュールはメモリマップされたIOを使用しますか?
たぶん、その質問は少し誤解を招くでしょう。気付いた shelve
基礎となるDBMスタイルのモジュールを使用して、汚い仕事をします。基礎となるモジュールが使用する可能性は何ですか mmap
?
私はデータストアをプロトタイピングしていますが、時期尚早の最適化が一般的に眉をひそめていることに気付いていますが、これは私のデザインに関係するトレードオフを理解するのに役立つ可能性があります。
解決
既存 dbm
Python標準ライブラリの実装はすべて、メモリマッピングではなく「通常」I/Oを使用します。あなたはあなた自身をコーディングする必要があります dbm
メモリマッピングを使用したISHの実装とそれを統合します shelve
(直接、またはより生産的に、 anydbm
).
他のヒント
あなたがすでに答えを知っているように見えるので、あなたがこの質問をすることによってあなたが何を学ぼうとしているのかわかりません:それは実際のDBMストアが使用されていることに依存します。それらのいくつかはMMAPを使用します - 私はMMAPを使用するためにDumbDBM以外のすべてを期待しています - しかし、それで何ですか?棚のオーバーヘッドは、ほぼ間違いなくMMAP対フィリオの選択ではなく、ピクルス操作にあります。 DBMモジュールには独自の派手なロックがある可能性があるため、どちらの場合もDBMファイルを賢明に自分でmmapすることはできません(とにかく、BSDDBを使用する場合のように、とにかく単一のファイルではない場合があります。)
あなた自身のデータストアのインスピレーションを探しているだけなら、まあ、棚を見ないでください。