繁体   English   中英

使用触发器(MySQL)以编程方式在代码(Java)或数据库中更新数据?

[英]Update data programmatically in code(Java) or in database using trigger (MySQL)?

编辑:我需要程序更快地执行计算,更新过程需要是实时的(计算100.000至200.000记录大约需要0-5秒),此过程将在多线程(大约2-8个线程)中进行


我将创建程序来更新数据库中的数据。 如果我确实在表中插入数据,将触发更新过程。 更新过程将在计算上花费很大。 这是我的更新过程的想法:

  1. 我将有3个表(A,B,C),每个表都有大约100.000-200.000条记录
  2. 我将有表D保存表A,B,C的记录数
  3. 我将有表E保存表A,B,C,D的计算,该计算包括乘法,除法和对数基数2
  4. 我将数据插入表A,B,C,然后必须更新表D和E中的数据
  5. 每次更新可重复此过程3-5次

哪个计算速度更快,以编程方式或使用触发器进行更新?

最好与TRIGGERS一起TRIGGERS ,并将这种复杂性保留在数据库方面。 这将帮助您保持代码干净。 如果要从其他文件执行INSERT ,则可能需要在所有这些文件中重写UPDATE逻辑。

而且,如果将来您需要更改插入后逻辑,那么您只需要更新触发器,而不是更新代码即可。

数据库服务器中的计算周期是一种稀缺资源。 您可以负担得起运行Java程序的服务器实例的数量,并且随着应用程序的扩展(例如,添加用户),您可以将计算密集型操作分配给多个服务器。

如果您在MySQL服务器上执行计算量大的工作,那么您将决定全部在中央计算机上完成这一切。

另外,以我的经验,与对触发器/存储过程代码执行相同的操作相比,对Java代码进行单元测试和维护更容易。

话虽这么说,MySQL的浮点数学运算(日志,乘法)利用服务器的数学指令集,并且效率相当高。

触发器将更快,因为它将最接近数据,并且您不必在数据库和程序层之间传输数据。 触发器的问题是每次插入都会被触发。 是您想要的还是仅在插入大量数据(即许多插入)后才进行计算的事情。

我将有3个表(A,B,C),每个表都有大约100.000-200.000条记录

这是一个很小的数据库。

I will have table D to save table A, B, C record count

您是否在特定日期时间保存每个记录的历史记录? 那是这样做的唯一原因。

I will have table E to save table A, B, C, D calculation, the calculation including multiplication, division and log base 2

简单的东西。

I will insert data to table A, B, C and after that data in table D and E must be updated

使所有这些成为单个工作单元是很重要的。 希望您能使他们成为交易。

在每次更新中,此过程都可以重复3-5次。使用编程方式或使用触发器进行更新,哪个更快?

我认为数据库-存储过程并首先触发。 特别是如果有很多更新。

数据A,B和C的三个来源是否独立? 如果我插入A,是否执行D和E的计算? 同样对于B和C? 如果三个人都在短时间内插入了记录,您是否可能会有大量流量?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM