How can i store my very complex objects without serializing them, or how can I make my unserialization faster?
如果您需要非stdClass的PHP对象(数据成员旁边有类定义),则需要使用任何与PHP兼容的序列化.
独立于PHP语言,序列化需要付出一定的代价,因为它是数据转换和映射.如果您有大量数据需要从字符串(二进制)信息中转换和转换为字符串(二进制)信息,则需要处理和存储数据.
默认情况下是PHP的内置序列化,可用于序列化和反序列化. PHP提供了两种默认的序列化类型.其他扩展提供类似的功能.相关问题:
正如您所说的那样,您需要某种序列化,而反序列化是瓶颈,您可以考虑选择另一个序列化器,例如igbinary.
但是,将PHP存储在平面文件中也可以.参见var_export:
// storing
file_put_contents(
'name-of-data.php', '<?php return ' . var_export($data, true) . ';'
);
本示例以PHP可以读回文件的格式存储数据.对于以stdClass对象和数组形式的结构化数据很有用.读回来很简单:
// reading
$data = include('name-of-data.php');
如果将PHP代码放入数据库中,则不需要// storing
$string = 'return ' . var_export($data, true) . ';';
$db->store($key, $string);
// reading
$string = $db->read($key);
$data = eval($string);
使用var_export的好处是您可以使用PHP本身来解析数据.通常,它比序列化/反序列化要快,但是对于您的情况,无论如何您都需要进行度量.
我建议您尝试使用var_export在文件大小和速度方面如何表现.并带有鼻烟壶.比较一下.收集问题时,请保留问题的最新信息,以便在无法解决问题时提供其他建议.
想到的另一件事是使用Json格式.一些数据存储为此进行了优化,因此您可以直接查询存储.此外,map-reduce方法可与许多这些数据存储一起使用,以便您可以分散处理数据.这是您无法直接使用序列化/反序列化的东西,因为它总是一次处理一大块数据,您不能不同.