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

2020-08-28 18:03:11 +08:00
 yukiball
老板想让前端也承接一部分后台业务,身为一名前端推荐了 node,并说了 node 的缺点和优点,引起了老板如题的发问。有没有大佬能协助探讨下这个问题 QAQ
7662 次点击
所在节点    Node.js
48 条回复
yukiball
2020-08-28 18:05:16 +08:00
如果不能说服老板,就要去学 Java 了……
anjianshi
2020-08-28 18:07:30 +08:00
js 、python 、php 这些脚本语言类的都不适合性能要求特别高的场景吧。
可以性能要求高的地方用传统后端语言,普通场景用 node.js
yukiball
2020-08-28 18:14:03 +08:00
@anjianshi 想的是只有表层用 nodejs 去接,数据库还是由 Java 的人去查。然后老板就问为啥 node 为什么对关系型数据库支持没有 Java 好……
stabc
2020-08-28 18:17:32 +08:00
先问是不是
cco
2020-08-28 18:18:11 +08:00
啥语言都能搞定吧,只不过是轮子多少的问题
keygen88
2020-08-28 18:20:48 +08:00
NODE.JS 的主线程都会有一个 EVENT LOOP 在监听事件,如果做计算密集性的工作,CPU 一直在计算,肯定没有时间去检查事件了。
MyFaith
2020-08-28 18:21:44 +08:00
直接 Golang 一把梭
azh7138m
2020-08-28 18:23:19 +08:00
这是多大的体量,能遇到 node 的性能问题?
coderxy
2020-08-28 18:26:40 +08:00
nodejs 为什么对关系型数据库支持不好?
其实支持的并不是不好,该有的都有
nodejs 为什么不适合 CPU 密集型应用?
因为 node 的主线程是一个单线程,如果执行 cpu 密集型任务会堵住。
coderxy
2020-08-28 18:27:26 +08:00
按照你的设想,其实你想做的就是 BFF, 这一层拿 node 做没毛病。我们公司就是这么做的,效果很好。前端可以自己写接口,而且灵活性也很强
optional
2020-08-28 18:33:56 +08:00
JAVA 对关系型数据库支持好??????
mybatis 本质上还是写 sql
jpa,hibernate 太多限制,功能稍微复杂点还不如写 sql 。
zengming00
2020-08-28 18:34:42 +08:00
不知道是怎么得出来的对关系型数据库支持不好,如果你用 mongo 那和 node 配合起来简直爽得不行
node 不适合 cpu 密集型?这个要看场景,主要是因为 node 在 js 这一层是单线程的,就是说虽然它 IO 是能异步并发执行,但是当异步回调时一次只执行一个回调,如果你写个死循环那么 node 就会被卡死,如果你的代码特别复杂那么就会占用太多的时间,导致其它的回调在后面排队
如果你的需求简单,那么它也是适合密集型计算的,v8 对 js 的优化还是很厉害的,不是说不适合就一定不能用
wangyzj
2020-08-28 18:35:49 +08:00
后半句一般情况下正确
silenzio
2020-08-28 18:37:10 +08:00
结论: nodejs 用户层单线程 + 异步 io 适合 io 密集型 不适合计算密集型
具体查 nodejs 的模型
可以参考<深入浅出 node.js>
yukiball
2020-08-28 18:37:57 +08:00
@keygen88 get~
optional
2020-08-28 18:39:52 +08:00
@optional 嗯,如果说 transaction,线程+Threadlocal 确实比异步的 node 方便很多。
yukiball
2020-08-28 18:48:25 +08:00
@zengming00 get~百度一下好多说缺点是对关系型数据库支持不好的_(:з」∠)_我其实也想用 Mongo 但是老板说是要和公司统一,要用 SQL 。哎,,,,
laminux29
2020-08-28 18:52:48 +08:00
1.有些公司的后台业务,会存在一部分甚至大部分很简单的需求。其特点是由简单的业务流程 + CURD 组成的。这部分需求,正常的前端程序员,就算是用 js,也能拿下来。这就是前后端程序员在这个问题的核心所在。

2.其次,非贬义,同样能力的前端与后端,对于老板来说,前端的价格会便宜些。那么用前端来做这些简单的后端活,性价比更好。这是老板在这个问题的本质所在。

3.在工程界,关系型数据库,默认对 java/C#这类偏业务类的语言或环境,支持度更好,更原厂一些。就连 C 、C++的支持度都没 java/C#好。因此,并不是说 nodejs 对关系型数据库支持不好,而是关系型数据库,对于除了 java/C#之外,支持度都是辣鸡。这是你的第一个问题。

4.python/node/php/java/C#等等,这类语言特点是偏向业务,实现业务需求比 C/++快,但对于计算机设备会有额外的性能损耗。CPU 密集型需求,一般情况下,在前期方案选型时,就会选择节约性能的语言,比如 C 、C++。很多公司虽然前期会用 python/node/php 等进行快速探路,一旦探路成功,规模起来后,大多会改为 C/C++。比如脸书就是个例子。
misaka19000
2020-08-28 18:54:13 +08:00
现阶段带虚拟机的语言除了 Java 之外 CPU 使用效率都不高
love
2020-08-28 19:46:52 +08:00
现在都是多进程,单线程不影响性能,最新 node 也开始支持进程内多线程 worker 。
另外 js 性能在动态语言里是顶尖的,比 java 差不了太多。
类型有 typescript,动静结合,类型表达能力比 java 更灵活。

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

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

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

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

© 2021 V2EX