插入数据要求工号转 ID 这个步骤,让他调接口去查这个映射,实际上这个查询也不慢,100ms ,反正是一次性操作,这个数据迁移做了再就不做了,查库查表区别不大
相关的公司只有 200 多人
按一个记录审批人+干系人 10 个人(很多了,一般流程才五六个节点)算,不缓存,200 条数据也就 2000 次调用
这个 4w 次我至今没想明白是怎么弄出来的,但是我终于明白 200 条单表操作 1 个小时没做完的原因了
整个逻辑是这样 ( 1 ) A 系统查询待办主表数据-A 系统查询审批记录(平均 1 个单 5 个流程节点)-查询 A 系统的人员工号-查询 B 系统的工号 ID 映射-插入最终数据(拼接为一条,这里插入是不涉及子表的)
不是有人再说怎么挖坑还不留痕迹么
多跟外包学学自然就会了
1
AoEiuV020JP 2023-09-22 11:49:07 +08:00 2
见过类似的,不过我这边是安卓客户端所以影响不大,埋了好多年的坑后来优化的时候发现的,
就是 for 循环判断里的 i < getData().size(), 循环节里还有一堆 getData().get(i), 然后这个 getData()里面是完整读数据库, |
2
coffeygao 2023-09-22 11:52:56 +08:00
常规操作,我也遇到过。拼凑一个数组,三层嵌套里面全是 select 哈哈哈哈
|
3
lincanbin 2023-09-22 11:54:21 +08:00 12
合格程序员其实是凤毛麟角的存在。
|
4
onikage 2023-09-22 12:26:45 +08:00 via Android
强调外包同事啥意思?显得自己一些?
|
5
Daniel17 2023-09-22 12:27:30 +08:00 1
这跟外不外包没关系吧
|
7
Narcissu5 2023-09-22 12:35:32 +08:00
其实很多公司的大数据需求就是这么来的,你想如果查询接口每次都记录日志,一下子就有 40000 条数据可以分析了
|
8
murmur OP @Narcissu5 你倒是提醒我了,我还得去清理日志表,别到时候日志爆了,本身就是边角料日志部分设计的没有主表日志那么完善
|
9
coderluan 2023-09-22 12:37:52 +08:00
如果楼主的逻辑成立,那责任人也应该是决定用外包的领导,或者给这个外包面试通过的同事哦。
|
10
Badlink 2023-09-22 12:45:38 +08:00
逻辑没太懂,是说 “A 系统查询待办主表数据-A 系统查询审批记录(平均 1 个单 5 个流程节点)-查询 A 系统的人员工号” 这部分调了 count(代办住表数) * count(审批记录) * count(A 系统人员) 这些次数?
|
11
nothingistrue 2023-09-22 12:50:00 +08:00 6
这种错误,你只要搞代码评审,或者结对编程,那就很难出现。不把代码评审计入成本时间,或者把成本挤到下班时间,那就别怪搞出来神仙代码。
|
12
TWorldIsNButThis 2023-09-22 13:05:54 +08:00 via iPhone
就是没做 batching ?
|
13
bk201 2023-09-22 13:11:55 +08:00 27
人家就是混口饭吃,也是朝不保夕,被开了还没赔偿,你还能对对方有什么要求。只能怪公司为了节省成本坑正式员工。
|
15
shmilypeter 2023-09-22 13:52:15 +08:00 via iPhone
估计是连了几张表导致笛卡尔积乘了几次
|
16
gaifanking 2023-09-22 13:55:51 +08:00 1
盲猜 200x200=4w
|
17
devopsdogdog 2023-09-22 13:56:05 +08:00 via Android
😏你就说能不能用吧!
|
18
6c67461c562bdc 2023-09-22 13:58:45 +08:00 4
好奇。。为什么要外包?不就是为了有个背锅的吗?现在不就是背锅时刻?只不过不知道为什么要喷他。。。。
|
19
kangmang92 2023-09-22 14:01:59 +08:00
你优化优化不就来了 kpi 吗
|
20
xingjue 2023-09-22 14:23:48 +08:00
合格程序员其实是凤毛麟角的存在。
|
22
knva 2023-09-22 14:26:13 +08:00
没事,代码和他有一个能跑就行
|
23
lambdaq 2023-09-22 14:27:51 +08:00
你就说系统跑么跑起来吧!
|
24
encro 2023-09-22 14:31:11 +08:00 2
才查四万,小意思。400 万也很快查给他。。。
居然要跑 1 个小时,你们服务器是 0.5G 内存吗? |
25
gfswoquasfasd 2023-09-22 14:31:20 +08:00
技术不行 你管外包啥事啊
|
26
explon 2023-09-22 14:32:50 +08:00
插入一次查询 200 次,循环一下就是 40000 次
|
27
sun522198558 2023-09-22 14:40:22 +08:00
我觉得挺正常,反正外包同事干着有一天没一天的活 能混就混吧。发奖金了也没人家的
|
28
murmur OP @encro 国产数据库,国产 U ,再加上低代码本身各种复杂设计,一次接口 100ms 。4 万次不就 4000 秒,那不是一个小时
|
29
nzynzynzy 2023-09-22 14:44:36 +08:00
收拾客户之前供应商写 API 对接,不是按照日期范围和 ID 定位数据(是有这两个 API 的),而是把所有历史至今数据请求出来,然后 for 循环按照 ID 找到,每 3 小时运行一次,叹为观止。
|
30
diagnostics 2023-09-22 14:59:25 +08:00
N + 1 ?
|
31
murmur OP @diagnostics 外包一般是无理由换人,如果是第一周貌似钱都可以赖掉
|
32
grance 2023-09-22 15:08:24 +08:00
我觉得插入一次就查一次很合理,毕竟你不能保证在执行过程中,数据不会发生变化。
你如果是单次的任务,其实可以写好批量更新的 sql 直接操作。而不是这么循环搞。 不值得为了单个需求写一个程序,编码测试时间足够处理数据了。 |
33
Erroad 2023-09-22 15:08:31 +08:00
这个帖子评论区很好地举例说明了什么是事实,什么是观点
|
34
murmur OP @grance 低代码的数据库很复杂的,你看到的是一个表,背后不知道是个什么 id 的表名,每个 id 还有一个独立的数据权限,你可以插数据但是重建数据权限这部分很麻烦
|
35
runzekk 2023-09-22 15:14:38 +08:00 2
# 31 人家说的是 n+1 次查询,你能想到补偿我也是醉了。 是搞技术的吗,还看不起外包呢。满罐不响,半罐格朗。 其实 lz 可以想一想为啥这种水平的能和你做同事,外包不是理由。
|
38
FakerLeung 2023-09-22 15:26:52 +08:00
标题应该改成:一个用 macOS 的外包同事才符合你的身份
|
40
blackkkk 2023-09-22 15:28:02 +08:00
先 sleep 以下,能跑起来,二期再优化,没什么毛病。
|
41
ma836323493 2023-09-22 15:39:57 +08:00
看明白了能请外包的项目都是复杂的要死的项目, 每个 id 还有一个独立的数据权限,你可以插数据但是重建数据权限这部分很麻烦, 这我挺都没听过
|
42
janus77 2023-09-22 16:38:52 +08:00
所以给你挖了啥坑,是慢吗
如果他是故意的,那你发这个贴肯定是觉得他坏;如果他不是故意的,你发这个贴肯定是觉得他蠢。带上外包这个 tag ,那当然有拉偏架的嫌疑了,也不要怪大家嘴你 |
43
murmur OP |
44
murmur OP @janus77 accesstoken 缩写 asstoken ,所有的拼音命名都 n/ng 不分,比如英(yin)语(yu)
|
45
jmc891205 2023-09-22 16:43:21 +08:00
200 * 200 = 40000
|
46
zhongjun96 2023-09-22 16:43:24 +08:00
昨日新增用户功能。
前同事写的, 把所有用户查出来,if(日期=昨天)count++ |
47
Promtheus 2023-09-22 16:43:26 +08:00
这是好事啊 如果让老板发现外包比你们还好使 ,你猜你的下场是啥。我发现别人比我菜我都是很开心的,又是美好的一天
|
48
cherryas 2023-09-22 16:44:14 +08:00
看明白了,活又急,又全是坑,你需要的是能救火的大神.
|
49
binge921 2023-09-22 16:59:32 +08:00
没看到代码 我是不会评论的 狗头保命
|
50
diagnostics 2023-09-22 17:05:09 +08:00
|
51
RainCats 2023-09-22 17:13:44 +08:00
有没有可能这是新人写的代码,跟产品还是外包没有任何关系。
看着这段代码,我倒是想起当年刚入行写过一个三层 for 循环处理数据,印象中好像没有查库操作,换成现在,我直接一个 Map 映射处理,再 get |
52
imokkkk 2023-09-22 17:22:57 +08:00
|
53
darkengine 2023-09-22 17:25:41 +08:00
我见过一个接口里把符合条件的 id 找出来(大概几十个),然后在循环里: 连接数据库 -> 用一个 ID 查详情 -> 关闭数据库的 。。。。
|
55
broken123 2023-09-22 17:30:30 +08:00
@AoEiuV020JP 哈哈 我就遇到过这种问题,一堆表情包存本地,存了本地数据库 ,就是这么干的
|
58
GeruzoniAnsasu 2023-09-22 17:34:03 +08:00
|
59
ZZ74 2023-09-22 17:40:50 +08:00
低代码啊。也许人家也是被坑的,鬼知道低代码里面弄得什么东西
|
60
chenqh 2023-09-22 17:42:12 +08:00 1
看描述理解不了代码究竟是怎样的
|
61
jiuhuicinv 2023-09-22 17:44:49 +08:00
能跑就行
|
62
chenqh 2023-09-22 17:45:56 +08:00 2
不对啊,你这又不是直接查数据库,用的接口啊,只能怪你接口慢罗,谁知道你们有没有批量查询接口
|
63
o562dsRcFqYl375i 2023-09-22 17:48:57 +08:00
@devopsdogdog hhhh 就在找你这句
|
64
cassyfar 2023-09-22 17:50:07 +08:00
我的表几百万条查询几秒钟,你们是土豆服务器?要么花钱请好程序员,要么花钱上好服务。
|
65
murmur OP @chenqh
( 1 )需求为 A 系统的流程数据迁移到 B 系统,但是在 B 系统是只读的,A 系统已经停用不再产生数据也不再修改人员结构 ( 2 ) A 系统和 B 系统的人员的数据库主键都不是工号,但是同一个人工号在两个系统是相同的,人员同步每天半夜执行,也就是说白天上班期间人员的 ID 是不会变的,就算同步了也不会变 ( 3 ) A 系统采用查库获取数据,B 系统使用接口(访问接口需要 accessToken )插入数据 ( 4 )迁移的流程数据包括主表单、审批意见,每一个审批单包含 2 条主表记录和若干审批意见表中的记录(可以通过流程 ID 一次查出对应单据的所有审批意见) ( 5 )审批意见里的人员需要 A 系统 ID -> 工号 -> B 系统 ID 这样转换后才能插入,所以需要调人员查询接口 ( 6 ) B 系统插入新数据只需要调用一次插入接口( json post ) |
66
chenqh 2023-09-22 17:54:22 +08:00
不对啊,就算没有批量,4W 次是怎么弄出来的,就算每条记录 10 个用户,查 A 系统 10 次,B 系统 10,也就 200*20=4000 次
|
67
kkbblzq 2023-09-22 17:54:49 +08:00 1
和水平不行的人共事的确糟心;虽然 LZ 有点拉偏架,不过外包现状如此,不排除外包里有能人,但是外包的低门槛也导致里面菜的比例就是更多;
|
69
bigjack 2023-09-22 17:58:54 +08:00
200 条数据怎么插也不会查询数据库两万次吧
|
70
c6h6benzene 2023-09-22 18:00:48 +08:00
JPA 的话感觉是没写 EntityGraph
|
71
shyangs 2023-09-22 19:42:19 +08:00
馬鈴薯伺服器.
2000 年,一位名為佛瑞德·懷特的男子創造了一台用 5 個馬鈴薯為動力的 Web 伺服器,這伺服器每秒鐘僅可以處理 0.2 個頁面請求,也就是說大概 5 秒鐘才能處理一個完整的用戶請求。 |
72
chuck1in 2023-09-22 19:42:44 +08:00
op 公司现在也不招自社员工,统一用外包了吗。
|
73
opengg 2023-09-22 19:49:31 +08:00 via Android
设计的问题不能光给一个人背,方案是谁出的,有没有 review ,如果都然后一个外包写那么锅是研发组长的
|
74
Bingchunmoli 2023-09-22 19:55:02 +08:00 via Android
@murmur 评价是外包啥都要,只要甲方能过就行, 市场都要有经验的,没经验的大多干外包,一部分转行,一部分自己找到非外包工作(但是有可能是项目外包)
|
75
Yukirito1996 2023-09-22 23:34:28 +08:00
@broken123 #56 😭我当年实习的时候, 就是 3 层 for 循环...
|
76
roundgis 2023-09-22 23:40:17 +08:00 via Android
@nothingistrue 這種地方有個屁的代碼評審 代碼不崩就當通過了
|
77
jones2000 2023-09-22 23:55:05 +08:00
涉及到多这个表的查询,找 DBA 给 sql 或建好视图查询, 开发不管数据库这类的东西,哪是数据部门的事。
|
78
hobbitlhy 2023-09-23 00:02:47 +08:00
哈哈,我要是干上外包了,我也这么写,反正都干外包了,能用就行。
|
79
lmw2616 2023-09-23 00:37:03 +08:00
人和代码有一个能跑就行(●'◡'●)
|
80
baton 2023-09-23 00:44:47 +08:00 via Android 1
項目用低代碼就別想著性能好,外包都是拼命的壓榨,哪有時間給你優化,能實現功能就不錯了。而且低代碼的底層邏輯都不知道,一般公司的低代碼平台還是不停迭代的,最開始可能只能用笨方法實現功能,後期才有解決方案。
|
81
kkwa56188 2023-09-23 01:46:51 +08:00
说回来, 这既然是一次性操作, 4 万也不是什么大数目, 有那个功夫你嫌这嫌那 的, 人程序早跑完了
|
82
aulayli 2023-09-23 02:23:46 +08:00 via Android
就问你代码能用不能?能用就行了,人家外包又没你们挣的多,程序能跑就可以了,站在外包人员的角度来说代码优化的再好他也是吃力不讨好,没必要浪费精力。真看不惯,找你们老板谈谈,让他招正式工别用外包了。
|
84
kltt22 2023-09-23 10:41:51 +08:00
弄低代码的东西?不要说做,听听就感觉头大。
|
85
jianghu52 2023-09-23 11:09:16 +08:00
我昨天还在做一个数据移行的工具,据说里面有 30w+的数据。还有各种关联表的查询。听完楼主的故事,我瑟瑟发抖。
|
86
yxzblue 2023-09-23 11:37:50 +08:00
只要 不影响 服务,要什么问题吗?
|
87
llsquaer 2023-09-23 11:46:07 +08:00
以我多年外包经验来看...之前有协商没? 没有就按照能跑就行的原则..改得加钱
记得有一次接外包,数据库不让我动,只能查..有一个需要要批量加 100 多个分类信息.也就 100 多行,我只需要写入后的自增 id 去做映射..我把数据发给对方,过了一会儿我问好了没? 他说马上, 我迫不及待啊,就刷新数据表的去看..发现了神奇的事情, 这个分类是刷新一次多出现一行.....我估摸着难道是他手动在添加??? 所以牛不牛掰所谓..就问能跑不? |
88
vgbw 2023-09-23 12:01:29 +08:00
用国产化的东西就知道是什么类型项目了,外包不很正常?反正只要项目能跑就行了,出了大问题再说
|
89
KENNHI 2023-09-23 22:05:04 +08:00 via Android
功能实现了吗?结果和预期一致吗?分配该任务时有明确的性能指标要求吗?如果上面都没问题的话,那他就没有任何问题,因为你也说了他是外包员工。
|
90
KENNHI 2023-09-23 22:13:10 +08:00 via Android
当然,因为你是客户公司的职员,如果你认为该外包成员影响了你们公司的产品服务质量,或者该成员不具备本项目必须的技术能力,可以向上司报告要求解除与该外包人员的契约,或者要求劳务派遣公司更换人员,这也是客户的权利。
|
93
ljrdxs 2023-09-24 18:55:36 +08:00
@murmur 这我怎么猜?代码、环境,我全都没。我也没动机替你 review 代码。
但是如果用 API ,SQL 技巧确实没用。我刚才说的是这个。 |
94
yoloMiss 2023-09-24 22:38:47 +08:00
哈哈哈哈,怎么解释,算你倒霉。
|