php - PHP 数组使用的内存比它应该使用的多得多
问题描述
我试图将一个 16MB 的文件加载到一个 php 数组中。它最终使用了大约 63MB 的内存。
将它加载到一个字符串中,只消耗 16MB,但问题是,我需要它在一个数组中,以便之后更快地访问它。
该文件包含大约 750k 行(路由表转储)。我应该将它加载到 MySQL 数据库中,在那里发布,没有足够的内存来运行那个东西,所以我确实选择了 rqlite:https ://github.com/rqlite/rqlite 。因为我还需要复制功能。
我不确定 SQLite 数据库是否足够快。
有人对这个问题有想法吗?您可以在此处获取实际文件:http: //data.caida.org/datasets/routing/routeviews-prefix2as/2018/07/routeviews-rv2-20180715-1400.pfx2as.gz
我使用的代码:
$data = file('routeviews-rv2-20180715-1400.pfx2as');
var_dump(memory_get_usage());
谢谢。
解决方案
您可以使用 Php fread函数。它允许读取固定大小的数据。它可以在循环内使用来读取大小的数据块。它不占用太多内存,适合读取大文件。
如果要对数据进行排序,则可能需要使用数据库。您可以使用 fread 一次从大文件中读取一行数据,然后将其插入数据库。
推荐阅读
- r - R中的数值求解器(近似十进制解)
- python - 如何使用熊猫每 15 分钟填充一次
- python-3.x - 在后台运行的 Python 自动化项目
- powershell - 如何在 powershell("user:mary@contoso.com:rwx,default:user:mary@contoso.com:rwx") 中参数化两个值的字符串
- r - 如何随时间绘制二进制数据(ggplot)
- standards - 我如何知道正在使用哪些 RFC?
- c - C GZIP 得到不正确的结果
- c# - “数据为 Null。无法对 Null 值调用此方法或属性。” 但我使用 DBNull.Value 来检查空值
- java - 如何在 JDA 中检查 Discord 频道是否有父频道
- python - 如何让 webdriver.Firefox() 打开最小化?