插入数据要求工号转 ID 这个步骤,让他调接口去查这个映射,实际上这个查询也不慢,100ms ,反正是一次性操作,这个数据迁移做了再就不做了,查库查表区别不大
相关的公司只有 200 多人
按一个记录审批人+干系人 10 个人(很多了,一般流程才五六个节点)算,不缓存,200 条数据也就 2000 次调用
这个 4w 次我至今没想明白是怎么弄出来的,但是我终于明白 200 条单表操作 1 个小时没做完的原因了
整个逻辑是这样
( 1 ) A 系统查询待办主表数据-A 系统查询审批记录(平均 1 个单 5 个流程节点)-查询 A 系统的人员工号-查询 B 系统的工号 ID 映射-插入最终数据(拼接为一条,这里插入是不涉及子表的)
不是有人再说怎么挖坑还不留痕迹么
多跟外包学学自然就会了

实事求是而已,并没有贬低外包的意思,但是这个事的确弄的我头大

( 1 )初步分析了一下人员查询存在循环调用,但是具体实在看不下去了,我是主前端的,真实的数据可能在 2w 左右,有 2w 是之前失败的数据也算了进来( 2 )关于性能:这就是国产化数据库+国产化的现状,以后做类似项目大家用的都这种环境( 3 )关于时间:之前给了 1 个星期时间熟悉,给了数据库表和 API 文档,给跑过接口 postman ,讲过思路,不存在放养( 4 )关于低代码:现在的低代码做企业办公应用又快又好,这东西有自己的场景,最应该担心的是 CURD 程序员

见过类似的,不过我这边是安卓客户端所以影响不大,埋了好多年的坑后来优化的时候发现的,就是 for 循环判断里的 i < getData().size(), 循环节里还有一堆 getData().get(i), 然后这个 getData()里面是完整读数据库,

常规操作,我也遇到过。拼凑一个数组,三层嵌套里面全是 select 哈哈哈哈

合格程序员其实是凤毛麟角的存在。

强调外包同事啥意思?显得自己一些?

这跟外不外包没关系吧

因为是实事求是

其实很多公司的大数据需求就是这么来的,你想如果查询接口每次都记录日志,一下子就有 40000 条数据可以分析了

你倒是提醒我了,我还得去清理日志表,别到时候日志爆了,本身就是边角料日志部分设计的没有主表日志那么完善

如果楼主的逻辑成立,那责任人也应该是决定用外包的领导,或者给这个外包面试通过的同事哦。

逻辑没太懂,是说 “A 系统查询待办主表数据-A 系统查询审批记录(平均 1 个单 5 个流程节点)-查询 A 系统的人员工号” 这部分调了 count(代办住表数) count(审批记录) count(A 系统人员) 这些次数?

这种错误,你只要搞代码评审,或者结对编程,那就很难出现。不把代码评审计入成本时间,或者把成本挤到下班时间,那就别怪搞出来神仙代码。

就是没做 batching ?

人家就是混口饭吃,也是朝不保夕,被开了还没赔偿,你还能对对方有什么要求。只能怪公司为了节省成本坑正式员工。

被开了没赔偿好惨

估计是连了几张表导致笛卡尔积乘了几次

盲猜 200x200=4w

😏你就说能不能用吧!

好奇。。为什么要外包?不就是为了有个背锅的吗?现在不就是背锅时刻?只不过不知道为什么要喷他。。。。

你优化优化不就来了 kpi 吗

合格程序员其实是凤毛麟角的存在。

#6 要不你来做老板

没事,代码和他有一个能跑就行

你就说系统跑么跑起来吧!

才查四万,小意思。400 万也很快查给他。。。居然要跑 1 个小时,你们服务器是 0.5G 内存吗?

技术不行 你管外包啥事啊

插入一次查询 200 次,循环一下就是 40000 次

我觉得挺正常,反正外包同事干着有一天没一天的活 能混就混吧。发奖金了也没人家的

国产数据库,国产 U ,再加上低代码本身各种复杂设计,一次接口 100ms 。4 万次不就 4000 秒,那不是一个小时

