sujun/big-file
Composer 安装命令:
composer require sujun/big-file
包简介
bigFile,大文件处理。亿级文件分割、去重、排序
README 文档
README
先前公司有个需求就是对发送数据去重,因为每次发送过来的数据文件都比较大,加上公司权限太多,申请流程麻烦,因此用PHP来实现这个需求。给过来的数据文件都是几百到千W这样(1核512M内存处理1kW手机账号分割并去重大概5分钟),跑的没问题,其实私下测试亿级别也没问题,慢点而已~︶~。工具实现了csv文件的处理,如果你需要处理其它文件格式的话只要实现"File/FileAbstract"接口就可以了。
bigFile是什么?
bigFile是一个PHP写的文件处理工具类。
安装
通过composer,这是推荐的方式,可以使用composer.json 声明依赖,或者直接运行下面的命令。
composer require "sujun/big-file:v1.0.0"
放入composer.json文件中
"require": { "sujun/big-file": "v1.0.0" }
然后运行
composer update
去重: 原理是根据需要去重的字段分割大文件。
use BigFile\ClearRepeating;
try {
$param=[
'filePath'=>'./123456.csv', //处理文件
'savePath'=>'./data/', //保存路径
'saveFileName'=>'test.csv', //保存文件名,可不写
'isProcess'=>false, //设置是否采用多进程方式处理
'processNum'=>4, //开启进程数(需要isProcess设置为true时有效)
'isRemoveFirst'=>true, //剔除首行,有些文件第一行是说明
'column'=>0, //需要去重的字段,数字。0表示第一列
'isHash'=>true,
'hashFunc'=>function ($param, $mod) { //去重hash函数,param变量表示文件的每一行。(根据你业务来定义)
return fmod(crc32($param[0]), $mod);//$param[0]来写,一般对应column参数使用
}
];
$obj = new ClearRepeating($param);
$obj->execute();//执行任务
} catch (\Exception $e) {
echo $e->getMessage();
exit;
}
分割:
use BigFile\Spliting;
try {
$param = [
'filePath' => './123456.csv', //处理文件
'savePath' => './data/', //保存路径
'saveFileName' => 'test.csv', //保存文件名,可不写
'isProcess' => false, //设置是否采用多进程方式处理
'processNum' => 4, //开启进程数(需要isProcess设置为true时有效)
'maxLine' => 100000, //分割后每个文件保存行数
'isRemoveFirst' => true, //剔除首行,有些文件第一行是说明
'column' => 0, //需要把指定字段分到同一文件时指定这个参数并设置hashFunc。
'isHash' => false,
'hashFunc' => function ($param, $mod) { //分割hash函数,param变量表示文件的每一行,(根据你业务来定义)
return fmod($param[0], $mod); //$param[0]来写,一般对应column参数使用
},
];
$obj = new Spliting($param);
$obj->execute(); //执行任务
} catch (\Exception $e) {
echo $e->getMessage();
exit;
}
排序: 目前使用归并算法,使用方式需要自定排序。跟PHP的自定义usort函数类似
use BigFile\Sorting;
try {
$param=[
'filePath'=>'./123456.csv', //处理文件
'savePath'=>'./data/', //保存路径
'saveFileName'=>'test.csv', //保存文件名,可不写
'isProcess'=>false, //设置是否采用多进程方式处理
'processNum'=>4, //开启进程数(需要isProcess设置为true时有效)
'maxLine'=>100000, //分割后每个文件保存行数
'isRemoveFirst'=>true, //剔除首行,有些文件第一行是说明
'column'=>0, //需要把指定字段分到同一文件时指定这个参数并设置hashFunc。
'isHash'=>false,
'hashFunc'=>function ($param, $mod) { //分割hash函数,param变量表示文件的每一行,(根据你业务来定义)
return fmod($param[0], $mod);//$param[0]来写,一般对应column参数使用
},
'sortFunc'=>function ($a, $b) {
if($a[1] == $b[1]) {
return 0;
}
return ($a[1] < $b[1]) ? -1 : 1;
}
];
$obj = new Sorting($param);
$obj->execute();//执行任务
} catch (\Exception $e) {
echo $e->getMessage();
exit;
}
sujun/big-file 适用场景与选型建议
sujun/big-file 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 13 次下载、GitHub Stars 达 2, 最近一次更新时间为 2017 年 08 月 05 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「大文件」 「排序」 「去重」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 sujun/big-file 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 sujun/big-file 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 sujun/big-file 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Upload large files for Laravel 上传 大文件 laravel包
erikwang2013/aetherupload-webman is a aetherupload plugin that is compatible with webman. Mainly suitable for distributed deployment, used to adapt to webman, with simple and fast installation.
Webman plugin peinhu/aetherupload-webman
Upload large files for laravel, Laravel 大文件上传包
Upload large files for Laravel 上传 大文件 laravel包
Upload large files for Laravel 上传 大文件 laravel包
统计信息
- 总下载量: 13
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 2
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2017-08-05