2015-03-13 54 views
0

以下是我正在处理的问题。通过节点服务器上的多个API请求维护数据

客户端需要使用API​​轮询节点服务器以查找某些数据。为了让节点服务器响应,它需要一个数据集(从DB中读取)。我想避免在每次调查中读取数据库。如何维护多个民意调查中的数据集?

如果这是可能的话,它会对服务器性能产生什么影响。

回答

0

db查询减少总是一个复杂的问题。我的解决方案是使数据库查询承诺,并缓存它,直到它过期。

例如:

var cache = {}; 
var cachedQuery = function(id) { 
    if(id in cache) return cache[id]; 

    return cache[id] = new Promise(function(resolve, reject) { 
    db.query('select * from test where id=?', id, function(err, rows) { 
     delete cache[id]; 
     if(err) reject(err); 
     else resolve(rows); 
    } 
    }); 
} 

假设你在共享相同的请求ID的同时100+查询,这些查询将共享同一个数据库的请求。请求在第一个查询到来时建立,当查询完成时所有查询都会返回相同的结果。

对于更通用的用法,可以使用lru-cache来存储创建的promise,并给它一个expriation时间。

0

您可以使用内存中缓存。这个想法是,在访问数据库之前,请检查缓存中是否存在请求的值。如果是 - 服务它。如果没有 - 从数据库中提取,保存并缓存并返回。

从内存中提供服务是您获得最快速度。在那里有节点的现有解决方案,如node-cache

相关问题