首页 新闻 会员 周边

应该把基础运算交给数据库还是后端程序?

0
[已解决问题] 解决于 2022-07-14 11:44

最基础简单的字段间相加减乘除,再用新字段分组求和求平均。
比如SELECT AVG(365/(fieldA/fieldB)) FROM table WHERE fieldA='x' GROUP BY year;
假设where出来1000千数据,有人说会大量增加数据库压力,貌似将fieldA和fieldB全部传到后端,再计算再分组再求平均要消耗不少网络、内存和计算性能。
有没大佬解惑下。

不识少年愁的主页 不识少年愁 | 初学一级 | 园豆:62
提问于:2022-06-09 17:16
< >
分享
最佳答案
0

个人建议放在你的程序中进行计算。
理由是:
1.增加了数据库的负担,会让数据库返回的时间边长,导致你持有连接的时间边长,如果你处于事务中,还会导致你持有锁的时间变长等等。
2.程序和数据库基本都是内网传输,带宽都是相当大的,基本上不用考虑网络方面的问题。
3.至于你说的程序消耗,如果是业务处理,这本来就是它的本职工作,你如果觉得获取的数据太多导致数据库压力大,你可以考虑修改下数据结构,冗余字段或者存储的时候计算好结果,减少数据的获取量。
4.你的程序集群应该比较容易扩容的,你说的内存和计算性能,相对于数据库更容易获得

奖励园豆:5
Raiden_xin | 菜鸟二级 |园豆:268 | 2022-06-11 22:09
其他回答(8)
0

流式计算,比如,Spark、Flink、Kafka...

快乐的凡人721 | 园豆:3916 (老鸟四级) | 2022-06-09 17:24
0

不管是在数据库, 还是是后端程序都可以. 几个数字字段的计算, 或者网络传输 消耗微乎其微. 你程序可能的瓶颈根本就不在这里.

czd890 | 园豆:14412 (专家六级) | 2022-06-09 22:02

听君一席话,如听一席话

支持(0) 反对(0) 不识少年愁 | 园豆:62 (初学一级) | 2022-06-10 09:41

@不识少年愁:

  1. 仅针对你的问题回答, 我告诉你 性能损耗微乎其微. 所以2种方式都可以.
  2. 如果你要问计算放在哪里更符合规范, #3 已经回答了. 这是第二个问题了.
支持(0) 反对(0) czd890 | 园豆:14412 (专家六级) | 2022-06-10 12:55
0

二楼说的对

乾子 | 园豆:347 (菜鸟二级) | 2022-06-10 07:55
0

楼上也说了,都可以。但是我觉得最好是各司其职(职责单一原则),数据库就只是获取基础数据,程序中进行计算,而且计算本身属于业务代码。

飒沓流星 | 园豆:1099 (小虾三级) | 2022-06-10 10:51
0

首先 #二楼已经给了答案。

这里补充说点,对于你写的sql语句程序里计算和数据库自身计算其实都没啥大问题...
关于数据传输,这个完全取决于你数据库的数据量了,如果数据量极大,以上说的方法可能都不是很可取了。如果数据不大,你可以使用二楼的思路也么问题。
除此之外,其实你还可以利用数据库的存储过程来解决,当然说到存储过程肯定会有人说不要用,用于不用要考虑场景从实际出发,比如你就一个小项目,开发维护的人员就那么多,对数据库也比较了解,规范也有,等等等等,那用存储过程也没啥...当然使用存储过程了会更简单的...

西越泽 | 园豆:10775 (专家六级) | 2022-06-13 15:37
0

放在后台处理 别放数据库

ycyzharry | 园豆:25651 (高人七级) | 2022-06-15 20:24
0

这个需要考虑cpu密集型还是io密集型

Hi,Bro | 园豆:202 (菜鸟二级) | 2022-07-28 11:42
0

个人觉得吧,数据库其实就是数据的仓库。好比一个大车库,就是停车用的。
运算应该属于数据处理范畴了,是程序的功课。

freerPolymer | 园豆:219 (菜鸟二级) | 2022-08-16 21:40
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册