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();
}
?>
前もって感謝します !