2012-10-06 57 views
10

Tôi không hiểu lắm, tôi đã thực hiện một số nghiên cứu về cơ sở dữ liệu cho Node.JS và hầu hết mọi người đều đề xuất cơ sở dữ liệu kiểu NoSQL như MongoDB hoặc CouchDB để sử dụng với Node. Nhưng đọc thêm Tôi thấy rằng NoSQL không phải là tuyệt vời cho dữ liệu quan hệ ... Nhưng đó là nơi tôi đang bối rối: Hầu hết các ứng dụng kinh doanh (hoặc các ứng dụng kiểu mạng xã hội) đều có dữ liệu quan hệ.Node.JS với NoSQL hoặc SQL?

Ví dụ: giả sử tôi đang xây dựng một ứng dụng trong Node.JS cho trường học có học sinh, giáo viên, lớp học. Bạn có thể thấy có rất nhiều mối quan hệ trong đó. Bạn vẫn muốn giới thiệu sử dụng NoSQL?

Trả lời

5

MongoDB thường được ghép nối với Node.js vì tính chất không đồng bộ được chia sẻ của chúng và do việc sử dụng dễ dàng các đối tượng JSON javascript với cấu trúc tài liệu mongoDB dựa trên JSON. Điều đó nói rằng, mongoDB có những thiếu sót của nó, đặc biệt là khi báo cáo phức tạp phải được thực hiện. Một trong những giải thích tốt hơn tôi đã tìm thấy là sao chép truy cập dữ liệu dễ dàng trong mongo sẽ yêu cầu tham gia vào mysql, tuy nhiên nếu bạn muốn tham gia dữ liệu theo cách khác, nó sẽ khá đơn giản trong SQL, nhưng phức tạp hơn nhiều Mongo.

5

Hãy xem mongoose cho nút. Nó cho phép bạn xác định các mô hình cho một ứng dụng nhanh. Bạn có thể sử dụng .populate() để tham gia hiệu quả vào những gì sẽ là một khóa ngoại trên một hệ thống RDBMS.

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); 

refs Saving

refs tiết kiệm các tài liệu khác hoạt động theo cách tương tự như bạn thường tiết kiệm objectids, chỉ cần gán một 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! 
    }); 
}) 

Dân

Vì vậy, đến nay chúng tôi đã không làm bất cứ điều gì đặc biệt. Chúng tôi vừa tạo một Người và một Câu chuyện. Bây giờ, hãy xem xét cách điền vào _creator của câu chuyện của chúng tôi:

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" 
})