在 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