自定义内存缓存

时间:2012-08-30 22:13:24

标签: node.js memcached

想象一下,有一个网络服务:

  • 在服务器群集(nginx / node.js)上运行
  • 远程存储所有数据
  • 必须在20毫秒内回复

必须为响应读取的数据将按此分割..

BatchA

  • AWS DynamoDB中存储的数百万个小对象
  • 随机更新
  • 只有一致的读取,无法捕获

BatchB

  • ~SQL中的2,000条记录
  • 很少更新,记录最多1KB
  • 最多可以捕捉60-90秒

我们无法一次性读取它们,因为在我们从BatchA读取之前,我们不知道从BatchB获取哪些记录。

从DynamoDB读取最多需要10毫秒。如果我们从远程位置读取BatchB,它将使我们没有时间进行计算,或者我们已经超时了。

我目前的想法是将所有BatchB记录加载到每个节点的内存中(仅约2MB)。在启动时,系统将连接到SQL服务器并获取所有记录,然后它将每60或90秒更新一次。问题是最好的方法是什么

我可以简单地将它们全部读入node.js中的变量(数组),然后使用SetTimeout在60-90s之后更新数组。但是最好的解决方案

1 个答案:

答案 0 :(得分:0)

你的解决方案听起来不错。它符合您的需求。去吧。

我建议在从远程位置更新缓存的过程中保留两个缓存副本。虽然收到了2MB,但你已经获得了数据的部分副本。我会坚持使用旧缓存,直到完全接收到新数据。

另一种方法是只维护一个缓存集并在每个记录到达时更新它。但是,这更难以实现并且容易出错。 (例如,如果在远程位置找不到记录,则不应忘记从缓存中删除记录。)这种方法可以节省内存,但我不认为2MB是一个大问题。