问个微服务开发中的问题

来源:1-3 什么是微服务

慕沐3161652

2018-10-01

我想到一个工作中的问题, 我们现在10个微服务
例如一个列表查询功能:

可能该查询功能里面需要关联到了多张, 5,6,7,8张表的字段, 还有可能里面会有其它操作(例如分组聚合, 计算)

1. 方法一: SQL

select a.xx, b.xx, c.xx from a 
left join b on xx 
left join c on xx
// 分组聚合, 计算等.  

2. 方法二: Java

List aList = aRepository.queryList();
List bList = bRepository.queryListWhereXxIn(List params);
List cList = cRepository.queryListWhereXxIn(List params);
// TODO : 对aList, bList, cList进行分组, 计算, 拼装等
return resultList;

对于这两种方式, 也就是很多人经常讨论的业务逻辑到底写在sql里还是service代码里.

我没有通过大量的测试数据去测试究竟哪种速度快,
我想知道, 就从职责上看, 数据库适合于数据的简单存取, 持久化. DAO层方法尽可能的单一
而java代码(service)更适合于组合数据, 做业务逻辑和计算, 所以我喜欢方式二.
我想知道对吗? 老师

写回答

2回答

qq_慕村8261554

2023-01-27

如果是在业务系统(而不是admin系统中)个人会更建议第二种,原因如下:

1、这里可以明确的是,级联查询并不会比多次单表查询更快。
2、级联查询对缓存不友好,真正遇到热点查询时sql的优化肯定赶不上缓存的使用。如果大量使用级联查询,缓存会变得难以应用
3、系统中出现瓶颈的往往不是业务代码,而是数据库。业务系统扩展成本低,数据库扩展成本高。
4、级联查询管理维护成本高。级联查询复用性差。试想,团队的开发人员能力参差不齐,你的业务系统中如果以级联查询优先,势必会造成系统中存在大量的级联查询和一堆名字类似,捋不清关系的BO。当你作为开发者看到很多功能类似的级联查询,字段类似的BO。你会怎么想?你会去一个个的了解清楚吗?大多数人会自己再写一个差不多的级联查询,创建一个自己的BO。因为,搞清楚这些问题比自己重写一个还麻烦。

0
0

刘果国

2018-10-01

这个其实没有固定的答案,各有各的特点,个人偏好是没问题的,具体还得根据业务情况具体分析,如果写在代码里空间或时间上存在瓶颈,sql就是更好的方式

0
0

Docker+Kubernetes(k8s)微服务容器化实践

从开发到编排,快速,完整,深入的掌握微服务

2608 学习 · 607 问题

查看课程