Caching 构建集合缓存是一种好的做法吗?
我正在体验使用该插件的Node.js MongoDB。我遇到的一个问题是嵌套回调的数量。我试图通过减少查询所需的代码来简化一些事情 而不是这个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) { // ... }); }); 。。。我正在考虑构建一个对象作为集合的缓存,这样就不需要第一次回调。我使用以下代码来
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我对它使用类似的技术。在这里,我缓存对数据库的引用,而不是在每次需要查询时获取它。我知道这个参考是“缓存安全的”。只要你的收藏是“缓存安全的”,那么它就是一种好技术