收拾客户之前供应商写 API 对接,不是按照日期范围和 ID 定位数据(是有这两个 API 的),而是把所有历史至今数据请求出来,然后 for 循环按照 ID 找到,每 3 小时运行一次,叹为观止。

N + 1 ?

外包一般是无理由换人,如果是第一周貌似钱都可以赖掉

我觉得插入一次就查一次很合理,毕竟你不能保证在执行过程中,数据不会发生变化。你如果是单次的任务,其实可以写好批量更新的 sql 直接操作。而不是这么循环搞。不值得为了单个需求写一个程序,编码测试时间足够处理数据了。

这个帖子评论区很好地举例说明了什么是事实,什么是观点

低代码的数据库很复杂的,你看到的是一个表,背后不知道是个什么 id 的表名,每个 id 还有一个独立的数据权限,你可以插数据但是重建数据权限这部分很麻烦

# 31 人家说的是 n+1 次查询,你能想到补偿我也是醉了。 是搞技术的吗,还看不起外包呢。满罐不响,半罐格朗。 其实 lz 可以想一想为啥这种水平的能和你做同事,外包不是理由。

国产数据库、国产 U ?大概塔( ZF 是敏*词确实挺离谱的)项目。那就不纠结技术了,烂就烂呗。

#35 哈哈没绷住

标题应该改成:一个用 macOS 的外包同事才符合你的身份

n+1 你是怎么能把 200 和 40000 联系起来的?

先 sleep 以下,能跑起来,二期再优化,没什么毛病。

看明白了能请外包的项目都是复杂的要死的项目, 每个 id 还有一个独立的数据权限,你可以插数据但是重建数据权限这部分很麻烦, 这我挺都没听过

所以给你挖了啥坑,是慢吗如果他是故意的,那你发这个贴肯定是觉得他坏;如果他不是故意的,你发这个贴肯定是觉得他蠢。带上外包这个 tag ,那当然有拉偏架的嫌疑了,也不要怪大家嘴你

你可以理解我拉偏架我外包被坑了 3 次,前两个直接让滚蛋了,这个是编程还可以,就是不规范也缺乏技巧,但是他会用 gpt 说明还有一点学习能力

accesstoken 缩写 asstoken ,所有的拼音命名都 n/ng 不分,比如英(yin)语(yu)

200 * 200 = 40000

昨日新增用户功能。前同事写的, 把所有用户查出来,if(日期=昨天)count++

这是好事啊 如果让老板发现外包比你们还好使 ,你猜你的下场是啥。我发现别人比我菜我都是很开心的,又是美好的一天

看明白了,活又急,又全是坑,你需要的是能救火的大神.

没看到代码 我是不会评论的 狗头保命

#39 先查出 200 个列表,然后遍历 200 ,每个遍历查一次( 200 ),就是 200 * 200这个就是 N + 1

有没有可能这是新人写的代码,跟产品还是外包没有任何关系。看着这段代码,我倒是想起当年刚入行写过一个三层 for 循环处理数据,印象中好像没有查库操作,换成现在,我直接一个 Map 映射处理,再 get

想起来刚毕业的时候 递归查数据库组装树的操作了
我见过一个接口里把符合条件的 id 找出来(大概几十个),然后在循环里: 连接数据库 -> 用一个 ID 查详情 -> 关闭数据库的 。。。。

外包哪里有要新人的,都是要有工作经验的

哈哈 我就遇到过这种问题,一堆表情包存本地,存了本地数据库 ,就是这么干的

哈哈。我现在也是这样操作 当年还不会用 hashmap ,写 3 层 for 循环

当年 学会写 for 循环 能把代码写出来就已经觉得自己很有成就感了

人家就是混口饭吃,也是朝不保夕,被开了还没赔偿,你还能对对方有什么要求。你知道 wuli 外包哥哥有多努力吗,你们非得看到他进监狱才开心吗

低代码啊。也许人家也是被坑的,鬼知道低代码里面弄得什么东西

看描述理解不了代码究竟是怎样的

能跑就行

不对啊,你这又不是直接查数据库,用的接口啊,只能怪你接口慢罗,谁知道你们有没有批量查询接口

hhhh 就在找你这句

我的表几百万条查询几秒钟,你们是土豆服务器?要么花钱请好程序员,要么花钱上好服务。

