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

时间:2014-02-28 13:08:33

标签: java mysql sql

编辑:我需要程序更快地完成计算,更新过程需要是实时的(计算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次
  6. 哪一种计算速度更快,以编程方式或使用触发器进行更新?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

数据库服务器中的计算周期是稀缺资源。您可以使用尽可能多的运行Java程序的服务器实例,并且随着应用程序的扩展(例如,添加用户),您可以将计算密集型操作分发到多个服务器。

如果您在MySQL服务器上执行计算成本高昂的东西,那么您决定在中央计算机上执行所有操作。

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

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

答案 2 :(得分:0)

触发器将更快,因为它最接近数据工作,您不必在数据库和程序层之间传输数据。触发器的问题是它将针对每个插入触发。这是你想要的东西,或者你喜欢只在插入大量数据(即许多插入物)后才进行计算。

答案 3 :(得分:0)

  

我将有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同样如此?如果三个人都在很短的时间内插入了记录,你可能会有大量的流量吗?