我有一个web api,允许用户实时和批量检索数据。然而问题是,我有一个拥有超过3000万条记录的数据,这会导致批量请求出现瓶颈。我在我的get方法中使用分页,每个api请求返回默认的10条记录,但由于数据的大量拉动,10条记录仍需要时间检索。
以下是我的get方法的示例:
public async Task<IHttpActionResult> Get(int pageno = 1, int pagesize = 10)
{
int skip = (pageno - 1) * pagesize;
int total = db.webapi_customer_charges.Count();
var cc = await db.webapi_customer_charges
.OrderBy(c => c.hospital_number)
.Skip(skip)
.Take(pagesize)
.ToListAsync();
return Ok(new Paging<webapi_customer_charges>(cc, pageno, pagesize, total));
}
在检索大量数据时,有没有办法或解决方法或最佳做法?谢谢。
答案 0 :(得分:1)
不确定如何使用EF来实现它,因为我假设它在你可以跳过或占用之前检索整个集合,但我认为如果你在Sql Server端调用存储过程并且只是传入最小和最大行数。这样,您只需在每次调用时从服务器获得所需的数据量。
以下是call a stored proc with EF的链接。如果您没有找到更好的解决方案,请尝试选择并使用Sql中的ROW_NUMBER()
根据您的输入参数进行过滤非常简单。