Справочная информация:
Я анализирую 330-мегабайтный XML-файл в БД (каталог netflix), используя скрипт PHP из консоли.
Я могу успешно добавлять около 1500 названий каждые 3 секунды до Я добавил логику для добавления актеров, жанров и форматов. Это отдельные таблицы, связанные ассоциативной таблицей.
прямо сейчас мне нужно выполнить много-много запросов для каждого заголовка , в этом порядке (сначала я усекаю все таблицы, чтобы исключить старые заголовки, жанры и т. Д.)
- добавить новый заголовок к заголовкам и захватить идентификатор вставки
- проверка таблицы актеров на наличие действующего актера
- если присутствует, получить идентификатор, если не вставить
Актер и получить вставить идентификатор
- вставить идентификатор заголовка и идентификатор актера в
ассоциативный стол
(шаги 2-4 повторяются и для жанров)
Это понизит мою скорость до 10 за 3 секунды. что заняло бы вечность, чтобы добавить ~ 250,00 названий.
так как бы я объединил 4 запроса в один запрос, не добавляя дублирующихся актеров или жанров
Моя цель - просто записать все запросы в файл данных и выполнить массовую вставку.
Я начал с записи всех ассоциативных запросов в файл данных, но это не сильно сказалось на производительности.
Я начинаю с добавления thitle и сохранения ID
function insertTitle($nfid, $title, $year){
$query="INSERT INTO ".$this->titles_table." (nf_id, title, year ) VALUES ('$nfid','$title','$year')";
mysql_query($query);
$this->updatedTitleCount++;
return mysql_insert_id();
}
, который затем используется вместе с именем каждого актера для создания ассоциации
function linkActor($value, $title_id){
//check if we already know value
$query="SELECT * FROM ".$this->persons_table." WHERE person = '$value' LIMIT 0,1";
//echo "<br>".$query."<br>";
$result=mysql_query($query);
if($result && mysql_num_rows($result) != 0){
while ($row = mysql_fetch_assoc($result)) {
$value_id=$row['id'];
}
}else{
//no value known, add to persons table
$query="INSERT INTO ".$this->persons_table." (person) VALUES ('$value')";
mysql_query($query);
$value_id=mysql_insert_id();
}
//echo "linking title:".$title_id." with rel:".$value_id;
$query = " INSERT INTO ".$this->title_persons_table." (title_id,person_id) VALUE ('$title_id','$value_id');";
//mysql_query($query);
//write query to data file to be read in bulk style
fwrite($this->fh, $query);
}