処理したいデータが DB に保存されています。DB アクセスは非常に遅いため、処理の前にすべてのデータをディクショナリにロードすることにしました。ただし、格納されているデータのサイズが大きいため、メモリ不足エラーが発生します (2 ギガ以上が使用されていることがわかります)。そこで、ディスク データ構造を使用することにしました。そして、shelve を使用するオプションがあることがわかりました。これが私がしていることです(疑似pythonコード)
def loadData():
if (#dict exists on disk):
d = shelve.open(name)
return d
else:
d = shelve.open(name, writeback=True)
#access DB and write data to dict
# d[key] = value
# or for mutable values
# oldValue = d[key]
# newValue = f(oldValue)
# d[key] = newValue
d.close()
d = shelve.open(name, writeback=True)
return d
いくつか質問があります。
1) 本当に writeBack=True が必要ですか? それは何をするためのものか?
2) データがディスクに書き込まれるタイミングを制御していないため、引き続き OutofMemory 例外が発生します。それ、どうやったら出来るの?数回繰り返すごとに sync() を実行しようとしましたが、それも役に立ちませんでした。
ありがとう!