编辑:我需要程序更快地完成计算,更新过程需要是实时的(计算100.000到200.000记录大约0-5秒),这个过程将在多线程中进行(约2-8)螺纹)
我将创建将更新数据库中的数据的程序。如果我在表中插入数据,将触发更新过程。更新过程将耗费大量计算。这是我更新过程的想法:
哪一种计算速度更快,以编程方式或使用触发器进行更新?
答案 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同样如此?如果三个人都在很短的时间内插入了记录,你可能会有大量的流量吗?