問題:給定一組約250000個整數用戶ID和大約1TB的JSON格式的每行記錄,將用戶ID匹配的記錄加載到數據庫。搜索文本以查找長串子列表
只有約1%的記錄與250000個用戶ID匹配。而不是JSON解碼每個記錄,這需要很長時間,我試圖使用字符串匹配來確定用戶ID是否在原始JSON中;如果匹配,那麼JSON將被解碼並檢查記錄,然後插入。
問題是將一個原始JSON字符串與包含〜250k字符串條目的集合匹配得很慢。
這裏是到目前爲止的代碼:
// 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機器上每秒處理約2個條目(不太好)。當用戶ID列表非常短時,管理大約200000個條目/秒。
看起來像一個真正的數據庫可能是這樣的更好的解決方案。不幸的是,我不使用數據庫,所以我不能推薦任何東西(雖然我猜別人會這麼做) – mgilson
這個,'for'循環中的'any'是非常昂貴的。你的行爲指數增長。 – Daenyth