在 asp.net mvc 应用程序中检索大量行(超过 1000 万)

Posted

技术标签:

【中文标题】在 asp.net mvc 应用程序中检索大量行(超过 1000 万)【英文标题】:Retrieving large number of rows (more than 10 mil) in asp.net mvc application 【发布时间】:2013-08-13 16:53:09 【问题描述】:

我正在开发 asp.net mvc 应用程序,它提供了使用 DATAREADER 从 ORACLE 数据库读取数据并将这些行呈现给用户的功能(有时高达 1000 万)。 datareader 读取操作在读取大约 900,000 行后抛出内存不足异常。

我正在和我的同事讨论这个问题,他建议我应该使用无连接范式(可能是实体框架)或存储过程并以块的形式引入数据。

我想知道是否有人可以权威地说出解决上述问题的最佳方法。

【问题讨论】:

您打算如何将数据呈现给用户?一次在页面上显示所有 1000 万条记录?对记录进行分页以便一次只能看到几百个? AJAX 在您滚动时动态获取更多记录? 一个词:不要 - 除非您必须进行统计分析或其他操作,否则不要检索数百万行。你将如何处理它?您的用户将如何与如此庞大的数据集进行交互?不可能找到好的解决方案。 获取尽可能多的数据,以尽可能多地使用/显示给用户等 - 获取 100、500、1000 行 - 仅此而已。 "mbeckish"/marc_s 我已经在分页,但在分页之前我正在检索 all 数据(当然,这种方法不适用于 1000 万条记录) - 我喜欢建议的方法通过 mbeckish 使用 AJAX 在用户滚动时动态获取更多记录。我不太确定我将如何实现这一点-您可以建议一个链接吗?谢谢 @user430017 研究术语“无限滚动”。 asp.net mvc 有很多选择。 感谢埃里克·金。我会做研究并回复你。 【参考方案1】:

不要将所有行检索到内存并执行分页

•并非所有用户都访问第二页

•因此您在内存中的数据将不会被使用

如果你有更多的记录使用 SQL 端分页,你可以使用 Row_number() 函数在 SQL 端进行分页。

您还可以使用 ORM 框架来访问数据,它们始终提供执行数据相关操作的最佳方法。

我更喜欢使用 Peta Poco,它有一种检索页面数据的方法。

var result=db.Page<article>(1, 20, // <-- page number and items per page
"SELECT * FROM articles WHERE category=@0 ORDER BY date_posted DESC", "coolstuff");

http://www.toptensoftware.com/petapoco/

【讨论】:

谢谢@CreativeManix - 我要试试 POCO。读起来很有趣。我会回复你的。 请原谅 - 我可能过于简单化了事情并且未能理解您的观点。您是否曾尝试在 ORACLE 中正确分页。我遇到了这个 ***.com/questions/241622/paging-with-oracle 我想知道我是否可以使用上述方法进行分页而不是通过 petaPeco。这样做的原因是1。我对ORM 2不太了解。它会更简单。你怎么看?谢谢 我遇到了这个 - ***.com/questions/18243213/…

以上是关于在 asp.net mvc 应用程序中检索大量行(超过 1000 万)的主要内容,如果未能解决你的问题,请参考以下文章

使用 OWIN 在 ASP.NET MVC 5 应用程序中存储和检索 facebook 访问令牌

从 ASP.net Core 2 MVC 应用程序中的 appSettings.json 存储/检索 ConnectionString

ASP.NET MVC 4 无法从表单中检索文件

ASP.Net MVC4排序检索分页的实现

ASP.NET MVC

传递需要的大量 Json 对象时如何改进 Asp.net Mvc 应用程序?