【问题标题】:How to export large amount of data fast via Web API如何通过 Web API 快速导出大量数据
【发布时间】:2016-04-16 13:38:37
【问题描述】:

我在客户端使用 ASP.NET Web API 2 (.NET 4.6.1) 和 AngularJS。我的要求是以 CSV 或 Excel 格式导出表格数据。由于安全原因,我不能使用 bcp 或 sqlcmd。另外,不能使用 DTS 包,因为参数将来自 Web UI,我需要将其传递给存储过程以检索结果并通过 api 发送回文件。

目前,我正在尝试使用实体框架 6 将所有 500K 记录读取为 IEnumerable 类型。我的表有大约 50 万条记录,有 40 多列。我试图将其转换为 CSV,然后以纯文本形式返回并在浏览器中以 blob 形式打开。

问题:

  1. 有没有更好的方法可以在几秒钟内导出和返回数据。
  2. 如果 IEnumberable 到 CSV 是唯一的方法,那么我应该先将其写入文件并返回文件还是返回纯文本作为来自 web api 的响应。
  3. 我尝试了一些来自网络的代码来将 IEnumerable 转换为 CSV(使用 String.Join 和 StringBuilder 并且效率不高。感谢,如果有人可以分享如何快速将大数据转换为 CSV 或以其他方式导出数据.

【问题讨论】:

  • 500K 行数据没有什么会“非常快”

标签: c# csv export entity-framework-6


【解决方案1】:

我不认为它会运行得那么快,因为我们正在查看(大约)200MB 数据集,您首先从数据库中提取然后将其发送给客户端。您可以尝试使用 DotNetZip 库压缩 CSV,然后再发送到客户端...

【讨论】:

  • 无论如何我可以从 Web 服务器调用 db 服务器上的 bcp 并让 bcp 导出数据。?我被限制在sql server中使用xp_cmdshell?
  • 我不知道。过去,我使用了几种技术来更快地从数据库中获取数据……其中之一是并行运行多个查询。例如,如果您需要返回过去 8 天的数据,那么您可以每天运行 8 个查询。这个技巧可能有效也可能无效,具体取决于网络配置。
  • 我的问题不在于从数据库中检索数据。我的存储过程几乎不需要 60 秒即可返回数据。我的问题是转换为 csv 或 excel 并将其发送回客户端。
  • 您能否再描述一下这个问题?是不知道怎么做,还是生成CSV文件时间太长,或者传输到客户端太费时间?
  • 转换为逗号分隔值的时间过长。
猜你喜欢
  • 2019-11-25
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 2020-02-06
  • 2011-09-30
  • 2014-03-24
  • 2021-05-06
相关资源
最近更新 更多