一个外包同事,插入 200 条数据,调用了四万次人员查询接口
插入数据要求工号转 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 技巧确实没用。我刚才说的是这个。
本科时候的一个旧电脑。那时候还是 win7 ,现在请问有人用过 Tiny10 吗? 只要一些简单能用的功能就用,主要就是上上网啥的,不用作生产力电脑了 www.revi.…
现在自己部署使用 SD 的比较多。 但是部署 LLM 的有没有? 开源的 LLM 大模型,一个比一个能吹牛,实际使用体验怎么样? 自行部署的性价比太低了 一个机器的成本 几千…
哪种性能更好一点 目前出现两种说法,设置成 off,nginx 会把日志写入一个叫做“off”的文件: stackoverflow.com/questions/796738…
合速度