Trong rất nhiều ví dụ giới thiệu của việc sử dụng MongoDB, bạn sẽ thấy mã như thế này:Giữ mở một kết nối cơ sở dữ liệu MongoDB
var MongoClient = require('mongodb').MongoClient;
MongoClient.connect("mongodb://localhost:port/adatabase", function(err, db)
{
/* Some operation... CRUD, etc. */
db.close();
});
Nếu MongoDB cũng giống như bất kỳ hệ thống cơ sở dữ liệu khác, open
và close
hoạt động thường đắt tiền thời gian khôn ngoan . Vì vậy, câu hỏi của tôi là: Chỉ cần làm MongoClient.connect("...
một lần, gán giá trị trả lại db
cho một số mô-đun toàn cầu, có các chức năng khác nhau trong mô-đun thực hiện nhiều công việc liên quan đến cơ sở dữ liệu (chèn tài liệu vào bộ sưu tập, cập nhật tài liệu, vv ..) khi chúng được gọi bởi các phần khác của ứng dụng (và do đó tái sử dụng giá trị db
), và sau đó, khi ứng dụng được thực hiện, chỉ sau đó thực hiện close
.
Nói cách khác, open
và close
được thực hiện một lần - không phải mỗi lần bạn cần thực hiện và thực hiện một số thao tác liên quan đến cơ sở dữ liệu. Và bạn tiếp tục sử dụng lại đối tượng db
được trả lại trong lần đầu tiên open\connect
, chỉ để vứt bỏ nó ở cuối, với close
, khi bạn thực sự được thực hiện với tất cả công việc liên quan đến cơ sở dữ liệu của mình.
Rõ ràng, vì tất cả I/O là đồng bộ, trước close
, bạn phải đảm bảo rằng hoạt động cơ sở dữ liệu cuối cùng đã hoàn tất trước khi phát hành close
. Có vẻ như điều này nên được OK, nhưng tôi muốn kiểm tra lại chỉ trong trường hợp tôi đang thiếu một cái gì đó như tôi mới đến MongoDB. Cảm ơn!
Đồng thời kiểm tra [this] (http://stackoverflow.com/questions/14495975/why-its-recommended-not-to-close-any-mongodb-connection-anywhere-in-node-js-code), có thể giúp bạn –
Thú vị .... Có, hữu ích; Cảm ơn nhiều! – Lew