代码之家  ›  专栏  ›  技术社区  ›  Marshall Tigerus

生产环境中返回28000行的速度非常慢

  •  -1
  • Marshall Tigerus  · 技术社区  · 6 年前

    我有一个非常简单的get,它从字面上抓取整个DB集并通过线路返回它。目前讨论的这一组大约有2万8千行。

    在本地测试时,对数据库的调用在不到一秒钟的时间内完成,但swagger调用大约需要一分钟。在我们的生产环境中,完成调用大约需要1-2分钟(我们没有精确db调用的计时代码,但是我们在前端计时它需要多长时间,而且也需要1-2分钟)。

    数据调用和它到达前端之间的某些事情需要很长时间,我不确定具体如何解决它。

    [HttpGet]
    public IActionResult GetAllCustomers()
    {
        return Ok(_context.Customers);
    }
    

    我还能做些什么来调试这个?

    我们的工作解决方案将是大幅降低数据集,返回<1000条记录,但业务首选项是拥有所有内容,并让前端表对其进行排序和过滤。

    1 回复  |  直到 6 年前
        1
  •  6
  •   Brian Ogden    6 年前

    你的问题与ASP.NET或微服务架构无关。。。

    如果您在一个数据库表中有28000条记录,并且通过HTTP请求所有记录,那么速度会很慢。

    请求是fast localhost的部分原因是所有28000条记录都是在localhost上发送的,而不是像生产中那样“通过线路”。在制作过程中,所有28000张唱片都必须通过互联网传播。请求可能是快速localhost的另一个原因是您的数据库也在运行localhost,因此数据不必“在线”传输。在生产环境中,即使数据库是内部的,数据从数据库到API可能还有一段距离,也可能是“在线传输”,如果数据库也运行localhost,就不会发生这种情况。

    解决方案是在API和前端实现分页: enter image description here

    您提到了这个要求:“但是业务首选项是拥有所有内容,并让前端表对其进行排序和过滤。”

    排序和筛选也与分页一起完成: enter image description here

    一开始您可能还没有意识到这一点,但这是web应用程序最常见的问题之一,通常通过分页或垂直滚动延迟加载web页面和web控件来解决。下载所有的数据以便前端可以进行分页、排序和过滤不是解决问题的正确方法。