Node.JS с NoSQL или SQL?
Что-то я не совсем понимаю, я делал некоторые исследования для баз данных для Node.JS, и почти все рекомендуют базы данных типа NoSQL, такие как MongoDB или CouchDB для использования с Node.
Но, читая далее, я вижу, что NoSQL не так хорош для реляционных данных... Но то, где я запутался: большинство бизнес-приложений (или приложений типа социальных сетей) имеют реляционные данные.
Например, скажем, я создаю приложение в Node.JS для школы, в которой есть ученики, учителя, классы. Вы можете видеть там много отношений. Вы по-прежнему рекомендуем использовать NoSQL?
Ответы
Ответ 1
MongoDB часто сопрягается с Node.js из-за их общей асинхронной природы и из-за простого использования объектов JSON Javascript с структурой документа mongoDB на основе JSON. Тем не менее, у mongoDB есть свои недостатки, особенно когда требуется сложная отчетность. Одно из лучших объяснений, которое я нашел, заключается в том, что для репликации простого доступа к данным в mongo потребуется соединение в mysql, однако, если вы захотите присоединиться к данным другим способом, это будет довольно просто в SQL, но гораздо более сложным в Монго.
Ответ 2
Взгляните на mongoose для node. Он позволяет определять модели для экспресс-приложения. Вы можете использовать .populate() для эффективного объединения того, что будет внешним ключом в системе РСУБД.
http://mongoosejs.com/docs/populate.html
var mongoose = require('mongoose')
, Schema = mongoose.Schema
var PersonSchema = new Schema({
name : String,
age : Number,
stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});
var StorySchema = new Schema({
_creator : { type: Schema.Types.ObjectId, ref: 'Person' },
title : String,
fans : [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});
var Story = mongoose.model('Story', StorySchema);
var Person = mongoose.model('Person', PersonSchema);
Сохранение ссылок
Сохранение ссылок на другие документы работает так же, как вы обычно сохраняете объектные объекты, просто назначьте ObjectId:
var aaron = new Person({ name: 'Aaron', age: 100 });
aaron.save(function (err) {
if (err) return handleError(err);
var story1 = new Story({
title: "Once upon a timex.",
_creator: aaron._id // assign an ObjectId
});
story1.save(function (err) {
if (err) return handleError(err);
// thats it!
});
})
Население
До сих пор мы не делали ничего особенного. Мы просто создали Человека и Историю. Теперь давайте взглянем на заполнение нашей истории _creator:
Story
.findOne({ title: /timex/ })
.populate('_creator')
.exec(function (err, story) {
if (err) return handleError(err);
console.log('The creator is %s', story._creator.name); // prints "The creator is Aaron"
})