問題:約250000個の整数ユーザーIDのセットと、約1テラバイトのJSON形式の1行に1つのレコードがある場合、ユーザーIDがデータベースと一致するレコードをロードします。
すべてのレコードの約1%のみが250000のユーザーIDと一致します。長い時間がかかる各レコードをJSONでデコードするのではなく、文字列照合を使用して、ユーザーIDが生のJSONに含まれているかどうかを判断しようとしています。一致する場合は、JSONがデコードされ、レコードがチェックされてから挿入されます。
問題は、生のJSONの1つの文字列を約25万の文字列エントリを含むセットと照合するのが遅いことです。
これまでのコードは次のとおりです。
// get the list of integer user IDs
cur.execute('select distinct user_id from users')
// load them as text into a set
users = set([])
for result in cur.fetchall():
users.add(str(result[0]))
// start working on f, the one-json-record-per-line text file
for line in f:
scanned += 1
if any(user in line for user in users):
print "got one!"
// decode json
// check for correct decoded user ID match
// do insert
私はこれに正しい方法でアプローチしていますか?これらの文字列を照合するためのより高速な方法は何ですか?現在、非常に多くのユーザーIDを探す場合、これは3GHzマシンで1秒間に最大2つのエントリを管理します(あまり良くありません)。ユーザーIDのリストが非常に短い場合、1秒あたり最大200000エントリを管理します。