【问题标题】:Processing huge data from sql server处理来自 sql server 的海量数据
【发布时间】:2019-05-19 15:39:19
【问题描述】:

我有一个存储过程 (SQL Server 2016),它当前根据该 SP 的参数返回 100K 到 200K 行。

每行的大小可以是 100KB 到 200KB。所以总大小可以在 10GB 到 20GB 左右。

我的客户端(后台作业)必须调用此 SP 并处理所有行并将其发送给另一个客户端。

处理此类情况的最佳方法是什么?

目前我正在考虑使用使用 yield 的流式枚举器。

每当'datareader.Read()'读取一行并处理它并将其发送给其他客户端时获取记录。

dataReader = command.ExecuteReader();                    
while (dataReader.Read())
{
    obj = new SomeClass();

    // prepare Someclass

    yield return obj;
}

这种方法足以处理如此大的数据吗?

有没有更好的方法呢? (如多线程等)

如果是这样,我应该如何处理它。有什么可以参考的吗?

编辑:SP 有多个连接并在一天内运行几次。

【问题讨论】:

  • 您是否在 SQL 存储过程中进行连接并从多个表返回数据?这个过程多久运行一次?
  • 如何更新您的 SP 以允许数据分页?
  • @Jonathan.Hickey SP 有多个连接并在一天内运行几次。在原始问题中添加了相同的内容。
  • @PSR SP 是否根据这些连接返回重复数据,解释类似于 StatusID、StatusName、StasusDiscription、LanguageId、LanguageCode、LanguageName 等?
  • 我的经验是尽可能减少返回的数据量......并在映射到对象的代码中查找。所以我回答这个问题的目的是尽可能减少 100kb - 200kb 的行大小。

标签: c# sql-server multithreading yield-return


【解决方案1】:

根据您的描述,我认为它代表了实现 SSIS(集成服务)的一个很好的方案,它可以管理并将最终结果写入 CSV 文件并允许客户进行交换。

【讨论】:

  • 这不是我的选择。
猜你喜欢
  • 2012-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-10
  • 2013-11-26
相关资源
最近更新 更多