Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法在本地主机上模拟从spring到postgres数据库的往返时间?_Spring_Postgresql - Fatal编程技术网

有没有办法在本地主机上模拟从spring到postgres数据库的往返时间?

有没有办法在本地主机上模拟从spring到postgres数据库的往返时间?,spring,postgresql,Spring,Postgresql,我正在使用Spring和postgres数据库。有没有办法模拟(创建)spring和本地主机上运行的postgres数据库之间的往返时间?这样,我就可以创建一个类似于生产环境的环境,帮助我更早地发现潜在的性能问题。例如,我在localhost上的数据量与在prod上的数据量相同。一个新功能在localhost上运行良好(没有性能问题)。然后我发布了它,结果它的生产速度非常慢。原因是——正如我后来发现的那样——有很多SQL请求发生在后台。由于prod上从spring后端到数据库的往返时间远大于lo

我正在使用Spring和postgres数据库。有没有办法模拟(创建)spring和本地主机上运行的postgres数据库之间的往返时间?这样,我就可以创建一个类似于生产环境的环境,帮助我更早地发现潜在的性能问题。例如,我在localhost上的数据量与在prod上的数据量相同。一个新功能在localhost上运行良好(没有性能问题)。然后我发布了它,结果它的生产速度非常慢。原因是——正如我后来发现的那样——有很多SQL请求发生在后台。由于prod上从spring后端到数据库的往返时间远大于localhost上的往返时间,因此性能问题只发生在prod上。如果我在localhost上模拟了往返时间,我将能够在prod上发布之前看到该问题。

您可能希望在内核级别上模拟该问题。在Linux上:

sudo tc qdisc add dev lo root netem delay 50ms

这会在环回设备(localhost或127.0.0.1)上注入延迟。

是一个非常棒的免费开源工具,可以很容易地集成到基于Spring的应用程序中。它可以以极低的开销在漂亮的图表中为您提供大量的应用程序/主机统计数据。它可以捕获每个SQL、Spring服务、http请求等的时间和数量。您可以在开发环境中使用它来解决任何性能问题。你可以玩在线演示。我已经广泛使用了它,它非常有用。

您的策略应该是在开发过程中监视每个SQL查询,避免每个方法发出多个请求。我认为在本地主机上测试Postgres数据库毫无意义。您不应该允许N+1查询发生。显然,如果您的应用程序将部署在与Postgres相同的虚拟机数据中心中,那么延迟将降低。如果数据库很小,可以在笔记本电脑上工作,那么在本地主机上测试就没有多大用处了。如果它是一个数TB/百万美元的数据库,你应该用相同的硬件创建一个测试环境。但是我今天遇到了一个新问题,那就是插入多行。例如,如果我创建对象A,而对象A有一个子对象,它是对象B的列表。据我所知,不可能避免N个查询(如果N是列表的大小)来插入(创建)列表中的每个对象B。我唯一能做的就是使用批处理。这样我就不必为每个查询发送新的请求(避免不必要的往返时间)。但是,除非我在prod环境中再次测试它,否则我不确定它是否能按我所希望的那样工作。它应该减少发送到数据库的单独请求的数量。但是因为往返时间不是localhost的一个因素,所以我无法判断批处理是否按预期工作。