对于无限运行的查询,哪个Java程序或存储过程更好

对于无限运行的查询,哪个Java程序或存储过程更好,java,mysql,performance,stored-procedures,infinite,Java,Mysql,Performance,Stored Procedures,Infinite,在MySQL环境中,有一个专用的MySQL服务器和一个专用的应用服务器,哪个更好- a。在连接到数据库服务器的应用服务器上运行无限java代码,根据连接获取一些记录,然后将它们插入数据库 -或- b。在数据库上运行无限存储过程,该过程基于联接执行插入(选择) 需要回答执行时间、数据库负载、内存需求以及数据库继续处理其他插入/更新的能力方面的问题我不确定执行时间、数据库负载和内存需求,但根据我的经验,最好在业务层(而不是数据库)中完成所有逻辑工作。此外,存储过程的可伸缩性较差,在大型项目中更难维护

在MySQL环境中,有一个专用的MySQL服务器和一个专用的应用服务器,哪个更好-

a。在连接到数据库服务器的应用服务器上运行无限java代码,根据连接获取一些记录,然后将它们插入数据库

-或-

b。在数据库上运行无限存储过程,该过程基于联接执行插入(选择)


需要回答执行时间、数据库负载、内存需求以及数据库继续处理其他插入/更新的能力方面的问题

我不确定执行时间、数据库负载和内存需求,但根据我的经验,最好在业务层(而不是数据库)中完成所有逻辑工作。此外,存储过程的可伸缩性较差,在大型项目中更难维护。因此,我的选择是A。

我不确定执行时间、数据库负载和内存需求,但根据我的经验,最好在业务层(而不是数据库)中完成所有逻辑工作。此外,存储过程的可伸缩性较差,在大型项目中更难维护。所以我的选择是A。

我不确定是否有“无限运行查询”这样的东西。也许您指的是反复运行的查询

总之,一般来说,如果您可以避免在数据库和应用程序之间来回传输大量数据的开销,那么您将获得更好的吞吐量。另一方面,如果您试图做的“事情”是计算密集型的(而不是数据密集型的),那么在应用程序中进行计算(在与DB不同的机器上运行)将减少DB负载

需要回答执行时间、数据库负载、内存需求以及数据库继续处理其他插入/更新的能力

在一般情况下,不可能量化这些东西,但有明显的权衡:

  • 避免传输大量数据可以减少网络负载和CPU负载(在数据库驱动程序中)
  • 但是在数据库上执行“所有”操作会增加数据库的负载

它在实践中的效果将主要取决于实际用例的细节。

我不确定是否存在“无限运行的查询”。也许您指的是反复运行的查询

总之,一般来说,如果您可以避免在数据库和应用程序之间来回传输大量数据的开销,那么您将获得更好的吞吐量。另一方面,如果您试图做的“事情”是计算密集型的(而不是数据密集型的),那么在应用程序中进行计算(在与DB不同的机器上运行)将减少DB负载

需要回答执行时间、数据库负载、内存需求以及数据库继续处理其他插入/更新的能力

在一般情况下,不可能量化这些东西,但有明显的权衡:

  • 避免传输大量数据可以减少网络负载和CPU负载(在数据库驱动程序中)
  • 但是在数据库上执行“所有”操作会增加数据库的负载

它在实践中的效果将主要取决于实际用例的细节。

缺少一些信息,但我猜测:

很明显,这些行并不是以无限的速度出现的

你很可能是在投票。也就是说,在周期之间进行某种
sleep()

如果您没有,那么您应该知道在任何一种情况下都可能会在数据库服务器上施加高负载

因此,假设会有某种睡眠(为了简单起见,假设1秒),结果表明Java代码和存储的例程代码之间没有太大区别。为什么呢

  • 不管怎样,睡眠都是空闲的。在睡眠时间内不会持有任何锁
  • 在Java代码中发出的任何查询都必须从例程代码发出,反之亦然
  • 您的代码没有太多(或根本没有)计算复杂性。您很可能正在从目标表中检查一些
    MAX(id)
    ,然后
    插入到。。。选择从…起其中id>max\u id\u作为刚刚计算的
    ,或类似的内容
执行时间实际上可能有利于例程代码,因为您不需要在MySQL和Java之间来回发送结果集。此外,您只需将
插入到。。。在一个查询中选择FROM
,而不是将结果集转换为java对象/原语,然后准备新的
INSERT
查询,转换回MySQL数据

在DB负载方面,我看不出有什么真正的区别,同样,由于网络交付时间(锁可能仍然保持的时间)的原因,在例程方面也有轻微的改进

注意事项:

您将如何从Java调用此过程?它将无限期地运行。那么,你愿意为它写一条线吗

假设它崩溃了(某种错误)——需要能够重新执行它(不是什么大问题,只是需要考虑的问题)

您可以通过执行它,这将解决上述许多问题:与其通过例程循环,不如让调度器每隔X秒调用一次。然后再考虑锁。< /P>
我自己的偏好:我可能会使用Java代码,或者如果我愿意将此逻辑添加到RDBMS中,我会使用事件调度器。

缺少一些信息,但我猜测:

很明显,这些行并不是以无限的速度出现的

你很可能是在投票。也就是说,在周期之间进行某种
sleep()

如果您没有,那么您应该知道在任何一种情况下都可能会在数据库服务器上施加高负载