큰 XML 파일, 2,1gb 이상을 분석해야합니다.PHP가 포함 된 Xmlreader movetoelement
나는 PHP, Xmlreader 및 자동화 작업을 수행하여 매일 업데이트를 수행합니다.
내 서버가 제한되어 있고 자동화 된 작업이 1 시간 동안 제한됩니다.
1 시간 안에 2,1gb는 불가능하며 잠시 내 서버를 변경할 수 없습니다.
그래서 데이터베이스에 제품의 마지막 번호를 기록하고 두 번째 업데이트가 나타나면 다음 번에 xmlreader가 마지막으로 읽은 레코드와 비교합니다. 번호가 동일하면 업데이트 (PHP 왜곡)로 진행합니다. 다음 노드로 이동하고 마지막 번호를 기다립니다.
업데이트 된 노드의 마지막 번호로 더 빠르고 쉽게 이동하기 위해 두 번째 업데이트를 할 수 있습니까?
실제 시스템 작동하지만 파일을 읽고 마지막 제품 번호 저장을 찾으려면 시간이 필요합니다.
저는 영어를 잘 말하지 않으므로 이해할 것으로 기대합니다.
XML 파일의 일부 :
가 어떻게 직접 제품 ID 3에 갈 수 : PHP에서 분석
<?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
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();
}
사전에
?>
감사합니다!