node.js保留一个小型内存数据库

node.js保留一个小型内存数据库,node.js,Node.js,我在Node.js中有一个API服务,它基本上是从请求中获取id,从数据库中读取带有该id的记录,并返回它作为响应 虽然有许多客户机具有不同的ids,但在给定的时间跨度内通常只使用其中的10-20个 用ids作为键创建一个对象,并将结果记录与last\u请求的时间一起存储,以模拟具有快速访问功能的小型数据库,这是一个好主意吗?每当请求记录时,我都会用新日期()更新上次请求的字段。另外,创建一个setInterval()来删除那些在一段时间内未使用的键 数据库中的记录不会经常更改,当它们更改时,我

我在Node.js中有一个API服务,它基本上是从请求中获取
id
,从数据库中读取带有该
id
的记录,并返回它作为响应

虽然有许多客户机具有不同的
id
s,但在给定的时间跨度内通常只使用其中的10-20个

id
s作为键创建一个对象,并将结果记录与
last\u请求的时间一起存储,以模拟具有快速访问功能的小型数据库,这是一个好主意吗?每当请求记录时,我都会用
新日期()更新
上次请求的
字段。另外,创建一个
setInterval()
删除那些在一段时间内未使用的键

数据库中的记录不会经常更改,当它们更改时,我可以重新启动服务(有几个实例通过
PM2
同时运行,因此可以正常地重新启动它们)


如果在此“数据库”中找不到所需的
id
,则将执行对真实数据库的请求,并将结果存储在对象中的新键中。

您所说的是缓存。这是非常有用的,如果

  • 你有很多阅读,但没有很多写作。i、 很多人要求一份记录,但它很少改变
  • 您有很多可用内存,或者没有多少记录
  • 您可以很好地指示何时使缓存无效
对于普通用例(即低于50个请求/秒),您可能不需要数据库的内存缓存。此外,如果您使用数据库提供的工具(如持久连接池、一致参数化查询、查询缓存等),则数据库访问速度非常快


这完全取决于您的特定用例。但我不会这样做,直到我真正开始遇到性能问题,并确定数据库是瓶颈。

这不仅仅是一个好主意,缓存在不同级别的计算系统中是必要的。缓存从CPU级别(L1、L2、L3)开始,从操作系统级别一直到应用程序级别,这必须由开发人员完成

即使您有一个具有良好索引的结构良好的数据库,您的应用程序和数据库之间的TCP-IP通信仍然存在开销。所以,如果你想经常访问某些行,就必须在你的应用程序进程中包含它们

好消息是Node.js应用程序是驻留在内存中的单进程(不同于PHP或其他来来往往的脚本程序)。因此,您可以加载频繁的必需数据并省略对数据库的访问

存储记录的最佳机制可以是LRU(最近使用最少的)缓存。node.js有几个可用的LRU缓存包:

在LRU缓存中,您可以定义缓存可以使用的内存量、每个项的过期时间以及它可以存储的项数!或者你可以自己写