sujun/big-file 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

sujun/big-file

Composer 安装命令:

composer require sujun/big-file

包简介

bigFile,大文件处理。亿级文件分割、去重、排序

README 文档

README

Software license Latest development

先前公司有个需求就是对发送数据去重,因为每次发送过来的数据文件都比较大,加上公司权限太多,申请流程麻烦,因此用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 我们能提供哪些服务?
定制开发 / 二次开发

基于 sujun/big-file 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 13
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-08-05