база данных node.js [закрыто]

115

Я ищу базу данных для сопряжения с приложением node.js. Я предполагаю, что json / nosql db будет предпочтительнее реляционной БД [я могу обойтись без несоответствия импеданса json / sql]. Я считаю:

  • CouchDB
  • MongoDB
  • Redis

У кого-нибудь есть какие-либо мнения / военные истории относительно совместимости / развертывания вышеуказанного с помощью node.js? Есть явные фавориты?

Джастин
источник
2
Думаю, было бы полезно ответить на этот вопрос, если бы были упомянуты еще более широкие требования. У каждой БД есть свои плюсы, минусы и особенности. Сообщите нам спецификации!
Самьяк Бхута

Ответы:

79

Я разработчик драйвера mongodb для node.js. Я использую mongodb для своих собственных проектов и очень доволен производительностью mongodb.

Драйвер Mongodb для node.js

(Бесстыдный плагин) Не стесняйтесь задавать любые вопросы о драйвере на

Группа Google для драйвера mongodb

или здесь, в Stackoverflow

Удачи с node.js. Мне очень нравится платформа: D

christkv
источник
1
также взгляните на mongoose, который представляет собой довольно красивую ORM, которая строится поверх / использует драйвер mongodb для node.js
taxilian
2
Мы используем Node.js + MongoDB в течение некоторого времени, и все идет отлично. И полное уважение к @christkv, этот драйвер надежный и не подведет. Мы с легкостью развернули node.js / express.js + mongodb на EC2. Также обратите внимание, что мы не используем Mongoose. Говоря о проблемах (при условии, что вы уже хорошо разбираетесь в Node), вам нужно хорошо разбираться в методах Mongo (запросы и агрегирование) для любого серьезного приложения или разработки службы. Если вы все еще на стадии оценки, вам действительно стоит сначала узнать, чем Mongo отличается от других БД.
Samyak Bhuta
насколько я понимаю, появляются некоторые действительно интересные функции для ускорения агрегации в mongodb. Одна из них - собственные функции агрегирования. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011, а также возможный переход на v8 вместо spidermonkey для движка javascript, который позволит каждой команде map-reduce запускаться в собственном потоке (пока, пока, однопоточная map-reduce )
christkv 03
25

Хотя ваш выбор во многом зависит от функций, которые вы собираетесь использовать, я очень ценю CouchDB за его родную среду JavaScript. И данные, и представления написаны на JavaScript, поэтому, на мой взгляд, он очень хорошо подходит для node.js.

Также доступны различные клиентские библиотеки , некоторые довольно низкого уровня, другие действительно очень абстрактные.

Но, как я уже сказал, вы должны также подумать о функциях, которые требуются для вашей базы данных.

b_erb
источник
18

Redis - популярный выбор. Вам нужен драйвер базы данных, который не блокируется.

Все перечисленные вами базы данных очень разные. Redis берет идею хранилищ ключей и значений и работает с ней, добавляя различные типы данных и способы запроса данных. Люди часто замечают, что redis тоже очень хорошо масштабируется; Это означает, что у него очень низкие накладные расходы, несмотря на способность работать.

Вот список доступных модулей базы данных: http://wiki.github.com/ry/node/modules#database

Jökull
источник
Да, Redis великолепен, но кажется, что мы можем хранить двоичные данные, но не можем их получить! По крайней мере, я не смог найти ни одной команды Redis для двоичных данных.
AppleGrew
В самом деле? Я использовал для хранения двоичных данных (используя класс Node Buffer), и он работал нормально. Какая версия Redis / Node?
DanielS
12
По умолчанию node_redis будет возвращать строки JavaScript для всех команд. Чтобы вместо этого получить буферы, создайте клиента с помощью createClient (порт, хост, {return_buffers: true});
Мэтт Рэнни,
4
@MattRanney, ты сэкономил мне еще несколько часов на копание! Я не видел этого нигде в документации по node-Redis и буквально затратил 5 часов. В данный момент моя признательность безгранична.
ghayes
Что ж, все звучит хорошо в теории, но возьмем практический пример: у вас есть JSON API, который вы запрашиваете каждые 20 секунд, который возвращает массив, вы хотите иметь возможность кэшировать его, вы все равно будете использовать Redis? также необходимо провести нечеткий поиск в этом массиве
PirateApp
15

Мне очень нравится CouchDB. Это немного требует обучения, но представления становятся действительно мощными, если вы понимаете, как их использовать. На github и npm есть модуль под названием cradle, с которым действительно легко работать. Я не смог проверить, насколько это быстро, но он действительно гибкий (вы также можете получить доступ к своим данным в браузере, если хотите).

