nodejs 为什么对关系型数据库支持不好? nodejs 为什么不适合 CPU 密集型应用?

2020-08-28 18:03:11 +08:00
 yukiball
老板想让前端也承接一部分后台业务,身为一名前端推荐了 node,并说了 node 的缺点和优点,引起了老板如题的发问。有没有大佬能协助探讨下这个问题 QAQ
7713 次点击
所在节点    Node.js
48 条回复
yukiball
2020-08-31 10:18:46 +08:00
感谢各位大佬的回复~Thanks♪(・ω・)ノ
jifengg
2020-08-31 18:12:36 +08:00
哪一门语言好,还是要建立在你对它的熟悉程度,如果楼主是前端,对 js 很熟悉,那么转后端,非常建议用 nodejs 。
libook
2020-09-02 13:40:57 +08:00
这两个问题如果从字面上理解的话,其前提都是假命题。

Node.js 在哪些方面对于哪些关系型数据库支持不好?数据库驱动其实只需要实现 Socket 通信、实现特有通信协议、发送指令( SQL 字符串)、反序列化返回结果就可以了,Node.js 一开始就支持 Socket 通信(net 模块),通信协议是纯逻辑的只要是图灵完备语言都能实现,字符串任何编程语言都支持,反序列化完全就是按照本身语言特性来设计的。现在主流数据库 Node.js 都有对应的驱动包,有的甚至是数据库官方提供的。

如何定义“CPU 密集型”?如果指的是多线程多进程的话,那 Node 完全没问题;但如果单纯看执行效率的话,没啥语言能比得过汇编、C 、C++、Rust 等编译型系统开发语言吧( Java 的性能也并不比 Node 好多少( https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/javascript.html),跟系统开发语言来比仍然有很大距离)。而且因为 Node.js 内的 V8 是支持 WebAssembly 的,以及 Node 自己支持 N-API,核心对计算性能要求较高的模块(一般要求高性能的部分都是很少的一部分)可以用 C/C++、Rust 来实现,然后由 Node.js 调用,早年做区块链的很多公司就是这么搞的。

如果捋一遍目前最新版的 Node 的文档,可以发现现在 Node 能干以前干不了的很多事了。

我觉得前端干后端的活的问题从来不是工具、语言、引擎、框架的问题,而是后端架构思想、中间件、DevOps 、SRE 方面知识不足的问题,现在没有任何一个成规模的系统是只用一门语言就可以做得很好的,多种语言、多种中间件、多种架构思想各自发挥各自的优势才能让整体系统处于最佳状态(同时降成本降到最低)。

想说明老板,可以让老板提出几个指标(比如硬件资源、并发量、相应速度、开发周期等指标),然后你再去调研 Node.js 现阶段是否能让你们实现这些指标,能的话就直接用 Node.js 试试,用数据来说话。
或者让老板把担忧说明白一些,然后你可以做一些 Demo 来证明他可以不用担忧。
haijianyang
2020-09-15 15:49:01 +08:00
根据具体的业务场景选择语言,Node.js 的特点是适合网络 I/O 密集型应用,开发效率高,轻量级,如果有 CPU 密集型场景用 Go 。
https://shimo.im/slides/r8jXRvtTgx6jxC9j
leekafai
2020-09-18 16:12:54 +08:00
其实这两个问题跟 nodejs 没有什么关系
用不用关系型数据库是你的业务决定的,如果你要做一个日志系统,那用文档数据库可能更顺手。
你的业务中存在很重的运算需求,才需要去考虑可能存在的技术天花板,例如你是做图片处理,长文本分词这种,那肯定要对比下其他语言( nodejs 下有 c 的分词库跟很不错的图形库)。
技术选型脱离了业务需求肯定是要掉坑的,把时间精力花在最重要的业务核心上比较重要。
zy445566
2020-09-24 11:42:01 +08:00
数据库支持很好啊
https://www.expressjs.com.cn/guide/database-integration.html
CPU 密集照样干: https://www.v2ex.com/t/705067
而且异步加解决 CPU 密集,性能又能上一个档次
zy445566
2020-09-24 11:52:26 +08:00
接着上一条,这个是白话异步讲解异步模式的优势: https://www.zhihu.com/question/59739941/answer/182109996
当然 node12 自从推出多线程,就可以使用多线程加异步来解决 CPU 密集问题了
oliver2bao
2020-11-17 11:11:51 +08:00
我看到第一问,我就疑惑了,nodejs 操作什么数据库不都一样吗?大家都是操作数据库的接口实现的库,只是实现语言不一样罢了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/702273

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX