【问题标题】:Which is faster to parse? Serialized string or plain PHP or something else?哪个解析速度更快?序列化字符串或纯 PHP 或其他东西?
【发布时间】:2011-04-21 22:05:06
【问题描述】:

因此,出于性能原因,我需要我的应用以一种可以快速解析的方式存储大量数据。 我知道 JSON 是可读的,但解码速度并不快。所以我应该将我的数组转换为纯 php 代码,或者我必须对其进行序列化然后反序列化。那么,哪个更快?有没有更好的解决方案? 我可以自己做一个基准测试,但考虑其他人的经验总是更好:)

更多信息:我所说的大数组是指通过调用 print_r() 返回的大约 2MB 数据! 通过将其转换为纯 php 代码,我的意思是: 假设这是我的数组:{"index1":"value1","index2":"val'ue2"} 这将是假设函数 convert_array_to_php() 将返回的内容:

$array = array('index1'=>'value1' ,'index2'=>'val\'ue2');

【问题讨论】:

  • 为什么要将数据数组转换为“纯 php 代码”?我什至不确定这是否意味着......
  • 任何人的经验都会被您自己的恕我直言的基准所击败。
  • @Cg Alive:请定义“大”,这里可能很重要,因为这是一个权衡问题。
  • 对这种东西进行基准测试非常容易。编写您的序列化函数,并比较使用序列化、var_export 和 json_encode 的实现。
  • 并将您的结果发布给其他人,这样我们就可以利用您的经验而不是自己进行基准测试。

标签: php performance serialization


【解决方案1】:

取决于数据和使用模式。

一般unserialize()比json_decode()快,比include()快。但是对于大数据量,瓶颈实际上是磁盘。所以unserialize(gzdecode(file_get_contents())) 通常是最快的。与从磁盘读取相比,解码速度的差异可能可以忽略不计。

如果您真的不需要读出完整数据集进行打印或计算,那么最快的存储可能是 SQLite。它通常将索引保存在内存中。

【讨论】:

    【解决方案2】:

    好吧,我做了一个小基准测试,我将大约 7MB 的纯 php 编码数组放入一个 php 文件中,并将它的 json 版本放入另一个文件中,也是一个序列化版本。 然后对所有三个进行了基准测试,结果如下: 正如预期的那样,json 格式的解码速度最慢,解析时间比纯 php 代码长约 3 倍。 有趣的是,unserialize() 是最快的,执行速度比原生 php 代码快 4 倍左右。

    【讨论】:

      【解决方案3】:

      纯 php 代码可能必须是最快的。但是,它不太可能是最佳选择,因为它可能更难维护。不过,这取决于数据的性质。

      【讨论】:

      • 有趣而奇怪的是,我见过将 PHP 的 parse_ini_file() 放在上面的基准测试,包括纯 PHP 代码。我现在找不到参考资料
      • @Pekka:整洁!我想这是可能的,它比解析 PHP 更简单,尽管 PHP 预编译可能会影响...
      【解决方案4】:

      难道没有更好的选择,但仅依靠 PHP 来实现这一点?

      我猜想处理几个这种大小的数组会对你的服务器造成很大的影响。
      您是否有可能利用带有一些临时表的数据库来对数组中的数据做您需要做的事情?

      【讨论】:

      • 是的,我也担心这个。但是这件事的工作方式并没有让我有太多选择。我正在考虑结合使用 db 和序列化字符串来减轻负载。
      • 嗨 CG。发布一些您的数据示例,我们来看看?
      猜你喜欢
      • 1970-01-01
      • 2011-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      相关资源
      最近更新 更多