pickle.dump()によって生成されたサイズは約5GBです。このファイルをロードするのに約半日かかり、約50GMのRAMが必要です。私の質問は、すべてをメモリにロードするのではなく、エントリごと(1度に1つずつ)に別々にアクセスしてこのファイルを読むことができるかどうか、またはそのようなファイルのデータにアクセスする方法が他にあるかどうかです。巨大なPython Pickle辞書をロードする
多くのありがとうございます。
pickle.dump()によって生成されたサイズは約5GBです。このファイルをロードするのに約半日かかり、約50GMのRAMが必要です。私の質問は、すべてをメモリにロードするのではなく、エントリごと(1度に1つずつ)に別々にアクセスしてこのファイルを読むことができるかどうか、またはそのようなファイルのデータにアクセスする方法が他にあるかどうかです。巨大なPython Pickle辞書をロードする
多くのありがとうございます。
これは、ピクルデータベースではなく、データベースを使用して行うべきであるという疑問は全くありません。このような問題のためにデータベースが設計されています。
ここでは、辞書をsqlliteデータベースに置き、値を取得する例を示します。私のおもちゃの例ではなく、実際の辞書でこれを動作させるには、SQLについてもっと学ぶ必要がありますが、幸いなことに、オンラインで利用可能な多くの優れたリソースがあります。具体的には、SQLAlchemyの使い方を学ぶことができます。このオブジェクトリレーショナルマッパーは、オブジェクトを扱うような直感的な方法でデータベースを扱うことができます。
import os
import sqlite3
# an enormous dictionary too big to be stored in pickle
my_huge_dictionary = {"A": 1, "B": 2, "C": 3, "D": 4}
# create a database in the file my.db
conn = sqlite3.connect('my.db')
c = conn.cursor()
# Create table with two columns: k and v (for key and value). Here your key
# is assumed to be a string of length 10 or less, and your value is assumed
# to be an integer. I'm sure this is NOT the structure of your dictionary;
# you'll have to read into SQL data types
c.execute("""
create table dictionary (
k char[10] NOT NULL,
v integer NOT NULL,
PRIMARY KEY (k))
""")
# dump your enormous dictionary into a database. This will take a while for
# your large dictionary, but you should do it only once, and then in the future
# make changes to your database rather than to a pickled file.
for k, v in my_huge_dictionary.items():
c.execute("insert into dictionary VALUES ('%s', %d)" % (k, v))
# retrieve a value from the database
my_key = "A"
c.execute("select v from dictionary where k == '%s'" % my_key)
my_value = c.next()[0]
print my_value
幸運!
ダビデは本当に助けてくれてありがとう! – user1132834
または、[sqlitedict](https://pypi.python.org/pypi/sqlitedict)を使用して、健全性を維持してください。 – Radim
データが異質である場合は、ZODBを使用してオブジェクト指向のデータベースを試すことができます.ZODBを使用します。内部的にはpickleを使用しますが、大量のデータを管理するためにあなたのアプリケーション
ZODBはPythonアプリケーションサーバーであるZopeの中心です。今日、Ploneは他のアプリケーションの中でも特に優れています。
Zopeのツールを一切使わずにスタンドアロンで使用できます。データがSQLに適合しない場合は、二重にチェックする必要があります。
データベースについてはどうですか? http://docs.python.org/library/sqlite3.html – FogleBird
5 GBのうわー、Pickleを使って何をダンプしようとしているのですか? – mouad
どのような種類のデータがありますか?私は[hdf5](http://www.hdfgroup.org/HDF5/)のデータファイルで考えています – konus