1
yukiball OP 如果不能说服老板,就要去学 Java 了……
|
2
anjianshi 2020-08-28 18:07:30 +08:00 1
js 、python 、php 这些脚本语言类的都不适合性能要求特别高的场景吧。
可以性能要求高的地方用传统后端语言,普通场景用 node.js |
3
yukiball OP @anjianshi 想的是只有表层用 nodejs 去接,数据库还是由 Java 的人去查。然后老板就问为啥 node 为什么对关系型数据库支持没有 Java 好……
|
4
stabc 2020-08-28 18:17:32 +08:00
先问是不是
|
5
cco 2020-08-28 18:18:11 +08:00
啥语言都能搞定吧,只不过是轮子多少的问题
|
6
keygen88 2020-08-28 18:20:48 +08:00
NODE.JS 的主线程都会有一个 EVENT LOOP 在监听事件,如果做计算密集性的工作,CPU 一直在计算,肯定没有时间去检查事件了。
|
7
MyFaith 2020-08-28 18:21:44 +08:00
直接 Golang 一把梭
|
8
azh7138m 2020-08-28 18:23:19 +08:00
这是多大的体量,能遇到 node 的性能问题?
|
9
coderxy 2020-08-28 18:26:40 +08:00
nodejs 为什么对关系型数据库支持不好?
其实支持的并不是不好,该有的都有 nodejs 为什么不适合 CPU 密集型应用? 因为 node 的主线程是一个单线程,如果执行 cpu 密集型任务会堵住。 |
10
coderxy 2020-08-28 18:27:26 +08:00
按照你的设想,其实你想做的就是 BFF, 这一层拿 node 做没毛病。我们公司就是这么做的,效果很好。前端可以自己写接口,而且灵活性也很强
|
11
optional 2020-08-28 18:33:56 +08:00 via Android
JAVA 对关系型数据库支持好??????
mybatis 本质上还是写 sql jpa,hibernate 太多限制,功能稍微复杂点还不如写 sql 。 |
12
zengming00 2020-08-28 18:34:42 +08:00 1
不知道是怎么得出来的对关系型数据库支持不好,如果你用 mongo 那和 node 配合起来简直爽得不行
node 不适合 cpu 密集型?这个要看场景,主要是因为 node 在 js 这一层是单线程的,就是说虽然它 IO 是能异步并发执行,但是当异步回调时一次只执行一个回调,如果你写个死循环那么 node 就会被卡死,如果你的代码特别复杂那么就会占用太多的时间,导致其它的回调在后面排队 如果你的需求简单,那么它也是适合密集型计算的,v8 对 js 的优化还是很厉害的,不是说不适合就一定不能用 |
13
wangyzj 2020-08-28 18:35:49 +08:00
后半句一般情况下正确
|
14
silenzio 2020-08-28 18:37:10 +08:00
结论: nodejs 用户层单线程 + 异步 io 适合 io 密集型 不适合计算密集型
具体查 nodejs 的模型 可以参考<深入浅出 node.js> |
17
yukiball OP @zengming00 get~百度一下好多说缺点是对关系型数据库支持不好的_(:з」∠)_我其实也想用 Mongo 但是老板说是要和公司统一,要用 SQL 。哎,,,,
|
18
laminux29 2020-08-28 18:52:48 +08:00 1
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++。比如脸书就是个例子。 |
19
misaka19000 2020-08-28 18:54:13 +08:00
现阶段带虚拟机的语言除了 Java 之外 CPU 使用效率都不高
|
20
love 2020-08-28 19:46:52 +08:00 1
现在都是多进程,单线程不影响性能,最新 node 也开始支持进程内多线程 worker 。
另外 js 性能在动态语言里是顶尖的,比 java 差不了太多。 类型有 typescript,动静结合,类型表达能力比 java 更灵活。 |
21
iseki 2020-08-28 20:40:58 +08:00
@optional JavaScript 不是有 async/await 吗,单论访问数据库这个比 Java 的 Thread 模式好; ThreadLocal 也许是个问题,但是我觉得也不是不能忍。
|
22
ochatokori 2020-08-28 20:44:01 +08:00 via Android
都 2020 年了,nodejs 早就支持多线程多进程了
|
23
JerryCha 2020-08-28 21:12:34 +08:00
@zengming00 mongo 不是关系型数据库吧
|
24
IssacTomatoTan 2020-08-28 21:18:59 +08:00 via Android
解决的方法总比问题多,公司也主推 Java, 作为前端的我还在孜孜不倦的找机会推荐 nodejs 也上了几个项目效果也挺好的。但是真的能玩起来的前端没几个。
|
26
lihongming 2020-08-29 01:55:24 +08:00 via iPhone
不是很理解为什么数据库与用什么语言还有关系?
数据库不是个独立系统吗?各种语言调用它的 API 来存取数据。 |
27
fortunezhang 2020-08-29 04:06:53 +08:00 via Android 1
如果你只会 node,反而我觉得应该继续用 node,语言只是一种工具,学习其他语言需要的时间和精力足可以让你在 node 上深层次挖掘。这并不是让你固守己见,学习新知识更多的利用业余时间,当你拿出来的时候,它更应该是一把利器。
|
28
forgottencoast 2020-08-29 08:02:55 +08:00
@zengming00
1 、MongoDB is a cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with optional schemas. 2 、CPU 密集型应用就是场景了,还要看什么场景。不合适就是不合适,nodejs 优点就是对异步的支持,CPU 密集型应用使用异步还是同步对性能也根本不会有太大的影响。 |
29
ho121 2020-08-29 08:13:37 +08:00 via Android
老板可能就是想让你写 java
|
30
KuroNekoFan 2020-08-29 08:28:27 +08:00 via iPhone
可能国内的在做技术选型的人就是不喜欢 js,如果关注一下 nodejs 在服务端的应用,单就外国来说,实践(文章)还是很多的,当然我不在国外,也只是臆测
|
31
Cbdy 2020-08-29 08:51:28 +08:00 via Android
node 对关系数据库支持挺好的
|
32
yazoox 2020-08-29 10:01:11 +08:00
@zengming00 #12 请教一下。为啥都说 node 在 js 上是单线程的?其他语言不也一样么?
想多线程,createthread 啊,不都是这么解决的么? |
33
black11black 2020-08-29 10:08:47 +08:00
@KuroNekoFan 生态还是一般,总结起来属于,做都可以做,但是没必要
|
34
lihongming 2020-08-29 10:25:24 +08:00 via iPhone
@KuroNekoFan 来到北美才发现,除 FLAG 这种开源领导者以外,普通企业中最流行的是.Net 。Node 比国内流行一些,但也不如用 Ruby 的多。
|
35
KuroNekoFan 2020-08-29 10:36:50 +08:00
@black11black @lihongming 总之就不是 everythin java 嘛,那就完事了😂
|
36
freshgoose 2020-08-29 10:55:42 +08:00
nodejs 的数据库 orm 还是太少,用起来也比较烦琐。能不入 nodejs 的坑就尽量不要入了。php/py/go 的生态都比 nodejs 要好
|
37
guanhui07 2020-08-29 11:19:03 +08:00
node 的框架 koa2 或 express 引入包 ,自己封装下 都可以把,不过生态确实一般
|
38
baozijun 2020-08-29 11:34:21 +08:00 via iPhone
oracle database 的话,node 要单独下个超级大的依赖包
|
39
rf99wSiT6IxH1Z23 2020-08-29 11:57:00 +08:00
node.js 搭配 mongodb 很方便,MEAN/MERN 架构 h 还是很不错的,搭配关系型数据库的不多,有 typeorm
|
40
wisetc 2020-08-29 21:19:16 +08:00 via iPhone
就告诉老板各大厂都用 nodejs 就好了,而且 nodejs 上手容易,部署简单很容易找到维护者。计算型的就不要用 nodejs 用 java,nodejs 主要用于处理异步请求,跟 nginx 的事件模型应用场景很像,高性能非阻塞是 nodejs 牛逼于 java 的地方。
|
41
yukiball OP 感谢各位大佬的回复~Thanks♪(・ω・)ノ
|
42
jifengg 2020-08-31 18:12:36 +08:00
哪一门语言好,还是要建立在你对它的熟悉程度,如果楼主是前端,对 js 很熟悉,那么转后端,非常建议用 nodejs 。
|
43
libook 2020-09-02 13:40:57 +08:00 1
这两个问题如果从字面上理解的话,其前提都是假命题。
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 来证明他可以不用担忧。 |
44
haijianyang 2020-09-15 15:49:01 +08:00
根据具体的业务场景选择语言,Node.js 的特点是适合网络 I/O 密集型应用,开发效率高,轻量级,如果有 CPU 密集型场景用 Go 。
https://shimo.im/slides/r8jXRvtTgx6jxC9j |
45
leekafai 2020-09-18 16:12:54 +08:00
其实这两个问题跟 nodejs 没有什么关系
用不用关系型数据库是你的业务决定的,如果你要做一个日志系统,那用文档数据库可能更顺手。 你的业务中存在很重的运算需求,才需要去考虑可能存在的技术天花板,例如你是做图片处理,长文本分词这种,那肯定要对比下其他语言( nodejs 下有 c 的分词库跟很不错的图形库)。 技术选型脱离了业务需求肯定是要掉坑的,把时间精力花在最重要的业务核心上比较重要。 |
46
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 密集,性能又能上一个档次 |
47
zy445566 2020-09-24 11:52:26 +08:00
接着上一条,这个是白话异步讲解异步模式的优势: https://www.zhihu.com/question/59739941/answer/182109996
当然 node12 自从推出多线程,就可以使用多线程加异步来解决 CPU 密集问题了 |
48
oliver2bao 2020-11-17 11:11:51 +08:00
我看到第一问,我就疑惑了,nodejs 操作什么数据库不都一样吗?大家都是操作数据库的接口实现的库,只是实现语言不一样罢了。
|