关系数据库是否适合Node.js?

Mat*_*aly 59 relational-database node.js

最近我一直在玩Node.js.在我的特殊情况下,我最终使用MongoDB,部分原因是因为它非常简单,部分原因是Mongoose似乎是一种非常简单的开始使用它的方法.

我注意到在使用Node.js时似乎对关系数据库有一定程度的反感.与Node.js生态系统中的非关系数据库相比,它们似乎得不到很好的支持,但我似乎无法找到一个简明的理由.

所以,我的问题是,是否存在一个可靠的技术原因,为什么关系数据库比使用MongoDB等替代方案更适合使用Node.js?

编辑:只是想澄清一些事情:

  • 我特别没有找到与我正在构建的特定应用程序相关的详细信息
  • 我也不是在寻找非技术原因(例如,我不是在回答"Node和MongoDB都是新的,所以开发人员一起使用它们")

我正在寻找的只是技术上的原因.例如,如果有一个技术上的原因,为什么关系数据库在与Node.js一起使用时表现异常糟糕,那么这就是我正在寻找的那种东西(请注意,到目前为止,从答案来看似乎不是案子)

Jon*_*ski 32

不,没有技术原因.这主要是意见,使用NoSQL与Node.js目前是一个受欢迎的选择.

当然,Node的生态系统主要是由社区驱动的.Node的核心API之外的一切都需要社区参与.而且,当然,人们更有可能支持与个人偏好相符的东西.

但是,许多人仍然使用和支持Node.js的关系数据库.一些值得注意的项目包括:

  • @AlexanderMills数据库类型之间肯定存在差异,但这并不意味着关系数据库不适合与Node.js一起使用. (4认同)
  • 这可能是我所看到的最可悲的答案之一-MongoDB与RDBM之间存在巨大的技术差异,等等。 (2认同)

Ale*_*lls 24

我喜欢Node.js,但是使用Node实际上使用RDBM 更有意义,而不是非关系数据库.使用noSQL /非关系解决方案,您经常需要在Node.js代码中进行手动连接,有时需要处理缺少事务,这是具有提交/回滚功能的RDBM的技术特性.以下是使用非关系DB + Node.js服务器的一些潜在问题:

(a)连接速度较慢,响应速度较慢,因为Node不是C/C++

(b)昂贵的连接会阻塞你的事件循环,因为连接发生在你的Node.js代码中而不是某些数据库服务器上

(c)手动编写连接通常很困难且容易出错; 您的noSQL查询很容易出错,或者您的加入代码可能不正确或次优; RDBM的主人之前已经完成了优化连接,并且在大多数情况下,RDBM中的连接被证明是正确的,在数学上是正确的.

(d)一些非关系数据库,如MongoDB,支持事务 - 在我的团队的情况下,这意味着我们必须使用外部分布式锁,以便可以将多个查询组合在一起形成原子事务.如果我们可以只使用事务并避免应用程序级锁定会更容易一些.

使用更强大的关系数据库系统,可以在数据库服务器上而不是在Node.js代码中对C/C++进行优化连接,让Node.js服务器做到最好.

话虽如此,我认为许多主要的noSQL供应商不支持连接是非常愚蠢的(?)就我所见,完全去规范化只是一个梦想.缺乏交易可能有点奇怪.没有事务,只有一个查询是原子的,没有应用程序级别的锁定机制,你不能使多个查询原子化:/

外卖:

如果您想要非关系持久性 - 为什么不简单地对关系数据库进行反规范化?没有人强迫您以关系方式使用传统数据库.

如果你使用Node.js的关系数据库我推荐这个ORM:https: //github.com/typeorm/typeorm

顺便说一句,我更喜欢"非关系"一词而不是"noSQL".


小智 12

根据我的经验,节点往往受到具有无状态API的数据库的欢迎,这非常适合节点异步性质.大多数关系数据库利用有状态连接进行事务处理,这最大限度地减少了异步非块i/o的主要优点.


Mun*_*nim 10

您能否准确解释您所选择的数据库和node.js面临的具体问题?

MongoDB比关系数据库更受欢迎的几个原因:

  • MongoDB本质上是一个JSON对象存储,因此它可以很好地转换为javascript应用程序.MongoDB函数是javascript函数.

  • 我只是在这里猜测,但由于NoSQL数据库更新,并且有更多热情的程序员在尝试它,你可能更多地参与这些NPM模块.

除此之外,Node.js在技术上是任何类型的数据库应用程序的完美选择.我个人在一个小的Node.js/MySQL应用程序上工作,我没有遇到任何障碍.

但回到我的主要观点,我们可以整天谈论这个问题,而这不是本论坛的用途.如果您在使用Node.js和您选择的数据库的任何代码中遇到任何特定问题,请提出相关问题.

编辑:严格的技术原因,除了双方的JSON兼容性:没有.

  • @MatthewDaly严格的技术原因,除了双方的JSON兼容性之外:没有。随时将Node.js与关系数据存储一起使用。只要它像MySQL或PostgreSQL这样流行,就不会遇到任何问题。 (2认同)