php有限内存处理大文件(从两个文件提取相同行)(代码片段)

SuperAvalon SuperAvalon     2022-10-24     315

关键词:

面试题:

有两个文件文件,大小都超过了1G,一行一条数据,每行数据不超过500字节,两文件中有一部分内容是完全相同的,请写代码找到相同的行,并写到新文件中。PHP最大允许内内为256M。

 

解题步骤

遇到此问题,首先先尝试从小范围解决,比如题目中,要求查找两个文件相同的行,那么我们可以先读取文件到内存中(数组),然后通过array_intersect()函数获取两个数组的交集,即为相同的行,此时,小范围的问题已经找到解决方法了。

再回到问题本身,两个文件都超过1G,PHP最大使用内存是256M(也有可能是128M,甚至10M,这不用担心),在此条件下,直接读取文件到内存,显然不可行,我们可以考虑使用split命令将其分割成若干个小文件,再运用上面的思路逐个对比小文件,得到的结果,再合并到结果集里面,然后再去重,即得到题目要求。

步骤一、通过php生成两个大容量数据文件

<?php

function build_file($max)


        $file1 = fopen("/tmp/file1.txt", "w");
        $file2 = fopen("/tmp/file2.txt", "w");
        for($i =0; $i < $max; $i++) 
                $text1 = md5(microtime() . rand(100, 999)) 

Ktor - 处理大文件操作而不会发生内存泄漏

】Ktor-处理大文件操作而不会发生内存泄漏【英文标题】:Ktor-Handlelargefileoperationswithoutmemoryleak【发布时间】:2021-03-1402:07:07【问题描述】:我对后端开发非常陌生。基本上,我想创建一个健壮且简单的应用程序,它将接受参数... 查看详情

您如何在内存非常有限的嵌入式系统上处理大数据传输?

】您如何在内存非常有限的嵌入式系统上处理大数据传输?【英文标题】:Howdoyouhandlelargedatatransfersonverymemoryconstrained,embeddedsystems?【发布时间】:2010-09-2611:05:07【问题描述】:我有一个微控制器,它必须从PC串行端口(115200波特... 查看详情

内存映射文件处理大文件

先说结论:使用内存映射文件来处理大文件可以提高效率。 为什么呢?我们先来看看如果不使用内存映射文件的处理流程是怎样的,首先我们得先读出磁盘文件的内容到内存中,然后修改,最后回写到磁盘上。第一步读磁盘... 查看详情

如何使用 php 从大文本文件中提取包含信息的值

】如何使用php从大文本文件中提取包含信息的值【英文标题】:HowcanIExtractvalueswithinformationfrombigtextfileusingphp【发布时间】:2021-04-0815:08:37【问题描述】:我正在尝试从文本文件中获取一些数据,这些数据在每行随机重复一次我... 查看详情

在内存有限的系统上写入大文件时如何避免 mapFailed() 错误

】在内存有限的系统上写入大文件时如何避免mapFailed()错误【英文标题】:HowdoIavoidmapFailed()errorwhenwritingtolargefileonsystemwithlimitedmemory【发布时间】:2016-11-1110:11:44【问题描述】:我刚刚在我的opensrc库代码中遇到一个错误,该代码... 查看详情

Java中的大数据处理

】Java中的大数据处理【英文标题】:BigDataProcessingInJava【发布时间】:2017-12-1812:09:59【问题描述】:我正在做一个项目,我收到大约10个文件,每个文件大小为200GB。我的项目要求是从每个文件中提取数据并与其他文件进行连接... 查看详情

删除大文件中的一行内容

...如果想要删除其中的某一行,常规的思路是先把文件读入内存,在内存中修改后再写入源文件。这对于小文件来说当然没问题,但是如果要处理一个很大的文本,比如GB级别的文本时,这种方法不仅需要占用很大内存,而且一次... 查看详情

如何在 ios 中处理大文件上传?

...等待文件上传。由于苹果不允许应用程序在后台运行超过有限的时间。如何确保我的文件已上传。我正在使用afnetworking来设置 查看详情

PHP - 从 CSS 文件中提取图像的所有路径的正则表达式

】PHP-从CSS文件中提取图像的所有路径的正则表达式【英文标题】:PHP-RegularexpressiontoextractallpathstotheimagesfromwithintheCSSfile【发布时间】:2012-06-2806:59:43【问题描述】:我正在尝试查找正则表达式,它将从css文件中提取所有路径。... 查看详情

从一个非常大的 MySQL 转储文件中以 csv 格式获取数据

...语句包含所有数据并且该行太长。因此,正常做法会导致内存问题,因为该行(即所有数 查看详情

从python内存中的MPEG(.ts)文件中提取音频,而不将MPEG写入文件

】从python内存中的MPEG(.ts)文件中提取音频,而不将MPEG写入文件【英文标题】:ExtractaudiofromaMPEG(.ts)fileinmemoryinpython,WithoutwritingMPEGtoafile【发布时间】:2020-02-2616:10:09【问题描述】:我正在做一个项目,该项目需要从.ts(MPEG-2传... 查看详情

局域网大文件分片上传处理

最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据、... 查看详情

linux两个大数据量的文件如何比较

ubuntu系统下,两个文本文件,每个都有两列,空格分隔,每个文件的行数都有70万以上,现要比较两个文件的第一列内容相同的;第一个文件有,而第二个没有的;第二个没有而第一个有的,使用awk'ARGIND=1a[$1]ARGIND>1$$!($1ina)p... 查看详情

从VBA中的PowerPoint文件中提取所有文本

...-只关心单词。我可以通过PPT中的^A^C和记事本中的^V手动处理文件;然后 查看详情

异常的内存分配php

】异常的内存分配php【英文标题】:unusualmemoryallocationphp【发布时间】:2013-08-1914:40:00【问题描述】:我正在尝试从许多html文件中提取数据文件。为了快速完成,我不使用DOM解析器,而是使用简单的strpos()。如果我从大约200000个... 查看详情

从(非索引/非顺序)大文件中提取新行的好方法[重复]

】从(非索引/非顺序)大文件中提取新行的好方法[重复]【英文标题】:Goodwaytopullnewlinesfrom(nonindexed/nonsequential)hugefile[duplicate]【发布时间】:2014-03-2121:49:08【问题描述】:我有一个csv大文件(>1GB)位于网络文件存储中,每周都... 查看详情

如何从 PHP 文件中提取 HTML?

】如何从PHP文件中提取HTML?【英文标题】:HowtoextractHTMLfromPHPfiles?【发布时间】:2012-01-2006:53:42【问题描述】:我有一堆PHP文件,我想从中提取最终的HTML结果。例如,如果PHP文件内容类似于:<ulid=\'<%echo($newsListId)%>\'>//P... 查看详情

PHP从文件夹中提取随机图像

】PHP从文件夹中提取随机图像【英文标题】:PHPpullrandomimagefromfolder【发布时间】:2012-05-0223:14:56【问题描述】:我想知道从文件夹中提取随机图像的“更好”方式。就像说,让php从文件夹中选择一个随机图像,而不是搜索并创... 查看详情