【问题标题】:Fastest serialize data format form PHP readingPHP 读取最快的序列化数据格式
【发布时间】:2009-05-15 01:13:51
【问题描述】:

我有一个 PHP 前端和一个 C++ 后端,我需要能够将名称组发送到前端。 PHP 读取哪种序列化格式最有效/最快?

示例数据

group1:
  name1 3923
  name2 9879
  name3 8944
group2:
  name5 9823
group3: 
  name9 9822
  name1 4894

PHP 读取速度最快的是什么?

  • XML
  • JSON
  • YAML
  • 协议缓冲区
  • 逗号/空格分隔我们自己的系统
  • 还有别的吗?其他?

【问题讨论】:

  • 对于几 kb 的数据,您选择的几乎任何格式都可能在 1 毫秒内解析 - 这不太可能成为主要瓶颈。

标签: php serialization


【解决方案1】:

PHP 自己的序列化格式可能是最快的。 unserialize() 是 PHP 用来将此数据转换回其自身类型的函数。 This post 有各种链接到其他语言的 PHP 序列化格式的实现,我相信你可以很容易地转换其中之一。

【讨论】:

  • 谢谢,这个好像是最简单的,不知道php自带的序列化这么简单。
【解决方案2】:

我在大型文本文件上使用过 PHP 的 serialize() 和 unserialize(),但它的表现很糟糕(那是几年前的事了 - 现在可能更好了)。无论如何,我设计了一个小技巧来克服这个问题,它只涉及从您直接导出到文本文件中的数据生成 PHP 数组声明,例如:

<?php
$groups = array('groups' => array( array('jeff' => 2343,
                                         'tom'  => 8477),
                                   array('baal' => 2873,
                                         'scorpio'  => 3210),
                                   array('jeff' => 2343,
                                         'tom'  => 8477)
                                 )
                            )
               );
?>

...然后通过简单地调用来反序列化它:

include 'groups.php';//makes $groups available

当时工作得很好。

【讨论】:

  • 这也是建议使用 eval() 的少数情况之一。 SOLR 的“php”返回类型返回一个类似格式的字符串,你应该 eval()
  • eval() 可以使用,并且可以完成这项工作,但是为什么建议在上述技术上使用它(不要争论:)?我使用上述方法处理大量非常大的文本文件。
【解决方案3】:

使用json_decode 会很容易实现 JSON。我不确定速度,但除非您计划在系统之间传输数兆字节的数据,否则使用哪个系统应该无关紧要。

【讨论】:

    【解决方案4】:

    正如 Paolo 指出的,您可以使用非常快的 json_decode。在 C++ 后端,这些是您的一些选项(直接取自 json.org 网站):

    C++:

    【讨论】:

      猜你喜欢
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-19
      • 1970-01-01
      • 2014-06-12
      • 2019-02-11
      相关资源
      最近更新 更多