【问题标题】:node.js database [closed]node.js 数据库 [关闭]
【发布时间】:2011-02-14 14:14:00
【问题描述】:

我正在寻找与 node.js 应用程序配对的数据库。我假设 json/nosql 数据库比关系数据库更可取[我可以做到没有任何 json/sql 阻抗不匹配]。我正在考虑:

  • 沙发数据库
  • mongodb
  • redis

任何人对以上与 node.js 的兼容性/可部署性有任何看法/战争故事吗?有什么明确的最爱吗?

【问题讨论】:

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

标签: node.js mongodb couchdb redis


【解决方案1】:

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

Mongodb driver for node.js

(无耻的插头)请随时在

处询问有关驱动程序的任何问题

Google group for the mongodb driver

或在 Stackoverflow 上

享受 node.js 的乐趣。我非常喜欢这个平台:D

【讨论】:

  • 也看看 mongoose,它是一个相当不错的 ORM,它建立在 / 使用 node.js 的 mongodb 驱动程序之上
  • 我们使用 Node.js + MongoDB 已经有一段时间了,而且进展顺利。对@christkv 表示感谢,司机坚如磐石,不会让你失望。我们已经轻松地在 EC2 上部署了 node.js/express.js + mongodb。另外,请注意我们没有使用 Mongoose。谈到挑战(假设您已经擅长 Node),您需要擅长 Mongo 为任何严肃的应用程序或服务开发做事(查询和聚合)的方式。如果您仍处于评估阶段,那么您应该首先了解 Mongo 与其他数据库的不同之处。
  • 据我了解,一些非常酷的功能正在下线以加速 mongodb 中的聚合。其中之一是本机聚合函数。 slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 并且可能切换到 v8 而不是 javascript 引擎的 spidermonkey,这将允许每个 map-reduce 命令在它自己的线程中运行(再见单线程 map-reduce)
【解决方案2】:

虽然您的选择很大程度上取决于您要使用的功能,但我非常感谢 CouchDB 的原生 JavaScript 环境。数据和视图都是用 JavaScript 编写的,所以我认为它非常适合 node.js。

也有不同的client libraries 可用,有些比较低级,有些非常抽象。

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

【讨论】:

    【解决方案3】:

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

    您列出的数据库都非常不同。 Redis 采用了键值存储的思想并与之一起运行,增加了多种数据类型和查询数据的方式。人们经常注意到 redis 也可以很好地缩小规模。这意味着尽管有执行能力,但它的开销非常低。

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

    【讨论】:

    • 是的,Redis 很棒,但我们似乎可以存储二进制数据但无法检索!至少我找不到任何用于二进制数据的 Redis 命令。
    • 真的吗?我曾经存储二进制数据(使用 Node 的 Buffer 类),它工作得很好。什么版本的 Redis/Node?​​span>
    • 默认情况下,node_redis 将返回所有命令的 JavaScript 字符串。要获取缓冲区,请使用 createClient(port, host, { return_buffers: true }); 创建一个客户端
    • @MattRanney,您节省了我更多的挖掘时间!我在 node-Redis 文档中的任何地方都没有看到这一点,实际上时间沉没了 5 小时。此刻我的感激是无限的。
    • 理论上听起来不错,但举一个实际的例子,你有一个 JSON API,你每 20 秒查询一次它返回一个数组,你希望能够缓存它,你还会使用 Redis ?还得通过这个数组做一个模糊搜索
    【解决方案4】:

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

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

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

    想想你的用例。您是否更愿意进行全文搜索、仅通过键获取数据或获取具有相似属性的文档范围?

    【讨论】:

      【解决方案5】:

      可能想查看Persistence,node.js 的高级持久性/数据库系统。

      来自thechangelog.com

      持久性是一个允许 用于持久化数据的高级 API 进程运行之间。目标是 支持易于使用的后端, 强大、灵活或所有 如果可能,请在上面。

      支持的数据库包括:

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

      【讨论】:

      • Persistence 自 2010 年 3 月以来一直没有更新,现在是 0.0.4 版,所以它似乎已经被放弃了。
      【解决方案6】:

      免责声明:我是作者。

      也许看看BarricaneDB宣布here

      【讨论】:

        【解决方案7】:

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

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

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

        也许您要存储对客户端非常重要的数据,这些数据是健壮的、需要事务性的,并且可以实时复制到远程托管设施等。然后也许看看类似 postgresql 的东西。它也不会镜像,但 node.js 驱动程序工作得很好,如果你不是非常害怕 sql,它很容易得到你想要的输入/输出。

        就我自己的观点而言,我认为使用像 node.js 这样的更新堆栈(与 php/java 中的传统框架相比)会增加足够的“新”复杂性,以至于不应该一次添加额外的层。这是一篇很好的文章,它讨论了:

        http://nodeguide.com/convincing_the_boss.html

        【讨论】:

          【解决方案8】:

          我将从我的经验谈起:CouchDB 具有明确的学习曲线,而我发现 MongoDB 很容易学习和设置。我从来没有用过redis。我建议使用 MongoDB——但这可能是无耻的狂热——我没有数字,呵呵,只有易用性的说法。

          【讨论】:

            【解决方案9】:

            dirty 是另一种平面文件键值存储。顾名思义,对于简单的情况,它是一种快速、肮脏但高效的解决方案。我不是作者:)

            【讨论】:

              【解决方案10】:

              还有一些需要考虑:

              全局:http://globalsdb.org

              GT.M(请参阅https://github.com/robtweed/node-mwire 了解起点)

              M/DB(SimpleDB 的开源克隆):https://github.com/robtweed/node-mdb,您可以使用 Node.js SimpleDB 客户端访问它:https://github.com/rjrodger/simpledb

              【讨论】:

                【解决方案11】:

                我发现CouchDB 非常容易掌握。网上有很多电子书可以教你如何通过Node.js使用CouchDB。

                我发现this book 对学习 CouchDB 非常有用。

                为了在 Node.js 中使用 CouchDB,我使用 NANO 模块。

                CouchDB 可以托管在IriscouchCloudant

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2019-03-14
                  • 2013-11-13
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-05-04
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多