2017-07-25 23 views
0

我試圖將數據(夜間)從古老的系統導出到某些代碼更容易編寫的代碼中;但是,輸出的數據量是大量的。Laravel:MASSIVE updateOrCreate()

我將數據轉儲爲JSON對象,然後嘗試使用Laravel更新或創建,但我有太多數據。通常需要10個小時才能將所有數據處理到MySQL行中。

我認爲它很慢,因爲它實際上執行了5百萬個查詢。

有沒有人知道如何有效地使用Laravel執行MASSIVE updateOrCreate()

+2

你可能會想在Eloquent之外做這個。 – ceejayoz

+0

ORM在處理大量數據方面並不是特別好。使用普通的舊sql來做到這一點。插入...選擇...插入,多表更新更新。 – Shadow

+0

您可能想要至少分塊數據,以避免在處理之前佔用您的內存。如何嘗試這種方法:https://stackoverflow.com/a/44891984/5704410 –

回答

0

可能很多取決於確切的數據,但我會嘗試使用數據包。因此,您首先需要從JSON中獲取500個數據記錄,然後手動運行500個查詢以驗證數據是否存在。

對於那些存在運行更新爲他們每個人但對於那些不存在你不將它們插入到立即但是你把它們放到數組,然後插入他們在散裝這樣的:

DB::table('your_table')->insert($records); 

您應該確保您沒有太多記錄或者太少,以儘可能加快此過程。

一般而言,批量插入操作可以加快您的操作速度,但所有操作都取決於您擁有的數據以及放置這些數據的確切算法。

+0

我喜歡這種方法。它肯定會加快速度,但恐怕不會太多,因爲我非常肯定95%的數據只是更新(如果它甚至需要更新,因爲它已經被丟棄了,不管它是否已經改變了) – Neve12ende12

+0

您是否在更新之前檢查數據是否真的發生了變化?選擇查詢比更新要便宜得多。 – fubar