Mysql
 sql >> база данни >  >> RDS >> Mysql

Нуждаете се от ефективен във времето метод за импортиране на голям CSV файл чрез PHP в множество MySQL таблици

Написах PHP скриптове за групово зареждане на данните, публикувани от Stack Overflow data dump. Внасям милиони редове и това не отнема толкова време.

Ето няколко съвета:

  • Не разчитайте на автоматично завършване. Разходите за стартиране и извършване на транзакция за всеки ред са огромни. Използвайте изрични транзакции и ангажирайте след всеки 1000 реда (или повече).

  • Използвайте подготвени изявления. Тъй като по същество правите едни и същи вмъквания хиляди пъти, можете да подготвите всяко вмъкване, преди да започнете цикъла, и след това да го изпълните по време на цикъла, като предавате стойности като параметри. Не знам как да направя това с библиотеката на базата данни на CodeIgniter, ще трябва да го разберете.

  • Настройте MySQL за импортиране. Увеличете кеш буферите и т.н. Вижте Скорост на инструкциите INSERT за повече информация.

  • Използвайте LOAD DATA INFILE. Ако е възможно. Това е буквално 20 пъти по-бързо от използването на INSERT за зареждане на данни ред по ред. Разбирам, ако не можете, защото трябва да получите последния идентификатор за вмъкване и т.н. Но в повечето случаи, дори ако прочетете CSV файла, го пренаредите и запишете в множество временни CSV файлове, зареждането на данните все още е по-бързо, отколкото при използването на INSERT.

  • Направете го офлайн. Не изпълнявайте дългосрочни задачи по време на уеб заявка. Срокът на PHP заявка ще прекрати заданието, ако не днес, то следващия вторник, когато заданието е с 10% по-дълго. Вместо това направете уеб заявката да постави заданието на опашка и след това върнете контрола на потребителя. Трябва да стартирате импортирането на данни като сървърен процес и периодично да позволявате на потребителя да види скоростта на напредък. Например, евтин начин да направите това е вашият скрипт за импортиране да изведе "." към временен файл, а след това потребителят може да поиска да види временния файл и да продължи презареждането в браузъра си. Ако искате да станете фантастични, направете нещо с Ajax.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Изберете последния вмъкнат ред по най-лесния начин

  2. Как да игнорирате дублиращи се редове при вмъкване

  3. МАЧИ СРЕЩУ с множество колони в MySQL

  4. MySQL - Контролирайте кой ред се връща от група от

  5. MySQL - Как да преброите всички редове на таблица в една заявка