2016-09-28 118 views
0

我有一個PHP程序,它從API獲取以下240小時的天氣預報數據,爲100個不同的城市(總共24000條記錄;我保存它們在一個表中)。該計劃針對每個城市和每個小時獲取溫度,溼度,降水概率,天空覆蓋和風速。這些數據採用JSON格式,我必須將其全部存儲到數據庫中,最好是mySQL。對於所有城市來說,這個操作必須一次完成,這一點很重要。使用來自JSON對象的值批量更新數據庫表

由於我想每10分鐘更新一次數值,因此性能非常重要。如果有人能告訴我哪個是最有效的方式來更新我的表與JSON的值,這將是非常有幫助的。

到目前爲止,我已經嘗試了以下策略:
1)解碼JSON,並使用一個帶準備語句的循環來更新每個值{太慢};
2)使用存儲過程{我不知道如何傳遞整個JSON對象的過程,並且我知道我可以傳遞的個體參數數量有限};
3)使用LOAD DATA INFILE {生成csv文件太慢};
4)使用UPDATE和CASE,動態生成sql(字符串變得太長,執行速度太慢)。

如果需要,我很樂意提供更多信息。

+1

我100%肯定這API將阻止此類流量。 –

+0

好的,在介紹中我簡化了一些東西,但這不是我問題的關鍵。我有一個json對象,我想把它放到一個DB中,就是這樣。 –

回答

0

你有一個大約有十幾列的表格,對嗎?你需要每10分鐘插入100行,對嗎?

像這樣插入100行,每只會有一點挑戰性。請向我們展示SQL代碼;有些事情一定是錯誤的。我無法想象你的任何選擇會花費幾秒鐘的時間。 「幾秒鐘」太慢了?

或者表格只有100行嗎?你每隔10分鐘發佈100次更新?儘管如此,沒有汗水。

重建技術:

如果可行,我將建立一個新表與新數據,然後交換表:

CREATE TABLE new LIKE real; 
Load the data (LOAD DATA INFILE is good if you have a .csv) 
RENAME TABLE real TO old, new TO real; 
DROP TABLE old; 

沒有停機時間 - 在real始終可用,不管負載需要多長時間。

(做了大規模的更新更加「努力」在數據庫內;重裝應該會更快。)

+0

我的錯誤,抱歉。我的意思是我有24000行,我想每10分鐘更新一次。 雖然你說得對,但我的代碼錯了。我已經重寫了它,現在查詢需要大約5秒鐘。 但是,由於我必須更新表中的所有行,所以我可能有興趣創建一個新表,您有什麼想法?在這種情況下,我該怎麼做,只需創建一個表,插入數據而不是更新它們,然後重命名這些表? 謝謝你的回答。 –

+0

我增加了我的答案。 –

相關問題