保存PHP中的Array,是用JSON, serialize还是var_export?

By | 2015/10/09

当我需要在数据库中存放一个array数据的时候,很明显,序列化成一个字符串是正常的做法,但是在PHP序列化有好几个方法,是json_encode,还是serialize,还是var_export呢?唯有试试咯~

准备好的array数据有20kB、 300kB、 4.5MB三组,重复序列、反序列化100次,还要看看最终形成的字符串的大小。另外var_export最终需要输出到文件然后include得到数据,理论上来说,并不适合存放在数据库,不过作为一种方法,也测试了一下。

CPU好像是2.53GHz,这个无所谓,因为主要看相对的结果。

最终结果如下

原始大小
  方法       : 用时      |  最终大小
----------------------------------
20KB:                   |
  json_encode: 0.022s   |  20132
  serialize:   0.015s   |  31235
  var_export:  0.071s   |  35673
300KB:                  |
  json_encode: 0.215s   |  317258
  serialize:   0.156s   |  450305
  var_export:  0.513s   |  580151
4.5MB:                  |
  json_encode: 4.364s   |  5079230 
  serialize:   3.343s   |  7183747
  var_export:  9.222s   |  11649422

从上面的结果可以看出来,json的方法,总能获得尺寸最小的序列化字符串,而serialize的用时总是最小。好像负责搞笑的var_export的话,大家就忘了它吧……

事实上,当你在意空间而不在意时间的时候,请使用json的方法来做,否则请使用serialize,如果是配置文件的话,var_export不失为一种明智的选择。

最后告诉你,我实在是太在意空间了,以至于我不仅使用了json来保存array序列,甚至还使用了gzcompress来压缩存储,这样才可以在MySQL的Blob字段默认64k空间中完成存储,在硬件如此便宜的现在,这么拮据真的好可怜啊:P。

2 thoughts on “保存PHP中的Array,是用JSON, serialize还是var_export?

  1. tt

    还没看你这文章就想去分享。你到底给不给连接啊。
    第一是有用,
    第二是很赞,
    谢谢楼主

    Reply

发表评论

您的电子邮箱地址不会被公开。