c# - 28,000 行在生产环境中返回非常缓慢
问题描述
我有一个非常简单的 get ,它从字面上抓取整个 DB 集并通过网络返回它。目前有问题的集合大约有 28k 行。
在本地测试时,对数据库的调用在不到一秒的时间内完成,但大摇大摆的调用大约需要一分钟。在我们的生产环境中完成调用大约需要 1-2 分钟(我们没有精确的 db 调用的计时代码,但我们在前端计时需要多长时间,也是 1-2分钟)。
数据调用和它到达前端之间的东西需要很长时间,我不确定如何解决它。
代码字面意思是:
[HttpGet]
public IActionResult GetAllCustomers()
{
return Ok(_context.Customers);
}
我还能做些什么来调试这个?
我们的工作解决方案将显着限制数据集,改为返回 < 1000 条记录,但业务偏好是拥有所有内容并让前端表对其进行排序和过滤。
灵机一动,我从模型中删除了所有相关的对象,并将其剥离到表格中的 10 列左右,但仍然花费了很长时间。
解决方案
您的问题与 ASP.NET 或微服务架构无关...
如果您在数据库表中有 28,000 条记录,并通过 HTTP 请求所有记录,那将会很慢。
请求是快速 localhost 的部分原因是所有 28,000 条记录都是在 localhost 发送的,而不是像生产中那样“通过网络”发送。在生产中,所有 28,000 条记录都必须通过 Internet 传输。请求可能是快速 localhost 的另一个原因是您的数据库也在运行 localhost,因此再次,数据不必“通过网络”传输。在生产环境中,即使数据库是内部的,数据可能仍有一段距离从数据库传输到 API,也是“通过网络”传输的,如果您的数据库也在运行 localhost,则不会发生这种情况。
您提到了要求:“但业务偏好是拥有所有内容并让前端表格对其进行排序和过滤。”
一开始您可能没有意识到,但这是 Web 应用程序中最常见的问题之一,并且总是通过分页或垂直滚动延迟加载网页和 Web 控件来解决。下载所有数据以便前端可以进行分页、排序和过滤不是解决问题的正确方法。
推荐阅读
- reactjs - input type="number" 不起作用,因为它允许我写字母
- javascript - 函数在控制台中工作时不返回任何嵌入 html 的内容
- html - 如何将好的阅读徽标插入 html 页面?
- rapidjson - 对象数组的 RapidJson 模式
- node.js - node_modules 开发依赖包
- c# - 无法通过将对象传递给 MediatR 查询
- python - Django外键多对一不起作用
- python - 如何从同一台机器上的另一个 docker 实例连接到 mySQL docker 实例
- javascript - useEffect 导致它调用该方法以获取帖子的次数太多。我只想在查询更改时获取帖子
- javascript - 使用 pandas 根据特定信息创建树