Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance Can';将业务逻辑移动到应用层';提高性能?_Performance_Architecture_Business Logic - Fatal编程技术网

Performance Can';将业务逻辑移动到应用层';提高性能?

Performance Can';将业务逻辑移动到应用层';提高性能?,performance,architecture,business-logic,Performance,Architecture,Business Logic,在我当前的项目中,业务逻辑是在存储过程中实现的(有1000多个存储过程),现在他们希望随着业务的增长来扩展它。架构师已经决定将业务逻辑移动到应用层(.net),以提高性能和可伸缩性。但他们没有重新设计/改写任何东西。简言之,从SP激发的SQL查询将使用ADO.net从.net函数激发。这如何产生任何性能 据我所知,当我们需要DB独立性或某些业务逻辑可以用OOP语言比RDBMS引擎更好地实现时,我们需要将业务逻辑移动到应用层(如遍历层次结构或某些图像处理等)。在其他情况下,如果没有复杂的业务逻辑需

在我当前的项目中,业务逻辑是在存储过程中实现的(有1000多个存储过程),现在他们希望随着业务的增长来扩展它。架构师已经决定将业务逻辑移动到应用层(.net),以提高性能和可伸缩性。但他们没有重新设计/改写任何东西。简言之,从SP激发的SQL查询将使用ADO.net从.net函数激发。这如何产生任何性能

据我所知,当我们需要DB独立性或某些业务逻辑可以用OOP语言比RDBMS引擎更好地实现时,我们需要将业务逻辑移动到应用层(如遍历层次结构或某些图像处理等)。在其他情况下,如果没有复杂的业务逻辑需要实现,我认为最好将业务逻辑保存在数据库本身,至少这样可以避免应用层和数据库之间的网络延迟


请让我知道你的看法。我是一个开发人员,有点犹豫地看着一些架构决策,原谅我在这个问题上的无知。

< P>这些建筑论据通常需要考虑许多交易,考虑到孤立的表现。如果只考虑性能的一个方面(如响应时间),则可能会忽略全局

显然,在数据库层中执行逻辑和将数据发送回应用层并在应用层中进行处理之间存在一些权衡。数据传送成本与处理成本。正如您所指出的,业务逻辑的成本和复杂性将是一个重要的因素,要发布的数据的大小将是另一个因素

可以想象,如果DB层变得繁忙,那么即使单个响应时间增加,将处理卸载到另一层也可以允许更大的总体吞吐量。然后我们可以扩展应用层以处理一些额外的负载。您现在会说性能有所提高(总体吞吐量更大)还是有所恶化(soem响应时间增加)


现在考虑应用层是否可以实现有趣的缓存策略。也许我们获得了一个非常大的性能胜利——对于某些请求,DB上根本没有负载 可以想象,如果DB层变得繁忙,那么即使单个响应时间增加,将处理卸载到另一层也可以允许更大的总体吞吐量。然后我们可以扩展应用层以处理一些额外的负载。您现在会说性能有所提高(总体吞吐量更大)还是有所恶化(soem响应时间增加)


现在考虑应用层是否可以实现有趣的缓存策略。也许我们获得了一个非常大的性能胜利——对于某些请求,DB上根本没有负载

如果您的业务逻辑仍在SQL语句中,那么数据库将完成与以前一样多的工作,您将无法获得更好的性能。(如果不能像使用存储过程时那样有效地缓存查询计划,则可能需要更多的工作)


为了获得更好的性能,您需要将一些工作转移到应用程序层,例如,您能否在应用程序服务器上缓存数据,并在不访问数据库的情况下执行查找或验证检查?

如果您的业务逻辑仍在SQL语句中,则数据库将执行与以前一样多的工作,你不会得到更好的表现。(如果不能像使用存储过程时那样有效地缓存查询计划,则可能需要更多的工作)


为了获得更好的性能,您需要将一些工作转移到应用程序层,例如,您是否可以在应用程序服务器上缓存数据,并在不影响数据库的情况下执行查找或验证检查?

我认为这些决策不应该使用体系结构教条进行论证。数据将更有意义

诸如“所有业务逻辑都属于存储过程”或“所有内容都应该位于中间层”之类的语句往往是由知识分别局限于数据库或对象的人员编写的。最好在判断时将两者结合起来,并根据测量结果进行判断

例如,如果您的一个过程正在处理大量数据并返回少量结果,那么有一个论点认为它应该保留在数据库中。在中间层将数百万行放入内存,对它们进行处理,然后用另一次往返更新数据库,这没有什么意义

另一个考虑因素是数据库是否在应用程序之间共享。如果是这样,逻辑应该留在数据库中,这样所有人都可以使用它

中间层往往来来往往,但数据永远存在

我自己也是个喜欢实物的人,但我会小心行事


这是一个复杂的问题。我不认为黑白声明在任何情况下都有效。

我认为这些决定不应该用架构教条来证明。数据将更有意义

诸如“所有业务逻辑都属于存储过程”或“所有内容都应该位于中间层”之类的语句往往是由知识分别局限于数据库或对象的人员编写的。最好在判断时将两者结合起来,并根据测量结果进行判断