问题:为什么网上看到的node.js用来操作数据库一般都是非关系型数据库,关系型数据库(mysql)很少?
应该用的比较多的也就 mongodb 了吧。
我想主要原因是,mongodb 使用的是一种类似 json 的 bson 作为存储和传输格式,而 js 对这种格式的解析又很友好;此外 mongodb 官方提供 nodejs 的驱动
5 回答4.8k 阅读✓ 已解决
5 回答3.2k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
5 回答1.4k 阅读
不知道有没有听说过“全栈程序员(Full stack)”的说法,这要求你从前端到后端都要能够一个人完成。如果能力够强,当然可以随意搭配前后端技术。问题是对于大多数人而言学习成本太高,所以“全栈程序员”的段位就比较难以达到。如果要在一定程度上降低难度,达到“全栈程序员”的一条路径可以是MEAN Stack,分别是指:
因为全部是以JS为基础,你就可以以一种语言吃遍前后端,一定程度上减少了学习负担和需要记忆的东西。
换个角度想,因为前端无论如何跑不出JS的手掌心,后面的技术栈多一种语言就多一些负担。从最省事的角度,当然是选择JS做服务端和JS操作数据库了。这样一来顺理成章的选择就是NodeJS+MongoDB。
另外从适应性的角度,JS对业务逻辑的描述能力并不强,有些人甚至认为其语法反人类(虽然我并不同意),也不适用于计算密集型的场景。它的优势在于并发能力强,适用于I/O密集型的场景。所以一个项目一旦选择了NodeJS,一般来说代表你更在乎的是并发能力。相较于关系数据库,MongoDB为代表的非关系数据库显然具备并发能力和水平扩展能力上的优势,那么它与NodeJS的搭配也就更合情合理一些。
反过来从后往前看,如果一开始决定了数据库必须使用关系数据库,多半因为涉及强事务或者复杂的关系。在这样的场景下逻辑通常会比较复杂,基于前面的原因(逻辑描述能力不强),选择后端语言的时候就多半不会选择NodeJS。
另外,逻辑复杂但是不涉及事务或复杂关系的情况也是存在的。如果一个项目的业务逻辑比较复杂,那一开始多半不会选择NodeJS,而是Java/C#/PHP之类。这时候后端的数据库其实并没有明确限制,只要适用就好。这种情况下你就会发现这些语言无论跟关系数据库或者MongoDB的搭配都很常见,取决于你自己对哪种更熟悉。
总之,你看到NodeJS搭配RDBMS比较少,是因为大部分时候这样的搭配没有道理。