如何利用OSS实现大量数据导出

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: OSS数据导出

业务场景

在业务进行数据分析时,会经常碰到导出数据的场景,而对于数据量较大的导出,使用Excel的方式导出会比较消耗性能,而csv是纯文本文件,但可通过Excel等软件打开,OSS支持文本文件上传,这满足了我们导出数据的需求,所以我们可以使用OSS+csv的方式进行大数据量的文件导出。

准备内容

  1. 已开通OSS服务
  2. Mysql数据库
  3. 下载OSS的SDK

PS:本文使用 PHP+Mysql 进行操作,大家可根据需要换成自己熟悉的语言和数据库。

操作步骤

  • 分页从数据库获取数据
  • 将数据上传至OSS
  • 输出文件下载链接

示例代码:

use OSS\OssClient;
use OSS\Core\OssException;
/**
* 生成csv文件
*/
public function uploadCsvFile($content,&$position){
    $accessKeyId = "your_access_key_id";
    $accessKeySecret = "your_access_key_secret";
    $endpoint = "oss-cn-qingdao.aliyuncs.com";
    $bucket = "your_bucket_name";//请填入你的 OSS bucket 名称
    $object = "/your_file_path/order_data.csv";
    $object = $path.$fileName;
    $content = implode("\n", $content)."\n";
    if ($position == 0) {
        //防止乱码
        $content = "\xEF\xBB\xBF".$content;
    }
    try{
        $ossClient = new OssClient($accessKeyId,$accessKeySecret,$endpoint);
        $position = $ossClient->appendObject($bucket,$object,$content,$position);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    return $object;
}
public function exportData(){
  $pageIndex = 1;
  $pageSize = 100;
  $position = 0;
  do{
    //分页获取订单数据
    $list = getOrderList($pageIndex,$pageSize);
    if (empty($list)) {
      break;
    }
    $content = [];
    if ($pageIndex == 1) {
      $content[] = ["用户名","订单号","下单时间","订单金额"];
    }
    //将数据按照每行进行汇总
    foreach ($list as $item) {
      $content[] = implode(',',[$item->user_name,$item->order_ID,$item->create_time,$item->price]);
    }
    //上传至OSS
    $filePath = $this->uploadCsvFile($content,$position);
    $pageIndex++;
  }while (true);
}
exportData();


因为使用Excel打开 csv 在不同系统打开会经常出现乱码的情况,比如 mac 上打开不乱码,但是在 windows 中打开就会出现乱码。这是因为在文件头缺少了 bom 头识别编码,打开时会按照系统默认的编码进行读取这时候就会出现乱码。所以我们在上传文件的起始位置要先插入UTF-8 bom 头( EF BB BF ),这样即可解决乱码问题。

关于导出我们还可以根据实际的业务需求进行一些拓展,比如通过异步的方式来实现导出,在用户的操作界面提供导出记录用于查看每个导出的进度,主要流程如下:

1、导出记录的数据表主要结构

字段名

说明

id

主键

task_name

导出任务

task_status

任务状态:待导出、导出中、导出完成

user_id

用户ID

task_file

导出结果文件

create_time

创建时间

update_time

更新时间

export_condition

导出条件

2、导出流程

  • 用户请求导出时,生成导出任务数据:任务名、任务状态(待导出)、用户ID、导出条件、创建时间
  • 将生成的任务ID,作为消息内容发送到消息队列
  • 后台接收消息后,根据任务ID获取导出条件,同时更新导出记录状态为“导出中”
  • 根据导出条件分页查询,并将记录上传至OSS文件,将OSS的文件路径,记录到 task_file 字段中
  • 数据导出结束,更新任务状态为“导出完成”,通知用户导出结果


此处的消息队列可使用阿里云的MNS、RocketMQ等消息队列产品。

结语

本文中的示例代码大家可以按照实际的需要进行调整,对于大批量的数据导出功能,可使用异步处理+消息通知的方式处理,可以减轻一部分的性能压力。

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
相关文章
|
Java 对象存储
|
SQL 存储 Cloud Native
CDN转存离线日志到OSS,实现更长时间的日志存储
CDN转存离线日志到OSS,实现更长时间的日志存储
549 1
CDN转存离线日志到OSS,实现更长时间的日志存储
|
机器学习/深度学习 SQL 分布式计算
如何将模型更新到 OSS 实现离线更新|学习笔记
快速学习如何将模型更新到 OSS 实现离线更新。
195 0
如何将模型更新到 OSS 实现离线更新|学习笔记
|
存储 安全 Java
SpringBoot2.x系列教程24--SpringBoot实现文件上传到OSS阿里云存储
前言 在上一章节中,壹哥 给大家讲解了如何在SpringBoot实现单个文件和多个文件上传,但是那种方式现在挺多项目中都不再采用了,而是会把文件上传到云存储服务器中,比如阿里云、腾讯云、华为云等。所以今天 壹哥 利用阿里云的OSS存储,讲解如何把本地文件存储到云存储服务器中,本文会教给你如何购买配置阿里云OSS,并且教你如何实现文件上传到云空间,干货满满哦。 一. 阿里云OSS简介 1. 存储服务简介 我们进行项目开发,很多时候都需要进行文件、图片等的上传,对于很多项目来说,虽然有FastDFS等文件存储服务器技术,但其实我们完全没有必要搭建自己的图片等文件服务器。对一个小型非专业的应用来说,
1505 0
|
监控 关系型数据库 Serverless
基于Serverless+OSS分分钟实现图片秒变素描
在阿里云Serverless函数计算服务中部署普通图片转素描图函数服务,实现将批量上传到指定OSS桶内的图片自动转换为素描图并保存到另一个OSS桶内
基于Serverless+OSS分分钟实现图片秒变素描
|
SQL 机器学习/深度学习 存储
通过日志服务实现数据库MySQL入湖OSS实践
日志服务(SLS)是云原生观测分析平台,为Log/Metric/Trace等数据提供大规模、低成本、实时平台化服务。一站式提供数据采集、加工、分析、告警可视化与投递功能。阿里云提供了企业级的数据湖解决方案,存储层基于阿里云对象存储OSS构建。日志服务支持开箱即用的OSS投递入湖功能,实现数据的端到端的入湖。 本文主要介绍如何借助日志服务将关系型数据库MySQL数据入湖和实践,并介绍数据在入湖之前可以日志服务可以提供哪些开箱即用的功能。
405 0
通过日志服务实现数据库MySQL入湖OSS实践
|
弹性计算 对象存储 网络虚拟化
CEN+私网NAT实现跨地域访问OSS需求-CEN基础版
CEN+私网NAT实现跨地域访问OSS需求-CEN基础版
J3
|
存储 安全 API
快捷餐饮之店家后台OSS文件管理实现
快捷餐饮之店家后台OSS文件管理实现
J3
318 0
快捷餐饮之店家后台OSS文件管理实现
|
缓存 前端开发 Java
基于tus协议OSS实现断点续传
当我们说“可恢复文件上传”时,我们指的是上传可以随时中断,然后从失败开始的状态恢复的能力。这种中断可能是意外的(例如,连接中断或服务器崩溃),也可能是用户决定暂停上传时自愿的。在传统的上传实现中,在这种情况下您的进度会丢失,但是 tus 使您能够从这些中断中恢复并在上传停止的地方继续
|
Java 应用服务中间件 API
一小时学会使用springboot操作阿里云OSS实现文件上传,下载,删除(附源码)
一小时学会使用springboot操作阿里云OSS实现文件上传,下载,删除(附源码)
一小时学会使用springboot操作阿里云OSS实现文件上传,下载,删除(附源码)

热门文章

最新文章