构建集合缓存是一种好习惯吗?

时间:2011-12-01 16:11:12

标签: caching mongodb node.js collections

我正在使用插件node-mongodb-native使用带有Node.js的MongoDB。我遇到的一个问题是嵌套回调的数量。我试图通过减少查询所需的代码来简化一些事情。

而不是......

db.collection("test", function(err, collection) {
    collection.find(...).toArray(function(err, results) {
        // ...
    });
});

...我正在考虑构建一个充当集合缓存的对象,这样就不需要第一个回调。我正在使用以下代码构建对象:

var collections = {};

["test", "foo"].forEach(function(name) {
    db.collection(name, function(err, coll) {
        collections[name] = coll;
    });
});

有了它,我就可以将第一个代码片段清理为:

collections.test.find(...).toArray(function(err, results) {
    // ...
});

我想知道这是不是一个好习惯。它工作得很好,但我想收集一个集合的回调是有原因的。像我现在这样构建集合缓存是否有意义?

1 个答案:

答案 0 :(得分:2)

这完全取决于集合对象是什么。   - 它活着吗?   - 它是否连接到数据库?   - 它是否进行任何内部缓存?   - 它是否反映了新数据?

在不知道这些细节的情况下,我建议您创建一个惰性评估代理。

Mongo.collection("test").find(...).toArray(function(err, results) {
    // ...
});

这里的想法是你在内部存储find命令,当你调用toArray时,你得到集合并在其上调用find命令,然后调用toArray。

这意味着您每次都会获得一个新的集合并避免“缓存安全”问题,但仍然有一个很好的API。