慢慢地从mysql数据创建xml文件


create xml file from mysql data to slowly

我想从mysql数据查询创建一个xml文件。

这部分工作得很好,但创建一个大约有5000行的文件大约需要15秒。

在apache服务器上,压缩是激活的。

查看我的代码:

    $recordset = mysql_query($query, $link);
$dom = new DOMDocument('1.0', 'UTF-8');
$rootNode= $dom->appendChild($dom->createElement('DatabaseDB'));
while($row_recordset = mysql_fetch_row($recordset))
{
    $record = new DomElement("p", "");
    $rootNode->appendChild($record);
    $record->SetAttribute("id", utf8_encode($row_recordset[0]));
    $record->SetAttribute("np", utf8_encode($row_recordset[1]));
    $record->SetAttribute("pr", utf8_encode($row_recordset[8]));
    $record->SetAttribute("d1", utf8_encode($row_recordset[2])." / ".utf8_encode($row_recordset[3]));
    $record->SetAttribute("dn", (datefr($row_recordset[4])));
    $record->SetAttribute("tel", utf8_encode($row_recordset[5]));
    $record->SetAttribute("st", utf8_encode($row_recordset[6])." - ".(datefr($row_recordset[7])));

}
mysql_free_result($recordset);
mysql_close();
print $dom->saveXML();

如果你有更快加载的想法,我很高兴。感谢

根据答案,我尝试:

    $writer = new XmlWriter();
$writer->setIndent(true);
$writer->openURI('php://output');
$writer->startDocument('1.0', 'utf-8');
$writer->startElement('DatabaseDB');
while($row_recordset = mysql_fetch_row($recordset))
{
    $writer->startElement('p');
    $writer->writeAttribute("id", utf8_encode($row_recordset[0]));
    $writer->writeAttribute("np", utf8_encode($row_recordset[1]));
    $writer->writeAttribute("pr", utf8_encode($row_recordset[8]));
    $writer->writeAttribute("d1", utf8_encode($row_recordset[2])." / ".utf8_encode($row_recordset[3]));
    $writer->writeAttribute("dn", (datefr($row_recordset[4])));
    $writer->writeAttribute("tel", utf8_encode($row_recordset[5]));
    $writer->writeAttribute("st", utf8_encode($row_recordset[6])." - ".(datefr($row_recordset[7])));
    $writer->endElement();
}
$writer->endElement();
$writer->flush();

但是,使用DomDocument,创建文件大约需要9秒(5000行),而使用XmlWriter大约需要8秒。

你有新的优化想法吗?谢谢所以,表演并不是更好。

DOM和SimpleXML扩展的问题是它们在大量内存上运行,然后在完成后写入磁盘。根据查询的大小,当您应该将内存流式传输到文件时,您可能会分页或花费太多时间管理内存。

看看XMLWriter()类。设置一个文件输出,您将在读取行时直接将XML写入文件。在大型数据集上可能会更快、更高效。不过,请确保使用的是输出文件,而不是内存选项。然后,完成后,只需readfile(),即您创建的用于模拟"print$dom->saveXML()"的文件。