首页 > 解决方案 > 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());

谢谢。

标签: phparrays

解决方案


您可以使用 Php fread函数。它允许读取固定大小的数据。它可以在循环内使用来读取大小的数据块。它不占用太多内存,适合读取大文件。

如果要对数据进行排序,则可能需要使用数据库。您可以使用 fread 一次从大文件中读取一行数据,然后将其插入数据库。


推荐阅读