V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
longmeier90
V2EX  ›  程序员

公司后端技术选型-是选择 go 还是 Java ?

  •  
  •   longmeier90 · 2020-12-07 20:53:21 +08:00 · 18809 次点击
    这是一个创建于 1447 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们公司是主要是开眼科诊所,但是需要把我们公司的日常业务搞成信息化、数字化管理。之前业务紧就选用 python 来开发后台应用,但是有时候 python 处理业务逻辑什么的特别慢,而且非常耗服务器 cpu 资源,现在就感觉 python 遇到瓶颈啦,假如说以后我们公司的诊所越开越多,业务也越来越庞大,要是从后端技术中选一门语言来支撑我们的哦业务发展,你们觉得是选择 go 还是 java 。我们公司有一些互联网的项目 公众号、小程序、挂号-做检查-收费-开药一系列操作的医疗系统。

    第 1 条附言  ·  2020-12-08 17:28:21 +08:00
    我的微信 longmeier99,希望各位大佬们多多指导交流
    191 条回复    2024-07-05 17:22:26 +08:00
    1  2  
    chevalier
        1
    chevalier  
       2020-12-07 20:58:44 +08:00   ❤️ 26
    技术选型,语言特性因素放在后面,先考虑下现有团队转哪种语言成本低

    另外,业务逻辑慢,99%的可能瓶颈不在语言上,Python 虽然比编译型语言慢 1 ~ 2 个数量级,但是处理普通的互联网 CURD 业务,不会有性能问题;我参与过多个大型的 Python 互联网业务系统了。

    你的问题多半可能出现在数据库、机器等资源上,跑个火焰图看下耗时在哪,或许不用换语言,也能解决问题
    chengxiao
        2
    chengxiao  
       2020-12-07 21:06:57 +08:00
    减少自己团队的被替代性 GO+1
    节约成本 JAVA+1
    saulshao
        3
    saulshao  
       2020-12-07 21:11:43 +08:00   ❤️ 4
    按照楼主的描述,你选啥语言都没大区别的,相信我。
    coderxy
        4
    coderxy  
       2020-12-07 21:12:05 +08:00
    同意一楼,应该跟语言无关,其它地方卡估计是
    hantsy
        5
    hantsy  
       2020-12-07 21:15:31 +08:00   ❤️ 14
    PHP 8 不错。
    hongch
        6
    hongch  
       2020-12-07 21:20:18 +08:00
    基础数据的 crud,真的有那么耗性能吗,10 万条数据以内吧?
    longmeier90
        7
    longmeier90  
    OP
       2020-12-07 21:20:56 +08:00
    我们业务处理速度慢,是因为查询大数据量(十几万)的时候,再用 python 来处理这些数据,我发现我们的服务器 cpu 就会占用 90%多,得需要等好几分钟,这还是 10 几家诊所的数据量。
    hqs0417
        8
    hqs0417  
       2020-12-07 21:22:26 +08:00
    @longmeier90 搞分布式啊,并行计算
    wdwwtzy
        9
    wdwwtzy  
       2020-12-07 21:22:40 +08:00   ❤️ 2
    C#/.net 不考虑下吗?
    goxy
        10
    goxy  
       2020-12-07 21:28:09 +08:00
    python 本身不是瓶颈,团队里的人才是瓶颈

    题外话,这种东西最好就是 搭建 /用 Saas,多租户的平台,毕竟是一个眼科诊所,不是信息技术公司。应当可以抽离出一些通用的流程 /模块
    zhuangzhuang1988
        11
    zhuangzhuang1988  
       2020-12-07 21:29:08 +08:00
    熟悉哪个用哪个。
    KuroNekoFan
        12
    KuroNekoFan  
       2020-12-07 21:30:29 +08:00
    js
    AppxLite
        13
    AppxLite  
       2020-12-07 21:32:10 +08:00
    go js
    TypeError
        14
    TypeError  
       2020-12-07 21:34:14 +08:00 via Android
    十几万 Python 也没啥问题吧,试试把 list/dict 操作换成 numpy/pandas
    longmeier90
        15
    longmeier90  
    OP
       2020-12-07 21:35:31 +08:00
    @goxy 是的我们公司也想弄成 sass 模式,可以加盟我们的诊所,用我们的医疗系统
    mascteen
        16
    mascteen  
       2020-12-07 21:37:20 +08:00 via Android
    这个瓶颈显然不在语言啊,更在架构上吧
    MaxFang
        17
    MaxFang  
       2020-12-07 21:37:49 +08:00
    普通的内部信息化系统应该还没有到达语言瓶颈吧。就目前的问题,很有可能是程序上问题,可能有一些优化空间。先定位问题,如果已经没有大的优化空间了,就需要考虑换架构的事情,无非变分布式,拆分系统,分库分表等一些常见的方案,主要的方案定了之后,综合考虑语言方面的成本,性能和支持情况。
    miniliuke
        18
    miniliuke  
       2020-12-07 21:43:42 +08:00
    天下 Web 一石,我 Java 独占 9 斗......Web 系统的话,小团队最好用 Java,你想找个坑出来都难......
    ksedz
        19
    ksedz  
       2020-12-07 21:45:24 +08:00
    反对一楼,语言造成的低水平的人员乱写本身是一个可以用语言解决的问题。
    语言选择我倾向 go,主要是运维成本低、和 python 的相似度高。
    heyjei
        20
    heyjei  
       2020-12-07 21:45:58 +08:00
    @longmeier90 都一样的,我一个项目也是把数据从数据库里取出来放到内存中用 PHP 分析计算,就 1 万不到的数据,要好几秒才能算完。但是把把这个计算推到 MySQL 那里计算,速度一下子就快起来了。

    建议可以将计算推到数据库那里试试看。
    Lemeng
        21
    Lemeng  
       2020-12-07 21:48:10 +08:00
    如果没要求,选顺手的
    janus77
        22
    janus77  
       2020-12-07 21:55:14 +08:00
    选 go 可能对,但是选 java 肯定不会错。
    no1xsyzy
        23
    no1xsyzy  
       2020-12-07 22:03:13 +08:00
    先换个更快的运行时比如 PyPy Cython 试一下,当换运行时有明显提升但仍然不够时才考虑换语言;否则换语言本身是没用的,最多新语言带来的新思维方式有点用,如果是基础设施问题多半可以通过引第三方包解决。
    longmeier90
        24
    longmeier90  
    OP
       2020-12-07 22:09:19 +08:00
    @heyjei 很多时候我从数据库取完数还需要再匹配计算,没法完全放到 mysql 那里计算,再说如果数据量大 mysql 同样也会消耗大量资源,甚至会导致其他业务也会变慢。
    kevinwan
        25
    kevinwan  
       2020-12-07 22:10:57 +08:00 via iPhone
    选 go +1
    jimrok
        26
    jimrok  
       2020-12-07 22:18:56 +08:00
    java + python 混合就行。看你计算为啥慢,是不是没有用缓存?
    tumaowolf
        27
    tumaowolf  
       2020-12-07 22:20:17 +08:00
    java 不会出大错,但我喜欢 go
    so1n
        28
    so1n  
       2020-12-07 22:20:22 +08:00 via Android
    @longmeier90 你可以用 panda 试试……逻辑代码好写又快
    Leigg
        29
    Leigg  
       2020-12-07 22:20:23 +08:00 via iPhone
    真要换,当然是 go,拥有 Java 的性能和强类型的同时,还比 Java 语法简洁 N 倍
    Yc1992
        30
    Yc1992  
       2020-12-07 22:28:31 +08:00
    @longmeier90 排查下哪个操作占用了最多的时间,肯定有很耗时的操作,优化一下即可
    jmyz0455
        31
    jmyz0455  
       2020-12-07 22:34:37 +08:00
    关注一下。
    heyjei
        32
    heyjei  
       2020-12-07 22:43:50 +08:00
    @heyjei 请相信数据库, 他可以的。

    你这十几万的取数据,反而会更拖累数据库,你可以 explain 一下看看,这个取数的过程也可能需要好几秒
    djoiwhud
        33
    djoiwhud  
       2020-12-07 22:46:54 +08:00 via Android   ❤️ 2
    两个语言都很熟。管了五年项目和团队,我建议选 go 。

    别听其他人忽悠你选 java 的说法。

    你们目前用的 python,说明团队成员都对 java 框架半吊子了解。leader 如果是 java 出身,不会选 python,java 开发者都比较固守城池。转 java 是完全不合适你团队现状的,熟悉 java 框架都要很长时间。开除现在的团队重新找 java 的时间成本也高。

    如果你那不是一群只会 python 的水货应届生,转 go 应该没太大磨合难度。
    2kCS5c0b0ITXE5k2
        34
    2kCS5c0b0ITXE5k2  
       2020-12-07 22:49:18 +08:00
    先确认你是不是语言瓶颈。。 大部分的项目都是数据库瓶颈
    vision1900
        35
    vision1900  
       2020-12-07 22:53:01 +08:00
    python 是真的慢,被 node 吊打可还行
    kalman03
        36
    kalman03  
       2020-12-07 22:55:28 +08:00
    这个应该是技术负责人决定的事情。
    如果你是老板,信任你的技术负责人吧。
    如果你不是,那么你可能也不是技术负责人,不然你最初为什么会选用 python,现在却要大家出谋划策?这好像不符合技术负责人的技术能力要求。
    如果你不是老板,也不是技术负责人,那么这个事情就不需要操心了。
    misaka19000
        37
    misaka19000  
       2020-12-07 22:57:22 +08:00
    我们 Python 应用目前 qps 1000 左右,没遇到瓶颈,所以我认为不是语言的问题
    Cbdy
        38
    Cbdy  
       2020-12-07 22:57:31 +08:00 via Android
    java 技术栈很好,但是水货太多,没有靠谱 java 程序员的话建议选其他语言
    zachlhb
        39
    zachlhb  
       2020-12-07 22:58:37 +08:00 via Android
    不考虑项目,业务范围来选择语言的都是耍流氓
    tikazyq
        40
    tikazyq  
       2020-12-07 23:04:03 +08:00   ❤️ 1
    来鱼塘赏鱼
    NoBugDie
        41
    NoBugDie  
       2020-12-07 23:40:54 +08:00 via Android
    大概率是程序或者数据库问题,换了语言一样无解。
    manhere
        42
    manhere  
       2020-12-07 23:48:42 +08:00 via Android
    买套现成的成熟 his 系统使用不好吗?
    namelosw
        43
    namelosw  
       2020-12-07 23:52:02 +08:00
    你这个不是语言的问题, 用很快的语言可能也只能提升不到 10 倍.

    感觉你挪动数据太多了, 要不优化成 SQL, 要不就上 Spark 之类的专业数据处理.
    catror
        44
    catror  
       2020-12-07 23:55:35 +08:00 via Android
    什么操作要把十几万条数据查出来?换语言估计没啥明显效果
    gochat
        45
    gochat  
       2020-12-07 23:58:36 +08:00
    毫无疑问! golang
    dayeye2006199
        46
    dayeye2006199  
       2020-12-08 06:51:08 +08:00
    为什么十几万条数据,要用 py 来做内存处理呢?可不可以挪进数据库处理呢?单纯写 CRUD,很难碰到 py 的性能天花板。
    longmeier90
        47
    longmeier90  
    OP
       2020-12-08 07:50:42 +08:00
    @kalman03 我们公司搞后端的就 3 个人,领导不是特别懂技术的那种,所以技术选型需要我们几个人商讨一下,是这种情况。
    longmeier90
        48
    longmeier90  
    OP
       2020-12-08 07:54:06 +08:00
    @catror 都是一些统计方面的工作,统计好几年的数据,目前 10 家诊所就有 10 万级的数据量,以后数据量会更多
    zjsxwc
        49
    zjsxwc  
       2020-12-08 08:09:44 +08:00 via Android
    不是数据库慢的问题,只是单纯由于 python 一次性处理查询来的十几万内存数据慢的话,可以用 pypy,性能可以达到纯 c 的级别,唯一缺点是内存占用大一点。
    2379920898
        50
    2379920898  
       2020-12-08 08:46:11 +08:00
    选 GO 吧、成本也不高 6 天就转了
    ElmerZhang
        51
    ElmerZhang  
       2020-12-08 08:53:35 +08:00 via iPhone
    才 10 几万数据就要跑几分钟,基本可以肯定和语言无关,你该换个程序员
    StephenHe
        52
    StephenHe  
       2020-12-08 08:55:49 +08:00
    第一个公司.net 做的后台也是卡的一逼,这更多是架构问题。如果一定要换语言,果断 java 。
    micean
        53
    micean  
       2020-12-08 08:58:58 +08:00
    得先分清是哪种情况
    1 、数据库查询慢,是不是没做优化
    2 、python 处理慢,是不是内存不够
    hbolive
        54
    hbolive  
       2020-12-08 08:59:13 +08:00
    架构的问题,python 虽然慢,但不至于 10 万这个数据都对付不了。。
    一次性装进来,用什么语言都快不到哪去。。
    jbgz
        55
    jbgz  
       2020-12-08 08:59:41 +08:00   ❤️ 2
    .net 5.0 考虑一下😒
    aladdindingding
        56
    aladdindingding  
       2020-12-08 09:03:42 +08:00
    python 躺枪
    wwg1994
        57
    wwg1994  
       2020-12-08 09:04:46 +08:00
    十几万的统计工作而已,python 用 pandas 试试?
    dawniii
        58
    dawniii  
       2020-12-08 09:06:05 +08:00 via iPhone
    这不是离线任务吗?找个从库,闲时去跑,就算跑的慢了影响大吗?
    yalin
        59
    yalin  
       2020-12-08 09:09:32 +08:00
    性能问题 与 语言无关
    magiclz233
        60
    magiclz233  
       2020-12-08 09:10:37 +08:00   ❤️ 1
    建议 c#
    hezeming
        61
    hezeming  
       2020-12-08 09:11:07 +08:00
    @longmeier90 统计对实时性要求应该没那么高啊,基本的定时统计,缓存完全可以解决,就算是实时查的,十几万的数据量 mysql 级别应该也没什么压力
    ming7435
        62
    ming7435  
       2020-12-08 09:11:16 +08:00 via iPhone
    10 几万就性能不行,不用换语言,换人吧
    qwerthhusn
        63
    qwerthhusn  
       2020-12-08 09:15:33 +08:00   ❤️ 1
    一个诊所就能把 CPU 干翻????你这是啥诊所,梅奥诊所吧
    lydzz
        64
    lydzz  
       2020-12-08 09:16:09 +08:00
    主要讨论谁是世界上最棒的语言
    ihipop
        65
    ihipop  
       2020-12-08 09:19:35 +08:00 via Android
    @miniliuke 天下 Web 领域 Java 占 90%?有数据来源没?
    lesterchen
        66
    lesterchen  
       2020-12-08 09:22:13 +08:00
    所以用 python 的遇到点问题,就推锅到 python 身上。
    hahaba
        67
    hahaba  
       2020-12-08 09:22:53 +08:00
    你的业务量比豆瓣更大的话,当我没说。
    如果没有,则不是 python 的瓶颈,是人的瓶颈。
    可以招我过去优化优化,哈哈
    blless
        68
    blless  
       2020-12-08 09:26:36 +08:00 via Android
    选 go,直接用开发 python 的思维写就好。如果有一个好的 java 技术经理选 java
    liujavamail
        69
    liujavamail  
       2020-12-08 09:31:52 +08:00
    你们是不是数据库的设计问题, 就是没有用一些冗余的字段,去存储一下你们统计需要查询的数据,导致每次都要先查数据出来,然后用 python 做计算,如果数据全部用 python 来计算,那肯定是会慢的,即使你们换语言了, 随着数据量的增大,还是会遇到同样的问题
    lyz1990
        70
    lyz1990  
       2020-12-08 09:32:23 +08:00
    看这个描述,感觉不是语言问题
    chouchoui
        71
    chouchoui  
       2020-12-08 09:33:09 +08:00
    Java
    某公司技术栈在国内突出一个吹
    krixaar
        72
    krixaar  
       2020-12-08 09:33:10 +08:00
    十几万这个数量级用 Excel 都能搞定,Python 算半天是不是得优先考虑下是不是哪里写得有问题?
    Vibra
        73
    Vibra  
       2020-12-08 09:33:58 +08:00
    你确定你们一个诊所 python 性能不够? Instagram 用的也是 python 哦
    RangerWolf
        74
    RangerWolf  
       2020-12-08 09:41:17 +08:00
    如果是涉及到数据统计处理,我们是读取出来之后用 pandas 来扛~ 速度毫无压力
    tabris17
        75
    tabris17  
       2020-12-08 09:42:49 +08:00
    你需要的是一个数据仓库
    x2009again
        76
    x2009again  
       2020-12-08 09:43:14 +08:00
    建议 java 或者.net我以前就参与了.net 做的医疗系统,预约挂号、会诊、化验、出化验诊断、库存、费用结算等模块都有。
    zone10
        77
    zone10  
       2020-12-08 09:46:42 +08:00
    盲猜是用 Python 循环导致慢了,十几万用 Python 的 Pandas 还是港港单单的,记住要用矢量计算别用循环
    sam014
        78
    sam014  
       2020-12-08 09:46:51 +08:00
    用 Java 的话,会不会出现团队人数*2 的情况 ??
    wccc
        79
    wccc  
       2020-12-08 09:47:16 +08:00
    可以先考虑业务优化的....
    matrix67
        80
    matrix67  
       2020-12-08 09:47:22 +08:00
    统计直接 elk 就行了,买机器哈哈
    Yano
        81
    Yano  
       2020-12-08 09:50:02 +08:00
    说实话,Java 和 go 都可以,如果性能的话几乎都差不多。我看你的描述还有 公众号、小程序、挂号-做检查-收费-开药一系列操作,那其实 Java 更好一点,因为毕竟生态更多,毕竟发展这么多年了,Spring boot 一把梭😁
    seven123
        82
    seven123  
       2020-12-08 09:50:02 +08:00
    感觉慢应不是 python 的问题吧,几十万就这样了?
    zunceng
        83
    zunceng  
       2020-12-08 09:50:25 +08:00
    看你们团队组成吧 四年前我们选了 go 不说项目写的多好 至少 hold 住了业务
    四年后你问我当然是选 Golang,因为我根本不会 java
    tcfenix
        84
    tcfenix  
       2020-12-08 09:53:20 +08:00
    @chevalier
    每个人都有自己的屁股, 比如如果楼主是技术主管或者公司老板,那么看问题应该优先看哪个成本低, 出活快,底下人的技术成长老板又不在乎

    但是我们看到楼主好像就是一个打工的, 那么选择技术栈就有两条线了,
    一条是明线, 说服老板这个技术好,市场上好招人,性能好,轮子多
    一条是暗线,就是楼主跟几个小伙伴都有这个共识主推这个语言,后续跳槽的时候市场上工作好找

    python 在现在市场上面比较多的岗位是爬虫, 总得职位量跟楼主举得这两个例子完全没有可比性, 而且如果楼主或者其他人未来想去大厂的话,这两个语言几乎包括了所有大厂的服务端岗位, 而招聘 python 的大厂岗位非常有限
    resist
        85
    resist  
       2020-12-08 09:55:04 +08:00
    考虑那么多做什么,选 Java 错不了,Java 便宜兄弟
    x940727
        86
    x940727  
       2020-12-08 09:55:22 +08:00
    十几万的数据而已,放哪算都产生不了啥压力吧?给服务器换个好点的固态。
    wxw752
        87
    wxw752  
       2020-12-08 09:55:34 +08:00
    同医疗行业,我们后端用的 java
    longmeier90
        88
    longmeier90  
    OP
       2020-12-08 09:56:19 +08:00
    @zone10 谢谢大佬指点
    longmeier90
        89
    longmeier90  
    OP
       2020-12-08 09:58:50 +08:00
    @tcfenix 分析的好,我就是一个搬砖的。
    JokeEnd
        90
    JokeEnd  
       2020-12-08 09:59:35 +08:00
    10+w 数据怎么可能是语言的瓶颈,优化下代码看看
    neptuno
        91
    neptuno  
       2020-12-08 10:02:32 +08:00
    才十几万数据,,,,估计是之前程序员代码写的有问题吧,你们没找到真正问题在哪的话,,换 go 和 java 一样慢的
    SmiteChow
        92
    SmiteChow  
       2020-12-08 10:06:11 +08:00   ❤️ 1
    Python 慢为什么不优化?我还没见过 Python 慢到不能用的场景。
    securityCoding
        93
    securityCoding  
       2020-12-08 10:07:30 +08:00
    跟语言没啥关系啊 , 是不是 10+w 数据实时 loading 到内存再计算? 那样谁来都慢啊,更多是实现方案的问题,这点数据量还谈不上架构
    tailf
        94
    tailf  
       2020-12-08 10:09:20 +08:00   ❤️ 2
    #1 的回复是非常优秀的代表。

    #3 的回复是最傻逼的那种。

    希望我们都学习一楼,唾弃三楼。
    wysnylc
        95
    wysnylc  
       2020-12-08 10:13:38 +08:00
    你看,py 和 go 都迫不及待的宣传自己
    所以你选什么自己知道吧
    fx
        96
    fx  
       2020-12-08 10:16:09 +08:00
    Elixir
    nano91
        97
    nano91  
       2020-12-08 10:18:43 +08:00
    十几万就慢了 那八成就是编码和数据库的问题了 先定点再优化吧 换啥都没用
    SjwNo1
        98
    SjwNo1  
       2020-12-08 10:18:46 +08:00
    我也还没见过 Python 慢到不能用的场景~
    mamahaha
        99
    mamahaha  
       2020-12-08 10:19:14 +08:00
    porn 站随时得有上百万的吞吐吧?如果卡顿肯定早凉凉了,人家是用 PHP 做的,PHP 可是在鄙视链最底层的存在了,可见选啥语言对服务能力影响不大。
    salmon5
        100
    salmon5  
       2020-12-08 10:19:50 +08:00
    “go 性能好,用 go”
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   960 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:08 · PVG 05:08 · LAX 13:08 · JFK 16:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.