【问题标题】:load XML doesnt like large xml file加载 XML 不喜欢大的 xml 文件
【发布时间】:2016-01-11 15:09:34
【问题描述】:

所以我有一些代码可以从第 3 方 URL 获取 XML 文件并将其存储在本地。

    function get_file($file, $local_path, $newfilename) { 
        echo "<br>Attempting message download for $file<br>"; 
        $out = fopen($local_path.$newfilename,"wb");
        if ($out == FALSE){ 
              print "File not opened<br>"; 
              exit; 
        } 

        $ch = curl_init(); 

        curl_setopt($ch, CURLOPT_FILE, $out); 
        curl_setopt($ch, CURLOPT_HEADER, 0); 
        curl_setopt($ch, CURLOPT_URL, $file); 

        curl_exec($ch); 
        echo "<br>Error is : ".curl_error ( $ch); 

        curl_close($ch); 

    }    
    get_file('URL FOR FILE', '../xml/', 'jobs.xml');

这很好用 - 我可以下载 XML 文件并在我的 xml 文件夹中查看它 - 大约 350mb。

然后我尝试像这样将它加载到我的数据库中:

$mysqli = new mysqli(CONNECTION DETAILS);

$sql = "LOAD XML LOCAL INFILE '../xml/jobs.xml' REPLACE INTO TABLE jobs ROWS IDENTIFIED BY '<job>'";

// check connection
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}

// Run the query
$mysqli->query($sql);

// Close the connection
$mysqli->close();

这部分不起作用... 问题是,它适用于较小的 XML 测试文件。

LOAD XML 是否应该能够处理 350mb 的 XML?如果是这样,为什么这段代码不起作用?

如果 350mb 太大,我该怎么做才能将 xml 数据放入我的数据库(在列等中)。 XML 文件有大约 130,000 个条目。

【问题讨论】:

  • 您收到的具体错误是什么?可能不是大小。您应该使用try/catch 来捕获异常。过去,我发现如果有空节点,LOAD XML 不起作用。此外,您必须遵守特定的MySQL XML structure,因此并非所有原始内容都可以工作。请张贴xml sn-p。
  • 您也可以尝试在命令行上执行此操作,这将减少命令,因此不易出错。例如。您使用 PHP,您可能会遇到 PHP 超时 - 与您想要执行的实际数据操作完全无关。

标签: php mysql xml


【解决方案1】:

我希望 mysql/mariadb 能够使用流式方法处理大数据(大于内存)。但我不希望它吃任何数据格式。

因此,您有可能必须先翻译 XML,或者您甚至可以编写自己的应用程序,使用流解析器读取文件,然后在您的数据库上运行适当的 SQL 语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-24
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多