Сценарий
Я хочу проанализировать большой CSV-файл и вставить данные в базу данных, CSV-файл содержит приблизительно 100 тыс. Строк данных.
В настоящее время я использую fgetcsv
для разбора файла строка за строкой и вставки данных в базу данных, и поэтому сейчас я беру базу данных для каждой строки данных, присутствующих в файле CSV, поэтому в настоящее время счетчик обращений к базе данных составляет 100 КБ, что не хорошо с точки зрения производительности.
Текущий код:
public function initiateInserts()
{
//Open Large CSV File(min 100K rows) for parsing.
$this->fin = fopen($file,'r') or die('Cannot open file');
//Parsing Large CSV file to get data and initiate insertion into schema.
while (($data=fgetcsv($this->fin,5000,";"))!==FALSE)
{
$query = "INSERT INTO dt_table (id, code, connectid, connectcode)
VALUES (:id, :code, :connectid, :connectcode)";
$stmt = $this->prepare($query);
// Then, for each line : bind the parameters
$stmt->bindValue(':id', $data[0], PDO::PARAM_INT);
$stmt->bindValue(':code', $data[1], PDO::PARAM_INT);
$stmt->bindValue(':connectid', $data[2], PDO::PARAM_INT);
$stmt->bindValue(':connectcode', $data[3], PDO::PARAM_INT);
// Execute the statement
$stmt->execute();
$this->checkForErrors($stmt);
}
}
Я ищу способ, при котором вместо нажатия на базу данных для каждой строки данных я могу подготовить запрос, а затем нажать его один раз и заполнить базу данных вставками.
Любые предложения !!!
Примечание: Это точный пример кода, который я использую, но CSV-файла больше нет. поля, а не только идентификатор, код, connectctid и connectcode, но я хотел убедиться, что я могу объяснить логику и поэтому использовал этот пример кода здесь.
Спасибо !!!