node.js数据库[关闭]


115

我正在寻找与node.js应用配对的数据库。我假设使用json / nosql数据库比使用关系数据库更好[我可以在没有json / sql阻抗不匹配的情况下进行操作]。我正在考虑:

  • 长沙发
  • mongodb
  • Redis

任何人对node.js的看法/战争故事是否具有上述兼容性/可部署性?有明确的收藏夹吗?


2
如果提到更广泛的要求,我认为回答这个问题会有所帮助。每个数据库都有自己的优缺点。让我们知道规格!
Samyak Bhuta

Answers:


79

我是node.js的mongodb驱动程序的开发人员。我正在为自己的项目使用mongodb,并且对mongodb的性能非常满意。

适用于node.js的Mongodb驱动程序

(无耻的插头)请随时询问有关驱动程序的任何问题

适用于mongodb驱动程序的Google组

或在这里Stackoverflow

玩转node.js。我绝对喜欢这个平台:D


1
还看了猫鼬,这是一个相当不错的ORM,它建立在node.js的mongodb驱动程序之上/使用mongodb驱动程序
taxilian 2011年

2
我们使用Node.js + MongoDB已有相当长的一段时间了,并且进展顺利。并对@christkv表示完全的敬意,驱动程序坚如磐石,不会让您失望。我们已经在EC2上轻松部署了node.js / express.js + mongodb。另外,请注意,我们不使用猫鼬。谈到挑战(假设您已经精通Node),对于任何认真的应用程序或服务开发,您都需要擅长Mongo的处事方式(查询和聚合)。如果您仍处于评估阶段,那么应该首先了解Mongo与其他DB有何不同。
Samyak Bhuta 2011年

据我了解,一些非常酷的功能即将出现,以加快mongodb中的聚合。其中之一是本机聚合功能。 slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 ,并且可能会切换为v8而不是JavaScript引擎的spidermonkey,这将允许每个map-reduce命令在其自己的线程中运行(再见单线程map-reduce )
christkv 2011年

25

尽管您的选择很大程度上取决于要使用的功能,但我非常感谢CouchDB的本机JavaScript环境。数据和视图都是用JavaScript编写的,因此我认为它非常适合node.js。

也有不同的客户端库可用,一些是较低级别的,其他的确实非常抽象。

但是正如我所说,您还应该考虑数据库所需的功能。


18

Redis是一个流行的选择。您所追求的是一个不会阻塞的数据库驱动程序。

您列出的数据库完全不同。Redis想到了键值存储的想法并与之一起运行,从而增加了各种数据类型和查询数据的方式。人们经常注意到redis的缩放比例也很好。意味着尽管具有执行能力,但开销却非常低。

以下是可用数据库模块的列表:http : //wiki.github.com/ry/node/modules#database


是的,Redis很棒,但似乎我们可以存储二进制数据,但无法检索!至少我找不到二进制数据的Redis命令。
AppleGrew

真?我曾经存储二进制数据(使用Node的Buffer类),并且运行良好。什么版本的Redis / Node?
DanielS 2011年

12
默认情况下,node_redis将返回所有命令的JavaScript字符串。要获取缓冲区,请使用createClient(port,host,{return_buffers:true});创建一个客户端。
马特·拉尼

4
@MattRanney,您的保存节省了我更多的挖掘时间!我在node-Redis文档中的任何地方都没有看到它,而且实际上节省了5个小时的时间。此刻,我的欣赏是无限的。
ghayes

从理论上讲,这听起来不错,但举一个实际的例子,您有一个JSON API,每20秒查询一次,它返回一个数组,您想缓存这个,您还愿意使用Redis吗?也必须通过该数组进行模糊搜索
PirateApp '17

15

我真的很喜欢CouchDB。这是一个学习曲线,但是一旦您了解了如何使用视图,它们就会非常强大。github和npm 有一个名为cradle的模块,确实很容易使用。我还无法测试它的速度,但是它确实很灵活(您也可以在浏览器中访问数据)。

这里的主要问题是哪种数据库设计对您的应用程序有意义。您是否拥有本质上主要是键值的数据?如果是这样,请使用Redis。您是否有并非所有文档都必须具有相同字段的数据?如果是这样,请使用NoSQL数据库(例如CouchDB)。

使用阻塞数据库的下一个更糟糕的事情是为您的数据使用了错误的数据库。CouchDB由Apache管理,因此您知道它的质量很好,但是如果您的数据在SQL表或简单的键值存储中更有意义,那么使用它就没有意义。

考虑一下您的用例。您是否更可能希望进行全文搜索,仅通过键获取数据或获取具有相似属性的文档范围?


8

可能想签出Persistence,这是node.js的高级持久性/数据库系统。

来自thechangelog.com

持久性是一个允许高级API在流程运行之间持久化数据的项目。目标是支持易于使用,功能强大,灵活的后端,或者尽可能支持所有上述后端。

支持的数据库包括:

  • PostgreSQL-企业级关系数据库。该驱动程序以纯JavaScript实现,并使用PostgreSQL有线协议通过TCP进行通信。
  • Sqlite3-一个简单,快速,无服务器的关系数据库。该驱动程序是命令行sqlite3程序的包装。它要求sqlite3在路径中。通讯速度非常快,但是类型不是很精确。仅返回字符串和空值。
  • MongoDB-一个可扩展的,高性能,开源,无模式,面向文档的数据库。该驱动程序还用JavaScript实现了有线协议,并通过TCP与服务器通信。
  • JSON-DB-一种本地开发的,无模式的,面向文档的数据库,该数据库使用包含JSON对象的简单平面文件。除了节点和文件系统外,这根本没有要求。性能要在完全实施后才能确定。

13
自2010年3月以来,持久性尚未更新,而其版本为0.0.4,因此它似乎已被放弃。
缺少


3

我不确定正确的解决方案是只专注于将数据库映射到您的Web堆栈,还是要考虑特定于应用程序的需求。

您是否正在分析Twitter提要或其他大量数据的模式,但不需要事务支持?然后快速选择一些东西。

您是否只想在一些表中存储一些真正的基本信息,而当前它不是“以企业为中心”的应用程序?然后选择一些很酷的东西学习。

也许您将存储对客户端真正重要的数据,健壮的数据,需要进行事务处理的数据以及实时复制到远程托管设施等的数据。然后也许考虑使用诸如postgresql之类的数据。它也不会镜像,但是node.js驱动程序工作得很好,如果您不死于sql,那么它很容易就能获得所需的内容。

就我个人的观点而言,我认为使用像node.js(相对于php / java中的传统框架)这样的较新堆栈会增加足够的“新”复杂性,因此不应一次添加所有额外的层。这是一篇很好的文章,讨论了以下内容:

http://nodeguide.com/convincing_the_boss.html


2

我将根据我的经验进行发言:CouchDB具有明确的学习曲线,而我发现MongoDB非常易于学习和设置。我从未使用过redis。我建议使用MongoDB-但这也许是无耻的狂热-我没有数字,呵呵,只是声称易于使用。


1

脏是另一个平面文件键值存储。顾名思义,它是用于简单案例的快速而又肮脏的解决方案。我不是作者:)



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.