在Node.js中缓存Mongodb集合对象

4

我正在尝试在Node.js中实现与MongoDB数据库的RESTful接口。根据文档,基本惯用语类似于:

var mongo = require('mongodb'),
  Server = mongo.Server,
  Db = mongo.Db;

var server = new Server('localhost', 27017, {auto_reconnect: true});
var db = new Db('exampleDb', server);

db.open(function(err, db) {
     if(!err) {
        db.collection('test', function(err, collection) {
            // do stuff with collection
        });
     }
});

基本的数据库访问涉及到三个对象(服务器、数据库和集合)。我的问题是,在启动时哪些对象可以/应该被加载并缓存以便于每个http请求重复使用,哪些必须/应该在每个请求中重新创建。我的假设是,服务器和数据库对象可以长期存在,但我不确定集合对象是否也可以。


3
为什么你要两次调用db.open? - Golo Roden
不好意思,这只是从两个不同的地方剪切和粘贴引起的错误。已修复。 - Jay
4个回答

1

保存所有三个东西(服务器连接,数据库和集合),然后启动您的应用程序。 如果您有疑问,像Mongoose这样的MongoDB ODM会自己处理。 您可能希望使用async来避免将代码嵌套得太深。

个人而言,我使用mongo-lite,它让我可以执行var db = require('mongo-lite').connect('mongodb://localhost/exampleDb', ['test']); 之后,我可以调整db.test,我的集合。这为我节省了很多样板文件。


0

集合可能是长期存在的,特别是当服务器没有运行时,如果有很多这样的集合。你只是在使用内存。


0
为什么不应该这样做呢? 集合对象本身并不占用太多内存,它提供了与mongodb交互的所有功能,如查询、保存等。 在每个请求上重新创建它,然后再将其删除是没有意义的。

0
通常,从open返回的回调应该启动逻辑以启动应用程序/服务器的其余部分。然后,您只需保留该db引用并在每个请求中调用db.collection。我通常有一个服务可以从我的REST资源中调用以获取db ref,以保持一切清洁。同样,这取决于应用程序中对db/collection的使用情况而有所不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接