一眼望天涯 发表于 2021-11-28 23:32:07

能否在后端增加类似触发器的功能?

经常有这样的需求:

用户在前端填写每天的销售情况表,完成后直接保存到每日销售表中。

填完表格了,系统需要对数据进行分门别类的统计计算,分别保存到每月销售表、季度销售表、年度销售表、部门统计表、备份表等多个数据表中。

我现在的做法是把这些处理放在前端,也就是更新了每日销售表后,再通过服务端命令、立即计算其他表格需要的数据、然后分门别类地保存起来。

但问题是,这么计算耗时很长,数据表大概10张左右,计算时间就已经要10几秒了,操作体验非常糟糕。


如果能有后台的触发器功能,就好办了:

用户正常操作前端网页,只需要保存数据到每日销售表,速度非常快,通常不超过0.5秒;

后台通过触发器,检测到某个条件或某个事件(比如某数据表更新、某页面发生了提交、执行了某命令等),立刻开启处理模式,将每月销售表、季度销售表、年度销售表、部门统计表、备份表等多个数据表需要的数据计算、填写完毕。由于是在后台执行,就不会占用前端网页的时间。哪怕后台处理需要花5分钟,也比用户在前端网页卡住30秒要好得多。用户体验立刻火箭般提升!

诚恳地希望开发人员考虑这一提议!

Howie.Sun 发表于 2021-11-29 14:59:22

您好,您说的应用场景定时任务能不能解决您的问题呢?

一眼望天涯 发表于 2021-11-29 15:22:23

Howie.Sun 发表于 2021-11-29 14:59
您好,您说的应用场景定时任务能不能解决您的问题呢?

也不是说不能,只是真不好用。

我希望增加触发器,是因为后续的工作是有一定触发条件的。比如填写每日销售表后,才触发生成每月、每季度、每年销售汇总表,而不是高频对每日销售表进行处理。

这种填写一天也就几次,甚至几天才1次。定时任务不适合这个场景

一眼望天涯 发表于 2021-11-29 15:25:50

其实可以直接参考数据库的触发器功能,比如before insert 是什么逻辑,after delete是什么逻辑等等。

如果能让开发者自己填写这样的逻辑,就能极大提升用户的使用体验。

10张表以下的微型系统可能不需要这种功能,毕竟保存数据用不了1秒;

但是10-100张表的中大型系统非常需要,因为放在前端操作非常占用时间,10秒都处理不完大量的关联数据,在网页上一直看着转圈圈,体验实在很糟糕呀。

{:4_86:}

一眼望天涯 发表于 2021-11-29 15:26:39

这种功能一定是放在后台执行的,跟页面上的其他命令没有任何关系。

Howie.Sun 发表于 2021-11-29 15:35:33

您好,如果您使用的是外联库的话,本身就可以使用触发器嘛,如果是内建库的话,我们在保存数据到每日销售表之后,可以通过服务端命令异步调用去做每月销售表、季度销售表、年度销售表、部门统计表、备份表等多个数据表的统计任务。

一眼望天涯 发表于 2021-11-29 15:56:42

Howie.Sun 发表于 2021-11-29 15:35
您好,如果您使用的是外联库的话,本身就可以使用触发器嘛,如果是内建库的话,我们在保存数据到每日销售表 ...

这种异步调用,如果放在前端,就是我刚才说的“点一下,卡住30秒才能保存”(因为涉及到执行顺序,不能全部异步);

如果放在后端就完美了,但是需要一个触发条件吧?总不能系统每分钟对数据库进行一次轮询吧?这样cpu和内存占用会很高,导致服务变得很卡

Howie.Sun 发表于 2021-11-29 17:39:04

一眼望天涯 发表于 2021-11-29 15:56
这种异步调用,如果放在前端,就是我刚才说的“点一下,卡住30秒才能保存”(因为涉及到执行顺序,不能全 ...

好的,您描述的场景我们也会共同来讨论怎么解决比较好,当然有了解决方案我们也会及时和您沟通的哈。

一眼望天涯 发表于 2021-11-29 18:23:00

Howie.Sun 发表于 2021-11-29 17:39
好的,您描述的场景我们也会共同来讨论怎么解决比较好,当然有了解决方案我们也会及时和您沟通的哈。

好的。目前我们公司这种需求处理起来非常费劲,都是放在前端,填完数据后要等15-30秒才能把所有的字段计算、保存完毕,因为涉及到十几张的数据表。

整体来看,真的需要即时保存的只有1张表,也就是每日销售表。其他的每月销售表、季度销售表、年度销售表、部门销售表、公司销售表等等,都通过服务端命令进行关联处理。

我也想通过sql server的存储过程来处理,但是还会涉及到数据的筛选、分类,感觉放在后端更合适一些。

lwt 发表于 2021-11-30 12:54:12

本帖最后由 lwt 于 2021-11-30 12:56 编辑

如果能把服务端命令能放在数据表增删改触发机制中确是好,这样页面参数传递就省了,数据表命令添加时更改数据时数据库是能接收到增加前,增加后。更改前,更改后,删除前,删除后的参数的。
页: [1] 2
查看完整版本: 能否在后端增加类似触发器的功能?