以下是我正在处理的问题。通过节点服务器上的多个API请求维护数据
客户端需要使用API轮询节点服务器以查找某些数据。为了让节点服务器响应,它需要一个数据集(从DB中读取)。我想避免在每次调查中读取数据库。如何维护多个民意调查中的数据集?
如果这是可能的话,它会对服务器性能产生什么影响。
以下是我正在处理的问题。通过节点服务器上的多个API请求维护数据
客户端需要使用API轮询节点服务器以查找某些数据。为了让节点服务器响应,它需要一个数据集(从DB中读取)。我想避免在每次调查中读取数据库。如何维护多个民意调查中的数据集?
如果这是可能的话,它会对服务器性能产生什么影响。
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时间。
您可以使用内存中缓存。这个想法是,在访问数据库之前,请检查缓存中是否存在请求的值。如果是 - 服务它。如果没有 - 从数据库中提取,保存并缓存并返回。
从内存中提供服务是您获得最快速度。在那里有节点的现有解决方案,如node-cache。