从XML导入MySQL的时间

时间:2016-08-26 12:16:48

标签: mysql xml import execution-time

我使用脚本将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;给我的话;)

0 个答案:

没有答案