Я ищу базу данных для сопряжения с приложением node.js. Я предполагаю, что json / nosql db будет предпочтительнее реляционной БД [я могу обойтись без несоответствия импеданса json / sql]. Я считаю:
CouchDB
MongoDB
Redis
У кого-нибудь есть какие-либо мнения / военные истории относительно совместимости / развертывания вышеуказанного с помощью node.js? Есть явные фавориты?
Думаю, было бы полезно ответить на этот вопрос, если бы были упомянуты еще более широкие требования. У каждой БД есть свои плюсы, минусы и особенности. Сообщите нам спецификации!
Самьяк Бхута
Ответы:
79
Я разработчик драйвера mongodb для node.js. Я использую mongodb для своих собственных проектов и очень доволен производительностью mongodb.
также взгляните на 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.
Также доступны различные клиентские библиотеки , некоторые довольно низкого уровня, другие действительно очень абстрактные.
Но, как я уже сказал, вы должны также подумать о функциях, которые требуются для вашей базы данных.
Redis - популярный выбор. Вам нужен драйвер базы данных, который не блокируется.
Все перечисленные вами базы данных очень разные. Redis берет идею хранилищ ключей и значений и работает с ней, добавляя различные типы данных и способы запроса данных. Люди часто замечают, что redis тоже очень хорошо масштабируется; Это означает, что у него очень низкие накладные расходы, несмотря на способность работать.
Да, 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 или в простом хранилище значений ключей.
Подумайте о своем варианте использования. Вы с большей вероятностью захотите выполнить полнотекстовый поиск, просто получить данные по ключу или получить диапазоны документов с похожими атрибутами?
Постоянство - это проект, позволяющий высокоуровневому API сохранять данные между запусками процессов. Цель состоит в том, чтобы поддерживать простые в использовании, мощные, гибкие серверные ВМ или все вышеперечисленное, если это возможно.
Поддерживаемые базы данных включают:
PostgreSQL - реляционная база данных корпоративного уровня. Драйвер реализован на чистом JavaScript и обменивается данными по TCP с использованием проводного протокола PostgreSQL.
Sqlite3 - простая, быстрая реляционная база данных без сервера. Этот драйвер представляет собой оболочку программы sqlite3 из командной строки. Это требует, чтобы sqlite3 был на пути. Связь очень быстрая, но типы не очень точные. Возвращаются только строки и значения NULL.
MongoDB - масштабируемая, высокопроизводительная база данных с открытым исходным кодом, свободная от схем и ориентированная на документы. Этот драйвер также реализует проводной протокол на JavaScript и взаимодействует с сервером по TCP.
JSON-DB - самодельная система, не содержащая схемы, документно-ориентированная база данных, которая использует простые плоские файлы, содержащие объекты JSON. Здесь нет никаких требований, кроме узла и файловой системы. Производительность будет определена после ее полной реализации.
Я не уверен, что правильное решение - сосредоточиться исключительно на сопоставлении базы данных с вашим веб-стеком, но также с учетом требований конкретного приложения.
Вы анализируете ленты Twitter или другие данные большого объема на предмет шаблонов, но не нуждаетесь в поддержке транзакций? Тогда выберите что-нибудь очень быстрое.
Вы просто хотите хранить некоторую действительно основную информацию в нескольких таблицах, и это в настоящее время не ориентированное на предприятие приложение? Затем выберите что-нибудь интересное, чтобы научиться.
Может быть, вы собираетесь хранить данные, которые действительно важны для клиента, надежны, должны быть транзакционными, иметь репликацию в реальном времени на удаленный хостинг и т. Д. Тогда, может быть, посмотрите что-нибудь вроде postgresql. Он также не будет зеркальным, но драйвер node.js работает довольно хорошо, и если вы не смертельно боитесь sql, он довольно легко получает то, что вы хотите.
Что касается моего собственного мнения, я думаю, что переход на новый стек, такой как node.js (по сравнению с традиционными фреймворками в php / java), добавляет достаточно «новой» сложности, чтобы не добавлять дополнительные слои сразу. Это хорошая статья, в которой обсуждается следующее:
Я буду говорить по своему опыту: CouchDB имеет определенную кривую обучения, тогда как MongoDB, как мне показалось, очень легко изучить и настроить. Я никогда не использовал Redis. Я предлагаю MongoDB - но это, возможно, бессовестный фанатизм - у меня нет цифр, хех, только заявления о простоте использования.
dirty - еще одно хранилище ключей и значений в виде плоских файлов. Как следует из названия, это быстрое и грязное, но эффективное решение для простых случаев. Я не автор :)
Я обнаружил, что CouchDB очень легко освоить. Есть много электронных книг , доступных в Интернете , который научит вас , как использовать CouchDB с Node.js .
Я нашел эту книгу очень полезной для изучения CouchDB.
Для использования CouchDB с Node.js я использую модуль NANO .
Ответы:
Я разработчик драйвера mongodb для node.js. Я использую mongodb для своих собственных проектов и очень доволен производительностью mongodb.
Драйвер Mongodb для node.js
(Бесстыдный плагин) Не стесняйтесь задавать любые вопросы о драйвере на
Группа Google для драйвера mongodb
или здесь, в Stackoverflow
Удачи с node.js. Мне очень нравится платформа: D
источник
Хотя ваш выбор во многом зависит от функций, которые вы собираетесь использовать, я очень ценю CouchDB за его родную среду JavaScript. И данные, и представления написаны на JavaScript, поэтому, на мой взгляд, он очень хорошо подходит для node.js.
Также доступны различные клиентские библиотеки , некоторые довольно низкого уровня, другие действительно очень абстрактные.
Но, как я уже сказал, вы должны также подумать о функциях, которые требуются для вашей базы данных.
источник
Redis - популярный выбор. Вам нужен драйвер базы данных, который не блокируется.
Все перечисленные вами базы данных очень разные. Redis берет идею хранилищ ключей и значений и работает с ней, добавляя различные типы данных и способы запроса данных. Люди часто замечают, что redis тоже очень хорошо масштабируется; Это означает, что у него очень низкие накладные расходы, несмотря на способность работать.
Вот список доступных модулей базы данных: http://wiki.github.com/ry/node/modules#database
источник
Мне очень нравится CouchDB. Это немного требует обучения, но представления становятся действительно мощными, если вы понимаете, как их использовать. На github и npm есть модуль под названием cradle, с которым действительно легко работать. Я не смог проверить, насколько это быстро, но он действительно гибкий (вы также можете получить доступ к своим данным в браузере, если хотите).
Основная проблема здесь в том, какой дизайн базы данных имеет смысл для вашего приложения. У вас есть данные, которые по своей природе в основном представляют собой пары "ключ-значение"? Если да, используйте Redis. У вас есть данные, в которых не все документы обязательно имеют одинаковые поля? Если да, используйте базу данных NoSQL, такую как CouchDB.
Следующая худшая вещь в использовании блокирующей базы данных - это использование неправильной базы данных для ваших данных. CouchDB управляется Apache, поэтому вы знаете, что это хорошее качество, но не имеет смысла использовать его, если ваши данные будут иметь больше смысла в таблице SQL или в простом хранилище значений ключей.
Подумайте о своем варианте использования. Вы с большей вероятностью захотите выполнить полнотекстовый поиск, просто получить данные по ключу или получить диапазоны документов с похожими атрибутами?
источник
Возможно, вы захотите попробовать Persistence , систему хранения высокого уровня / базы данных для node.js.
с thechangelog.com :
источник
Отказ от ответственности: я автор.
Возможно, взгляните на BarricaneDB, анонсированный здесь .
источник
Я не уверен, что правильное решение - сосредоточиться исключительно на сопоставлении базы данных с вашим веб-стеком, но также с учетом требований конкретного приложения.
Вы анализируете ленты Twitter или другие данные большого объема на предмет шаблонов, но не нуждаетесь в поддержке транзакций? Тогда выберите что-нибудь очень быстрое.
Вы просто хотите хранить некоторую действительно основную информацию в нескольких таблицах, и это в настоящее время не ориентированное на предприятие приложение? Затем выберите что-нибудь интересное, чтобы научиться.
Может быть, вы собираетесь хранить данные, которые действительно важны для клиента, надежны, должны быть транзакционными, иметь репликацию в реальном времени на удаленный хостинг и т. Д. Тогда, может быть, посмотрите что-нибудь вроде postgresql. Он также не будет зеркальным, но драйвер node.js работает довольно хорошо, и если вы не смертельно боитесь sql, он довольно легко получает то, что вы хотите.
Что касается моего собственного мнения, я думаю, что переход на новый стек, такой как node.js (по сравнению с традиционными фреймворками в php / java), добавляет достаточно «новой» сложности, чтобы не добавлять дополнительные слои сразу. Это хорошая статья, в которой обсуждается следующее:
http://nodeguide.com/convincing_the_boss.html
источник
Я буду говорить по своему опыту: CouchDB имеет определенную кривую обучения, тогда как MongoDB, как мне показалось, очень легко изучить и настроить. Я никогда не использовал Redis. Я предлагаю MongoDB - но это, возможно, бессовестный фанатизм - у меня нет цифр, хех, только заявления о простоте использования.
источник
dirty - еще одно хранилище ключей и значений в виде плоских файлов. Как следует из названия, это быстрое и грязное, но эффективное решение для простых случаев. Я не автор :)
источник
Еще кое-что для рассмотрения:
Глобалы: 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
источник
Я обнаружил, что CouchDB очень легко освоить. Есть много электронных книг , доступных в Интернете , который научит вас , как использовать CouchDB с Node.js .
Я нашел эту книгу очень полезной для изучения CouchDB.
Для использования CouchDB с Node.js я использую модуль NANO .
CouchDB может быть размещен на любом Iriscouch или Cloudant .
источник