*快速*序列化/反序列化?

我有一个PHP脚本,通过一个相当大的CSV文件(5MB +)构建二叉搜索树。 这很好,但是大约需要3秒来读取/解析/索引文件。

现在我想我可以使用serialize()unserialize()来加快进程。 在此期间,如果CSV文件没有改变,则再次解析它没有意义。

令我惊恐的是,我发现在我的索引对象上调用serialize()需要5秒钟,并产生一个巨大的(19MB)文本文件,而unserialize()需要27秒才能读取它。 改进看起来有点不同。 ;-)

所以 - 是否有更快的机制在PHP中将大型对象图存储到/从磁盘恢复?

(为了澄清:我正在寻找的东西比上述3秒做的反序列化工作要少得多。)


看来你的问题的答案是否定的。

即使您发现“二进制序列化格式”选项,最有可能甚至会减慢您的设想。

所以,你可能需要研究的(如其他人所提到的)是一个数据库,memcached或在线Web服务。

我想添加以下想法:

  • 缓存请求/响应
  • 您的PHP脚本不会关闭,但会成为网络服务器来回答查询
  • 或者,我敢说,改变你当前使用的查询的数据结构和方法

  • var_export应该快很多,因为PHP根本不需要处理字符串:

    // export the process CSV to export.php
    $php_array = read_parse_and_index_csv($csv); // takes 3 seconds
    $export = var_export($php_array, true);
    file_put_contents('export.php', '<?php $php_array = ' . $export . '; ?>');
    

    然后在需要时包含export.php:

    include 'export.php';
    

    根据您的Web服务器设置,您可能必须chmod export.php才能使其可执行。


    尝试igbinary ...为我做了奇迹:

    http://pecl.php.net/package/igbinary

    链接地址: http://www.djcxy.com/p/57665.html

    上一篇: *fast* serialize/unserialize?

    下一篇: How do I use an exisiting function pass from my LLVM