Основная проблема здесь в том, какой дизайн базы данных имеет смысл для вашего приложения. У вас есть данные, которые по своей природе в основном представляют собой пары "ключ-значение"? Если да, используйте Redis. У вас есть данные, в которых не все документы обязательно имеют одинаковые поля? Если да, используйте базу данных NoSQL, такую ​​как CouchDB.

Следующая худшая вещь в использовании блокирующей базы данных - это использование неправильной базы данных для ваших данных. CouchDB управляется Apache, поэтому вы знаете, что это хорошее качество, но не имеет смысла использовать его, если ваши данные будут иметь больше смысла в таблице SQL или в простом хранилище значений ключей.

Подумайте о своем варианте использования. Вы с большей вероятностью захотите выполнить полнотекстовый поиск, просто получить данные по ключу или получить диапазоны документов с похожими атрибутами?

beatgammit
источник
8

Возможно, вы захотите попробовать Persistence , систему хранения высокого уровня / базы данных для node.js.

с thechangelog.com :

Постоянство - это проект, позволяющий высокоуровневому API сохранять данные между запусками процессов. Цель состоит в том, чтобы поддерживать простые в использовании, мощные, гибкие серверные ВМ или все вышеперечисленное, если это возможно.

Поддерживаемые базы данных включают:

  • PostgreSQL - реляционная база данных корпоративного уровня. Драйвер реализован на чистом JavaScript и обменивается данными по TCP с использованием проводного протокола PostgreSQL.
  • Sqlite3 - простая, быстрая реляционная база данных без сервера. Этот драйвер представляет собой оболочку программы sqlite3 из командной строки. Это требует, чтобы sqlite3 был на пути. Связь очень быстрая, но типы не очень точные. Возвращаются только строки и значения NULL.
  • MongoDB - масштабируемая, высокопроизводительная база данных с открытым исходным кодом, свободная от схем и ориентированная на документы. Этот драйвер также реализует проводной протокол на JavaScript и взаимодействует с сервером по TCP.
  • JSON-DB - самодельная система, не содержащая схемы, документно-ориентированная база данных, которая использует простые плоские файлы, содержащие объекты JSON. Здесь нет никаких требований, кроме узла и файловой системы. Производительность будет определена после ее полной реализации.
Гэри С. Уивер
источник
13
Постоянство не обновлялось с марта 2010 года и сейчас находится в версии 0.0.4, поэтому похоже, что от него отказались.
бездельник
3

Я не уверен, что правильное решение - сосредоточиться исключительно на сопоставлении базы данных с вашим веб-стеком, но также с учетом требований конкретного приложения.

Вы анализируете ленты Twitter или другие данные большого объема на предмет шаблонов, но не нуждаетесь в поддержке транзакций? Тогда выберите что-нибудь очень быстрое.

Вы просто хотите хранить некоторую действительно основную информацию в нескольких таблицах, и это в настоящее время не ориентированное на предприятие приложение? Затем выберите что-нибудь интересное, чтобы научиться.

Может быть, вы собираетесь хранить данные, которые действительно важны для клиента, надежны, должны быть транзакционными, иметь репликацию в реальном времени на удаленный хостинг и т. Д. Тогда, может быть, посмотрите что-нибудь вроде postgresql. Он также не будет зеркальным, но драйвер node.js работает довольно хорошо, и если вы не смертельно боитесь sql, он довольно легко получает то, что вы хотите.

Что касается моего собственного мнения, я думаю, что переход на новый стек, такой как node.js (по сравнению с традиционными фреймворками в php / java), добавляет достаточно «новой» сложности, чтобы не добавлять дополнительные слои сразу. Это хорошая статья, в которой обсуждается следующее:

http://nodeguide.com/convincing_the_boss.html

qooleot
источник
2

Я буду говорить по своему опыту: CouchDB имеет определенную кривую обучения, тогда как MongoDB, как мне показалось, очень легко изучить и настроить. Я никогда не использовал Redis. Я предлагаю MongoDB - но это, возможно, бессовестный фанатизм - у меня нет цифр, хех, только заявления о простоте использования.

PinkElephantsOnParade
источник
1

dirty - еще одно хранилище ключей и значений в виде плоских файлов. Как следует из названия, это быстрое и грязное, но эффективное решение для простых случаев. Я не автор :)

nponeccop
источник
0

Я обнаружил, что CouchDB очень легко освоить. Есть много электронных книг , доступных в Интернете , который научит вас , как использовать CouchDB с Node.js .

Я нашел эту книгу очень полезной для изучения CouchDB.

Для использования CouchDB с Node.js я использую модуль NANO .

CouchDB может быть размещен на любом Iriscouch или Cloudant .

Шекхар
источник