私は、データの非常に大きなセットを更新する必要があり、これまでのところ、私はこれを持っている:の最適化、データベースの更新
protected function updateWidgetsDb($APIWidgets, $date)
{
echo "Eager loading...";
$widgets = Widget::where('date', $date)->get();
echo "Done\n";
echo "Updating...";
foreach ($APIWidgets as $APIWidget) {
$widget = $widgets->where('widget_id', $APIWidget->dimensions[0])->first();
if ($widget == null)
continue;
$widget->update(['revenue' => $APIWidget->metrics[0]->values[0]]);
}
echo "Done\n";
}
$APIWidgets
は、外部APIを介してフェッチされたアレイです。特定の日付のデータのみを取得しているので、DBにすでに存在するその日付のデータのみをロードしています。
widget_id
フィールドがDB
EDIT:
私は更新のために受けていますについての2kのデータとデータのおよそ60Kを持っています。これらの2kの各レコードは、既存の60kデータにすでに存在するIDを持っています。更新後、データの合計は62kではなく60kでなければなりません。
現在、更新プロセスには約10分かかります。
更新セットのサイズはどのくらいですか?なぜ2行目で 'get()'を使うのですか? –
'$ widgets'は雄弁なコレクションですが、後で[where()メソッド](https://laravel.com/docs/5.5/collections#method-where)を使用します。 – ljubadr
@ Norgulで詳細情報を提供できますか? '$ APIWidgets'にはいくつの要素がありますか? – ljubadr