PHP эффективно обновляет большие CSV-файлы

#php #arrays #csv #bigdata

#php #массивы #csv #bigdata

Вопрос:

так что, в принципе, моя цель здесь довольно проста. У меня есть большой файл инвентаризации CSV с примерно 400 тысячами строк/элементов, и я получаю файл csvstock каждые пару минут. Я пытаюсь найти эффективный и быстрый способ переноса нового количества запасов из собранной ленты запасов и обновления запасов в моем файле инвентаризации. Я создал массив из ленты запасов, просматривая csv-файл инвентаря, и если артикул из ленты запасов совпадает с артикулом моего файла запасов, я заменяю количество запасов из ленты запасов в свой файл инвентаря.

Но эффективность здесь действительно плохая, требуются годы, чтобы обновить эти 400 тысяч строк.

Есть идеи о хорошем эффективном способе обновления csv-файла моего инвентаря данными из моей ленты? Может быть, PHP не подходит для работы здесь, и если да, то какие-либо другие советы о том, как работать с ним быстро и эффективно ?

Это мой вонючий код до сих пор:

 lt;?php $rows = array_map('str_getcsv', file('stock-feed.csv') , [","]); $header = array_shift($rows); $csv = array(); foreach ($rows as $row) {  $csv[] = array_combine($header, $row); }  $row = 1; $filedone = fopen("updatedStockInventory.csv", "w");  $fileName = "Inventory.csv";  $file = fopen($fileName, "r");  while (($column = fgetcsv($file, 10000, "|")) !== false) {   if ($row == 0)  {   }  else  {  $key = array_search($column[2], array_column($csv, 'sku'));  $stock = $csv[$key]['stock'];  if ($key != "")  {  //Write line with new stock count   }  else  {  //skip  }   fputs($filedone, $line);   }  $row  ; }  ?gt;  

Комментарии:

1. Вы не сказали нам, сколько строк в обновлениях. Рассматривали ли вы возможность размещения инвентаря в базе данных, а затем обновления базы данных? Всякий раз, когда требуется инвентаризация, вы можете экспортировать ее из базы данных.

2. Есть ряд вещей, которые вы можете попробовать (например, оставить импорт постоянно работающим со всем CSV-файлом в памяти), но вы в значительной степени находитесь на том этапе, когда вам действительно нужно подумать о правильной базе данных. Черт возьми, даже SQLite будет работать лучше, чем такой большой CSV.