2012-04-06 29 views
22

Tôi đọc rằng Mongoose sẽ chỉ mở một kết nối tối đa cho mỗi bộ sưu tập và không có tùy chọn để thay đổi điều này.Mongoose có cho phép nhiều yêu cầu cơ sở dữ liệu đồng thời không?

Điều này có nghĩa là truy vấn mongo chậm sẽ làm cho tất cả các truy vấn tiếp theo đều chờ?

Tôi biết mọi thứ trong node.js không bị chặn, nhưng tôi tự hỏi liệu truy vấn chậm sẽ trì hoãn việc thực hiện tất cả các truy vấn tiếp theo hay không. Và liệu có cách nào để thay đổi điều này không.

Trả lời

30

Chỉ sử dụng một kết nối, nếu bạn sử dụng phương thức mặc định mà bạn mongoose.connect(). Để giải quyết vấn đề này, bạn có thể tạo nhiều kết nối và sau đó buộc một mô hình trỏ đến cùng một lược đồ cho kết nối đó.

Giống như vậy:

var conn = mongoose.createConnection('mongodb://localhost/test'); 
var conn2 = mongoose.createConnection('mongodb://localhost/test'); 
var model1 = conn.model('Model', Schema); 
var model2 = conn2.model('Model', Schema); 
model1.find({long query}, function() { 
    console.log("this will print out last"); 
}); 
model2.find({short query}, function() { 
    console.log("this will print out first"); 
}); 

Hy vọng rằng sẽ giúp.

Cập nhật Xin chào, điều đó có hiệu quả. Cập nhật từ các bình luận, bạn có thể tạo một nhóm kết nối bằng cách sử dụng createConnection. Nó cho phép bạn làm nhiều truy vấn từ cùng một mô hình đồng thời:

var conn = mongoose.createConnection('mongodb://localhost/test', {server:{poolSize:2}}); 
var model = conn.model('Model', Schema); 
model.find({long query}, function() { 
    console.log("this will print out last"); 
}); 
model.find({short query}, function() { 
    console.log("this will print out first"); 
}); 

Cập nhật 2 - Tháng 12 năm 2012
Câu trả lời này có thể hơi lỗi thời bây giờ - Tôi nhận thấy tôi đã tiếp tục để có được upvotes, vì vậy Tôi nghĩ tôi sẽ cập nhật nó. Trình điều khiển gốc mongodb mà mongoose kết thúc tốt đẹp bây giờ có kích thước nhóm kết nối mặc định là 5, vì vậy bạn có thể không cần phải xác định rõ ràng nó trong mongoose.

+0

Tôi hiểu nó chỉ sử dụng một kết nối, nhưng điều gì sẽ xảy ra khi tôi chỉ sử dụng một kết nối và truy vấn mongodb ngay sau một truy vấn mongodb nặng khác? Liệu truy vấn đầu tiên tôi đề cập có chờ đến khi truy vấn thứ hai tôi đề cập đến kết thúc công việc của mình trên mongodb không? – alexk

+0

Aha, tôi đoán bạn đang nói với tôi rằng nó sẽ chờ đợi, và do đó tôi nên sử dụng một mô hình khác. Tôi hiểu rồi, cảm ơn. – alexk

+0

Đúng. Nếu bạn thử nó chỉ với một kết nối, họ sẽ in theo thứ tự truy vấn. –

Các vấn đề liên quan