我有一個由域「日期,廣告,網站,展示,點擊」結構化行龐大的數據庫值Python的最快方法找到大數據
我用了所有的人都通過Python:
cursor.execute(select * from dabase)
data = cursor.fetchall()
從所有這些數據,我需要採樣只在某些網站打印已經帶來了點擊量大於零的數額時,在一定時間內所發生的廣告行,所以例如:
行( 1):(t1,ad1,site1) - > clicks = 1(t是時間)
行(2):(T2,AD1,站點1) - >點擊次數= 0
因此,在點t1的AD1和SITE1不得不點擊> 0,因此在含有AD1和站點1數據的所有點,必須採取並將其放入另一個列表,我稱其爲包含行(1)和行(2)(行(2)有0次點擊的final_list,但由於在時間t1內,ad1和site1的點擊次數> 0,所以此行必須是)
當我嘗試通過MySQL Workbench製作它時,我花了很長時間纔得到錯誤消息「丟失了與數據庫的連接」。我認爲這是因爲該表擁有近4000萬行,儘管我似乎在人們處理大量數據,但MySQL無法處理它,這就是爲什麼我使用python(實際上是爲了獲得點擊次數大於0的行在Python中花費了幾秒鐘,而通過MySQL需要花費10多分鐘,我不確定它究竟有多長時間)
然後我做的是首先選擇點廣告和網站點擊次數> 0:
points = [(row[1], row[2]) for row in data if row[4]]
points = list(set(points))
dic = {}
for element in points:
dic[element] = 1
此代碼只需要幾秒鐘即可運行。具有想要的點的字典,我開始將數據插入到final_list:
final_list = []
for row in data:
try:
if dic[(row[1], row[2])] == 1: final_list.append(row)
except: continue
但it's服用時間過長,從來就一直試圖想出一個辦法讓它走得更快。可能嗎?
我感謝任何幫助!
爲什麼你不只是在查詢中做到這一點? – 2012-03-29 01:51:17
有什麼理由不在數據庫上做它?我的意思是,在查詢內?數據庫經過優化,可以更快地進行這些操作。 – batbaatar 2012-03-29 01:52:25
你知道SQL的where子句嗎?現在你可能根本不會使用數據庫;發揮其優勢 – 2012-03-29 02:20:23