我试图将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());
谢谢。
答案 0 :(得分:1)
您可以使用Php fread函数。它允许读取固定大小的数据。可以在循环内部使用它来读取大小较大的数据块。它不占用太多内存,适合读取大文件。
如果要对数据进行排序,则可能要使用数据库。您可以使用fread一次从大文件读取一行数据,然后将其插入数据库。