用PHP管理大量数据的最快方法? (每个客户端请求的数据总计总计不超过100mb)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用PHP管理大量数据的最快方法? (每个客户端请求的数据总计总计不超过100mb),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2355字,纯文字阅读大概需要4分钟。
内容图文
![用PHP管理大量数据的最快方法? (每个客户端请求的数据总计总计不超过100mb)](/upload/InfoBanner/zyjiaocheng/676/f84f66926dc742f4b3d550c861ec6c34.jpg)
情况:
>我有多个包含多个复杂对象的数组,每个对象存储不同的数据,但格式相同.
>现在,这些数组(包含对象)太复杂而无法存储在sql表中,因此我将它们序列化,并将每个数组存储在单独的文件中.
>我使用PHP函数file_get_contents()读取数据,然后对数据使用unserialize().
>我必须为每个客户端请求加载一个文件(最大100mb),并对其进行“ unserialize()”处理.
>每个客户的数据都不相同
>所有数据总计约为3GB.
>该数据每24小时更新一次,并且数据大小每次更新都会增加.
>每个文件的最大数据量为100mb.
问题:
>我目前使用的方法适用于较小的文件大小(最大5mb).
>但是,当涉及到较大的文件时,会花费太多时间.
>如果我尝试加载大小约为40mb的文件,则unserialize()函数将花费大约33秒的时间执行.
>因此,当前方法的主要问题在于unserialize().
主要问题:
>如何存储非常复杂的对象而无需序列化它们,或者如何使我的非序列化速度更快?
解决方法:
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提供了两种默认的序列化类型.其他扩展提供类似的功能.相关问题:
> What is the php_binary serialization handler?
正如您所说的那样,您需要某种序列化,而反序列化是瓶颈,您可以考虑选择另一个序列化器,例如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代码放入数据库中,则不需要<?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方法可与许多这些数据存储一起使用,以便您可以分散处理数据.这是您无法直接使用序列化/反序列化的东西,因为它总是一次处理一大块数据,您不能不同.
内容总结
以上是互联网集市为您收集整理的用PHP管理大量数据的最快方法? (每个客户端请求的数据总计总计不超过100mb)全部内容,希望文章能够帮你解决用PHP管理大量数据的最快方法? (每个客户端请求的数据总计总计不超过100mb)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。