我使用脚本将XML文件导入MySQL数据库。 XML包含大约165,000个数据集。
目前我已经导入了25.000个数据集 - 现在大约需要70分钟。这是正常的吗?
导入从具有以下规范的专用服务器上的shell运行:
Intel(R)Xeon(R)CPU E5-1620 v2 @ 3.70GHz 8个核心,10240KB缓存 RAM 64GB
平均负载:3.53,3.06,2.80
我无法相信这应该是正常的吗?
编辑(添加更多信息)
MySQL v 5.5.50
XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<amateures>
<amateur>
<id></id>
<login></login>
<figur></figur>
<vote_rating></vote_rating>
<haarfarbe></haarfarbe>
<gewicht></gewicht>
<groesse></groesse>
<plz></plz>
<sternzeichen></sternzeichen>
<vorlieben></vorlieben>
<vorlieben_en></vorlieben_en>
<uebermich></uebermich>
<uebermich_en></uebermich_en>
<geschlecht></geschlecht>
<staat></staat>
<gebtag></gebtag>
<regdate></regdate>
<urls>
<profil></profil>
<register></register>
</urls>
<images>
<overview></overview>
<overview_fsk16></overview_fsk16>
<overview_big></overview_big>
<overview_fsk16_big></overview_fsk16_big>
</images>
<videos>
<video>
<title></title>
<title_en></title_en>
<beschreibung></beschreibung>
<beschreibung_en></beschreibung_en>
<playtime></playtime>
<id></id>
<img_fsk16></img_fsk16>
<img></img>
<imgani></imgani>
<videourl></videourl>
<category></category>
[...]
<category></category>
</video>
<video>
[...]
</video>
</videos>
</amateur>
</amateures>
和php文件:
#!/usr/bin/php -n
<?php
function OpenDB () {
$connect = mysqli_connect('localhost','','');
if(!$connect) die ("Connection to SQL-Server failed!");
$database = mysqli_select_db($connect, "");
if(!$database) die ("Selection of Database failed!");
return $connect;
}
$connect = OpenDB();
$count = 0;
$countnew = 0;
$countvid = 0;
$starttime = time();
$xml = simplexml_load_file("import.xml");
$query = "update amateur set deleted = 1";
mysqli_query($connect, $query);
$query = "delete from amateur_vid";
$res = mysqli_query($connect, $query);
foreach ($xml->amateur as $amateur) {
$count++;
$amateur_id = $amateur->id;
$amateur_login = utf8_decode($amateur->login);
$amateur_figur = $amateur->figur;
$amateur_vote_rating = $amateur->vote_rating;
$amateur_haarfarbe = $amateur->haarfarbe;
$amateur_gewicht = $amateur->gewicht;
$amateur_groesse = $amateur->groesse;
$amateur_plz = $amateur->plz;
$amateur_sternzeichen = $amateur->sternzeichen;
$amateur_vorlieben = $amateur->vorlieben;
$amateur_vorlieben_en = $amateur->vorlieben_en;
$amateur_uebermich = $amateur->uebermich;
$amateur_uebermich_en = $amateur->uebermich_en;
$amateur_geschlecht = $amateur->geschlecht;
$amateur_staat = $amateur->staat;
$amateur_gebtag = $amateur->gebtag;
$amateur_regdate = $amateur->regdate;
foreach ($amateur->urls as $url) {
$amateur_profil = $url->profil;
$amateur_register = $url->register;
}
foreach ($amateur->images as $image) {
$amateur_overview = $image->overview;
$amateur_overview_fsk16 = $image->overview_fsk16;
$amateur_overview_big = $image->overview_big;
$amateur_overview_fsk16_big = $image->overview_fsk16_big;
}
$amateur_vorlieben = mysqli_escape_string($connect, $amateur_vorlieben);
$amateur_vorlieben_en = mysqli_escape_string($connect, $amateur_vorlieben_en);
$amateur_uebermich = mysqli_escape_string($connect, $amateur_uebermich);
$amateur_uebermich_en = mysqli_escape_string($connect, $amateur_uebermich_en);
$query = "select * from amateur where amateur_id = $amateur_id";
$res = mysqli_query($connect, $query);
if(mysqli_num_rows($res) == 0) {
$countnew++;
$query = "insert into amateur (amateur_id, amateur_login, amateur_figur, amateur_vote_rating, amateur_haarfarbe, amateur_gewicht, amateur_groesse, amateur_plz, amateur_sternzeichen, amateur_vorlieben, amateur_vorlieben_en, amateur_uebermich, amateur_uebermich_en, amateur_geschlecht, amateur_staat, amateur_gebtag, amateur_regdate, amateur_profil, amateur_register, amateur_overview, amateur_overview_fsk16, amateur_overview_big, amateur_overview_fsk16_big) values ($amateur_id, '$amateur_login', '$amateur_figur', '$amateur_vote_rating', '$amateur_haarfarbe', '$amateur_gewicht', '$amateur_groesse', '$amateur_plz', '$amateur_sternzeichen', '$amateur_vorlieben', '$amateur_vorlieben_en', '$amateur_uebermich', '$amateur_uebermich_en', '$amateur_geschlecht', '$amateur_staat', '$amateur_gebtag', '$amateur_regdate', '$amateur_profil', '$amateur_register', '$amateur_overview', '$amateur_overview_fsk16', '$amateur_overview_big', '$amateur_overview_fsk16_big')";
$res = mysqli_query($connect, $query);
} else {
$query = "update amateur set amateur_login='$amateur_login', amateur_figur='$amateur_figur', amateur_vote_rating='$amateur_vote_rating', amateur_haarfarbe='$amateur_haarfarbe', amateur_gewicht='$amateur_gewicht', amateur_groesse='$amateur_groesse', amateur_plz='$amateur_plz', amateur_sternzeichen='$amateur_sternzeichen', amateur_vorlieben='$amateur_vorlieben', amateur_vorlieben_en='$amateur_vorlieben_en', amateur_uebermich='$amateur_uebermich', amateur_uebermich_en='$amateur_uebermich_en', amateur_geschlecht='$amateur_geschlecht', amateur_staat='$amateur_staat', amateur_gebtag='$amateur_gebtag', amateur_regdate='$amateur_regdate', amateur_profil='$amateur_profil', amateur_register='$amateur_register', amateur_overview='$amateur_overview', amateur_overview_fsk16='$amateur_overview_fsk16', amateur_overview_big='$amateur_overview_big', amateur_overview_fsk16_big='$amateur_overview_fsk16_big', deleted=0 where amateur_id = $amateur_id";
$res = mysqli_query($connect, $query);
if(!$res)
die($query);
}
foreach ($amateur->videos as $videos) {
foreach ($videos->video as $video) {
$vids_title = $video->title;
$vids_title_en = $video->title_en;
$vids_beschreibung = $video->beschreibung;
$vids_beschreibung_en = $video->beschreibung_en;
$vids_playtime = $video->playtime;
$vids_id = $video->id;
$vids_img_fsk16 = $video->img_fsk16;
$vids_img = $video->img;
$vids_imgani = $video->imgani;
$vids_videourl = $video->videourl;
$vids_category = $video->category;
$query = "insert into amateur_vid (amateur_id, vids_title, vids_title_en, vids_beschreibung, vids_beschreibung_en, vids_playtime, vids_id, vids_img_fsk16, vids_img, vids_imgani, vids_videourl, vids_category) values ($amateur_id, '$vids_title', '$vids_title_en', '$vids_beschreibung', '$vids_beschreibung_en', '$vids_playtime', '$vids_id', '$vids_img_fsk16', '$vids_img', '$vids_imgani', '$vids_videourl', '$vids_category')";
$res = mysqli_query($connect, $query);
$setid = mysqli_insert_id($connect);
$countvid++;
}
}
}
$endtime = time();
$interval = $endtime-$starttime;
$query = "select count(id) from amateur where deleted = 1";
$res = mysqli_query($connect, $query);
$countdel = mysqli_result($res,0,0);
$query = "delete from amateur where deleted = 1";
mysqli_query($connect, $query);
?>
我的PHP脚本有一个小问题。我无法导入所有类别 - 每个视频只导入一个类别。
我已经开始提出一个问题了。
希望这些信息足够吗?多年前,这个脚本由程序员为我编写,用于另一个XML导入。我采用并更改了这个新的XML文件。
我不是专业的程序员,也不是母语为英语的人 - 所以请与&#34; easy&#34;给我的话;)