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

本文涉及的产品
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
对象存储 OSS,内容安全 1000 次 1年
对象存储 OSS,标准 - 同城冗余存储 20GB 3个月
简介: 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等消息队列产品。

结语

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

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
相关文章
|
7月前
|
存储 人工智能 Kubernetes
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
阿里云对象存储OSS是一款海量、安全、低成本、高可靠的云存储服务,是用户在云上存储的高性价比选择…
|
4月前
|
存储 监控 调度
阿里云对象存储OSS之间进行数据转移教程
讲解如何在阿里云对象存储OSS之间进行跨账号、跨地域、以及同地域内的数据迁移,包括数据迁移之前的准备工作和实施数据迁移以及一些后续操作
|
4月前
|
存储 安全 数据管理
服务器违规资源被删,数据定时备份OSS 云存储才是 “救命稻草”
在数字化时代,数据已成为企业与个人的核心资产。然而,服务器违规、硬件故障等问题频发,导致数据丢失、业务中断,甚至造成不可挽回的损失。为保障数据安全与业务连续性,定时备份至关重要。阿里云国际站OSS提供高效、可靠的云存储解决方案,支持自动定时备份,帮助用户轻松应对数据风险。本文详解OSS备份操作步骤与注意事项,助你为数据穿上“防护甲”,实现安全无忧存储。
|
7月前
|
存储 人工智能 测试技术
AI 场景深度优化!K8s 集群 OSSFS 2.0 存储卷全面升级,高效访问 OSS 数据
OSSFS 2.0通过轻量化协议设计、协程化技术及FUSE3低级API重构,实现大文件顺序读写与小文件高并发加载的显著提升,在实际测试中表现出高达数十倍的吞吐量增长。适用于机器学习训练、推理等对高带宽低延迟要求严苛的场景,同时支持静态和动态挂载方式,方便用户在ACK集群中部署使用。
722 34
|
9月前
|
存储 Ubuntu 数据管理
使用s3cmd 2.x 与 Cyberduck 管理在 DigitalOcean Spaces 对象存储中的数据
通过 `s3cmd` 2.x 和 Cyberduck,你可以轻松管理 DigitalOcean Spaces 中的数据。`s3cmd` 提供了强大的命令行操作能力,适合脚本化和自动化任务,而 Cyberduck 提供了直观的图形界面,便于日常手动操作。掌握这两种工具的使用方法,将极大提高你的数据管理效率。希望本文能帮助你更好地使用 DigitalOcean Spaces。
194 7
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之同步数据到OSS时,文件的切分单位如何设置
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
253 1
|
机器学习/深度学习 人工智能 专有云
人工智能平台PAI使用问题之怎么将DLC的数据写入到另一个阿里云主账号的OSS中
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
存储 安全 大数据
对象存储的意义:探索数据新纪元的关键基石
在信息爆炸时代,数据成为核心资产,而高效安全的数据存储至关重要。对象存储作为一种新兴技术,起源于20世纪90年代,旨在解决传统文件系统的局限性。随着云计算和大数据技术的发展,它已成为关键技术之一。对象存储具备高可扩展性、高可靠性、低成本、易于管理和多协议支持等优点。它支撑大数据发展、推动云计算繁荣、助力企业数字化转型并保障数据安全。未来,对象存储将进一步提升性能,实现智能化管理,并与边缘计算融合,获得政策支持,成为数据新时代的关键基石。
471 3
|
DataWorks 安全 定位技术
DataWorks产品使用合集之如何同步OSS中的Parquet数据,并解析里面的数组成多个字段
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
数据采集 DataWorks 安全
DataWorks产品使用合集之将按日分区的表同步数据到OSS数据源,该如何配置
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
265 1

热门文章

最新文章