1

2,1 GB を超える大きな xml ファイルを分析する必要があります。

Php、Xmlreader、および自動化されたタスクを進めて、毎日更新を行います。

サーバーが制限されており、自動化されたタスクが 1 時間制限されています。

1 時間で 2.1 GB は不可能で、今のところサーバーを変更することはできません。

そのため、製品の最後の番号をデータベースに記録し、次の 1 時間後の 2 回目の更新時に、最後の番号レコードを xmlreader によって読み取られた新しい番号と比較します。番号が同じ場合は、更新に進みます。それ以外の場合 (PHP の歪み) 次のノードに移動し、最後の番号を待ちます。

2 回目の更新時に、更新されたノードの最後の番号にすばやく簡単に移動することは可能ですか?

実際のシステムは機能しますが、ファイルを読み取って、最後に保存された製品番号を見つけるのに時間がかかります。

私は英語があまり上手ではないので、あなたが理解してくれることを期待しています。

Xml ファイルの一部:

    <?xml version="1.0" encoding="utf-8"?>

<PRODUITS>

  <PRODUIT id="1">

    <CAPACITE>4</CAPACITE>

    <LOGEMENT><![CDATA[Résidence]]></LOGEMENT>

    <HEBERGEMENT><![CDATA[Studio 4 personnes]]></HEBERGEMENT>

    <REGION><![CDATA[Alpes du Nord]]></REGION>

    <PAYS><![CDATA[France]]></PAYS>

    <CODEPOSTAL>73500</CODEPOSTAL>
  </PRODUIT>

  <PRODUIT id="2">

    <CAPACITE>4</CAPACITE>

    <LOGEMENT><![CDATA[Résidence]]></LOGEMENT>

    <HEBERGEMENT><![CDATA[Studio 4 personnes]]></HEBERGEMENT>

    <REGION><![CDATA[Alpes du Nord]]></REGION>

    <PAYS><![CDATA[France]]></PAYS>

    <CODEPOSTAL>73500</CODEPOSTAL>
  </PRODUIT>

  <PRODUIT id="3">

    <CAPACITE>4</CAPACITE>

    <LOGEMENT><![CDATA[Résidence]]></LOGEMENT>

    <HEBERGEMENT><![CDATA[Studio 4 personnes]]></HEBERGEMENT>

    <REGION><![CDATA[Alpes du Nord]]></REGION>

    <PAYS><![CDATA[France]]></PAYS>

    <CODEPOSTAL>73500</CODEPOSTAL>
  </PRODUIT>
</PRODUITS>

私のPHP分析システム:

製品 ID 3 に直接アクセスするにはどうすればよいですか?

<?php
if(file_exists("$file_xml"))
{
  $reader = new XMLReader();
  $reader->open("$file_xml");

  while($reader->read())
  {
    if( ($reader->name === 'PRODUIT') && ($reader->nodeType==XMLReader::ELEMENT) )
    {
    $node = new SimpleXMLElement($reader->readOuterXML());


    $id= mysql_real_escape_string(utf8_decode($node['id']));

          // For the next update but TAKE TIME !!
          if( ($num!="3") ) 
      {
      // Nothing to do
          }
      else
      { 
      $num = mysql_real_escape_string(utf8_decode($node['num']));
          ....                          
      }
    }
   }
$reader->close();
}

?>

前もって感謝します !

4

1 に答える 1