Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Caching 构建集合缓存是一种好的做法吗?_Caching_Mongodb_Node.js_Collections - Fatal编程技术网

Caching 构建集合缓存是一种好的做法吗?

Caching 构建集合缓存是一种好的做法吗?,caching,mongodb,node.js,collections,Caching,Mongodb,Node.js,Collections,我正在体验使用该插件的Node.js MongoDB。我遇到的一个问题是嵌套回调的数量。我试图通过减少查询所需的代码来简化一些事情 而不是这个 db.collection("test", function(err, collection) { collection.find(...).toArray(function(err, results) { // ... }); }); 。。。我正在考虑构建一个对象作为集合的缓存,这样就不需要第一次回调。我使用以下代码来

我正在体验使用该插件的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) {
    // ...
});

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

这完全取决于集合对象是什么。 -是现场直播吗? -它是否连接到数据库? -它做任何内部缓存吗? -它是否反映了新的数据

在不了解这些细节的情况下,我建议您创建一个懒惰的评估代理

Mongo.collection("test").find(...).toArray(function(err, results) {
    // ...
});
这里的想法是,您在内部存储find命令,当您调用toArray时,您将获取集合并对其调用find命令,然后调用toArray


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

集合对象似乎是活动的,因为它反映了外部应用程序对集合的更新。您关于组合回调的解决方案很有趣;我要摆弄它。@pimvdb我对它使用类似的技术。在这里,我缓存对数据库的引用,而不是在每次需要查询时获取它。我知道这个参考是“缓存安全的”。只要你的收藏是“缓存安全的”,那么它就是一种好技术