在节点服务器上跨多个API请求维护数据

时间:2015-03-13 09:47:26

标签: javascript node.js

这是我正在处理的问题。

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

如果可行,它是否会对服务器性能产生任何影响。

2 个答案:

答案 0 :(得分:0)

db query reduction总是一个复杂的问题。我的解决方案是让db查询一个promise并将其缓存直到它过期。

例如:

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来存储创建的promises,并为其提供一个expriation时间。

答案 1 :(得分:0)

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

从内存中获取是您能获得的最快速度。现有节点的解决方案,如node-cache