php平均拆分大文件为N个小文件
用PHP程序拆分大文件为N个小文件
/*
假设有文件data.log , 内容如下,行数很多,假设有上亿条数据,文件大小大概在800M左右
92735290
80334472
49114074
87184448
56073913
49869384
41544494
32725219
88143005
41025390
...
50674133
88480834
73630065
84739990
28690490
82888793
32222595
76950683
62781066
69386596 需求是把这个文件平均拆分为N个小文件
0.log
92735290
80334472
49114074
...
87184448
56073913
49869384
41544494 1.log
32725219
88143005
41025390
...
50674133
88480834
73630065
84739990 2.log
28690490
82888793
32222595
...
76950683
62781066
69386596
*/ //废话不多说贴代码
set_time_limit(500);
$file = 'data.log'; //制造1000W的行数据
$handle = fopen($file , 'wb+');
for ($i=0;$i<10000000;$i++)
{
fwrite($handle , rand(10000000,99999999)."\n");
}
fclose($handle);
exit(); //拆分成小文件
$sub_file_count = 100; //要拆分的文件个数
$sub_file_len = ceil(filesize($file)/$sub_file_count); //每个子文件的大小
$handle = fopen($file, "rb"); //打开文件资源
rewind($handle); //文件位置指针设为文件流的开头
$last_n_len = 0;
for ($i=0;$i<$sub_file_count;$i++)
{
$content = fread($handle , $sub_file_len + $last_n_len);
$last_n = strrchr($content , "\n"); //从最后一个\n开始一直到末尾的字符串
$last_n_len = strlen($last_n); //从最后一个\n开始一直到末尾的字符串的长度
$trim_n_content = substr($content , 0 , strlen($content) - $last_n_len);
//写文件
fwrite(fopen($i.".log", "wb") , $trim_n_content);
fseek($handle , ftell($handle) - $last_n_len + 1);//设置文件指针
}
exit();
php平均拆分大文件为N个小文件的更多相关文章
- python3 读取大文件分解成若干小文件
有个数据实在太大了,有1.7G,打开慢,改文件也慢,我们将其分解成若干个中等文件 #!/usr/bin/env python3 # -*- coding: utf-8 -*- f = open(& ...
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
将一个大文件分成若干个小文件方法 例如将一个BLM.txt文件分成前缀为 BLM_ 的1000个小文件,后缀为系数形式,且后缀为4位数字形式 先利用 wc -l BLM.txt 读出 BL ...
- [大牛翻译系列]Hadoop(17)MapReduce 文件处理:小文件
5.1 小文件 大数据这个概念似乎意味着处理GB级乃至更大的文件.实际上大数据可以是大量的小文件.比如说,日志文件通常增长到MB级时就会存档.这一节中将介绍在HDFS中有效地处理小文件的技术. 技术2 ...
- 海量小文件存储与Ceph实践
海量小文件存储(简称LOSF,lots of small files)出现后,就一直是业界的难题,众多博文(如[1])对此问题进行了阐述与分析,许多互联网公司也针对自己的具体场景研发了自己的存储方案( ...
- Hive如何处理小文件问题?
一.小文件是如何产生的 1.动态分区插入数据,产生大量的小文件,从而导致map数量剧增. 2.reduce数量越多,小文件也越多(reduce的个数和输出文件是对应的). 3.数据源本身就包含大量的小 ...
- Hadoop小文件存储方案
原文地址:https://www.cnblogs.com/ballwql/p/8944025.html HDFS总体架构 在介绍文件存储方案之前,我觉得有必要先介绍下关于HDFS存储架构方面的一些知识 ...
- 如何利用Hadoop存储小文件
**************************************************************************************************** ...
- <Hadoop><SequenceFile><Hadoop小文件>
Origin 我们首先理解一下SequenceFile试图解决什么问题,然后看SeqFile怎么解决这些问题. In HDFS 序列文件是解决Hadoop小文件问题的一个方法: 小文件是显著小于HDF ...
- LOSF海量小文件问题解决思路及开源库
"+++++++++++++++ LOSF 海量小文件存储和优化方案 +++++++++++++++++++++++++++++++++++++++++++++"一.问题产生原因以 ...
随机推荐
- css学习笔记二
下面来总结一下盒子模型,流式布局,浮动布局,层布局(定位布局). 1.盒子模型 有二种:IE盒子模型 和 标准w3c盒子模型 1)IE的盒子模型的content包含了padding和border 2) ...
- Android开发实例之闹钟提醒
本实例通过TimePickerDialog时间选择对话框让用户设置闹钟.并通过AlarmManager全局定时器在指定的时间启动闹钟Activity . 程序执行效果图: 实例代码: package ...
- TIMESTEN安装配置指南-中文版
TimesTen内存数据库 第一章 Cache Connect to Oracle概念 TimesTen数据交换技术提供在Oracle数据库和TimesTen数据管理器之间进行连接和双向数据传送.数据 ...
- C++数据类型简析
C++语言的基本数据类型有如下四种: 整型,说明符为int: 字符型,说明符为char: 浮点型(又称实型),说明符为float(单精度),double(双精度): 空值型,说明符为void,用于函数 ...
- 表A中有两个表示时间的字段A,B;如果B的值大于A的值,则把B的值更新为A的值
sql语句:表A中有两个表示时间的字段A,B:如果B的值大于A的值,则把B的值更新为A的值 update 表名 set B=A where B>A
- 想买一套arduino玩玩
对于物联网,去年才接触,认识但不熟悉.做过一个项目,买了一块树莓派,看了一段网络电视. 最近被邀分享一些关于物联网的东西,翻了些大学公开课,很系统但太偏理论和框架.听了一个TED感觉很不错,但太精简. ...
- oracle sql developer 使用技巧
1.配置自动提示快捷键: 选中completion insight 然后选中新建快捷方式,然后按alt+/,再选中分配即可:
- 5G关键技术研究方向
对于还没体验4G移动通信魅力的国内的移动通信用户而言,5G也许还是镜中花,雾中月:但对于科研界而言,5G研究已经启程,三星电子5月份宣布,率先开发出了首个基于5G核心技术的移动传输网络,实现每秒1Gb ...
- javascript小练习—记住密码提示框
px/px solid redpxpx]; var oTips = document.getElementById("tips"); oP.onmousemove = functi ...
- JavaScript之转义字符
<html lang="en"> <head> <meta charset="UTF-8"> <meta na ...