当我需要在数据库中存放一个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。