( 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 )

不对啊,就算没有批量,4W 次是怎么弄出来的,就算每条记录 10 个用户,查 A 系统 10 次,B 系统 10,也就 200*20=4000 次

和水平不行的人共事的确糟心;虽然 LZ 有点拉偏架,不过外包现状如此,不排除外包里有能人,但是外包的低门槛也导致里面菜的比例就是更多;

以后国产化就这服务器了,除非华为点出什么天顶星科技能追上至强或者 epyc 的性能

200 条数据怎么插也不会查询数据库两万次吧

JPA 的话感觉是没写 EntityGraph

馬鈴薯伺服器.2000 年,一位名為佛瑞德·懷特的男子創造了一台用 5 個馬鈴薯為動力的 Web 伺服器,這伺服器每秒鐘僅可以處理 0.2 個頁面請求,也就是說大概 5 秒鐘才能處理一個完整的用戶請求。

op 公司现在也不招自社员工,统一用外包了吗。

设计的问题不能光给一个人背,方案是谁出的,有没有 review ,如果都然后一个外包写那么锅是研发组长的

评价是外包啥都要,只要甲方能过就行, 市场都要有经验的,没经验的大多干外包,一部分转行,一部分自己找到非外包工作(但是有可能是项目外包)

#56 😭我当年实习的时候, 就是 3 层 for 循环...

這種地方有個屁的代碼評審 代碼不崩就當通過了

涉及到多这个表的查询,找 DBA 给 sql 或建好视图查询, 开发不管数据库这类的东西,哪是数据部门的事。

哈哈,我要是干上外包了,我也这么写,反正都干外包了,能用就行。

人和代码有一个能跑就行(●'◡'●)

項目用低代碼就別想著性能好,外包都是拼命的壓榨,哪有時間給你優化,能實現功能就不錯了。而且低代碼的底層邏輯都不知道,一般公司的低代碼平台還是不停迭代的,最開始可能只能用笨方法實現功能,後期才有解決方案。

说回来, 这既然是一次性操作, 4 万也不是什么大数目, 有那个功夫你嫌这嫌那 的, 人程序早跑完了

就问你代码能用不能?能用就行了,人家外包又没你们挣的多,程序能跑就可以了,站在外包人员的角度来说代码优化的再好他也是吃力不讨好,没必要浪费精力。真看不惯,找你们老板谈谈,让他招正式工别用外包了。

#44 有一说一,我拼音也分不清前鼻音后鼻音。但是我不用拼音做变量名。

弄低代码的东西?不要说做,听听就感觉头大。

我昨天还在做一个数据移行的工具,据说里面有 30w+的数据。还有各种关联表的查询。听完楼主的故事,我瑟瑟发抖。

只要 不影响 服务,要什么问题吗?

以我多年外包经验来看...之前有协商没? 没有就按照能跑就行的原则..改得加钱记得有一次接外包,数据库不让我动,只能查..有一个需要要批量加 100 多个分类信息.也就 100 多行,我只需要写入后的自增 id 去做映射..我把数据发给对方,过了一会儿我问好了没? 他说马上, 我迫不及待啊,就刷新数据表的去看..发现了神奇的事情, 这个分类是刷新一次多出现一行.....我估摸着难道是他手动在添加??? 所以牛不牛掰所谓..就问能跑不?

用国产化的东西就知道是什么类型项目了,外包不很正常?反正只要项目能跑就行了,出了大问题再说

功能实现了吗?结果和预期一致吗?分配该任务时有明确的性能指标要求吗?如果上面都没问题的话,那他就没有任何问题,因为你也说了他是外包员工。

当然,因为你是客户公司的职员,如果你认为该外包成员影响了你们公司的产品服务质量,或者该成员不具备本项目必须的技术能力,可以向上司报告要求解除与该外包人员的契约,或者要求劳务派遣公司更换人员,这也是客户的权利。

说到点子上了。调接口,你 SQL 写得好有何用?

调接口别人只要 200 次,水一点的 2000 次,调 20000 次的怎么解释?

这我怎么猜?代码、环境,我全都没。我也没动机替你 review 代码。但是如果用 API ,SQL 技巧确实没用。我刚才说的是这个。