我在Node.js中有一个API服务,基本上它的作用是从请求中获取id
,从数据库中读取带有此id
的记录并将其返回给响应。
虽然有许多客户有不同的id
s,但在给定的时间内通常只有大约10-20个客户使用。
创建一个以id
为键的对象并将结果记录与last_requested
时间一起存储以模拟具有快速访问权限的小型数据库是一个好主意吗?每当请求记录时,我都会使用last_requested
更新new Date()
字段。另外,创建setInterval()
到delete
那些一段时间没用过的密钥。
数据库中的记录不会经常更改,当它们发生时我可以重新启动服务(有几个实例同时通过PM2
运行,因此可以正常重新启动它们。)
如果在此"数据库"中找不到所需的id
将执行对真实数据库的请求,结果将以新密钥的形式存储在对象中。
答案 0 :(得分:1)
你在谈论缓存。如果
,它非常有用对于微不足道的用例(即每秒50次请求),可能不需要数据库的内存缓存。此外,如果您使用数据库提供的工具(如持久连接池,一致的参数化查询,查询缓存等),数据库访问速度非常快。
这完全取决于您的具体用例。但是在我真正遇到性能问题并确定数据库是瓶颈之前我不会这样做。
答案 1 :(得分:0)
这不仅仅是一个好主意,缓存在计算系统的不同层面是必需的。缓存从CPU级别(L1,L2,L3),操作系统级别到应用程序级别开始,这必须由开发人员完成。
即使您拥有结构良好且具有良好索引的数据库,您的应用程序和数据库之间仍然存在TCP-IP通信的开销。因此,如果您要经常访问某些行,则必须将它们放在您的应用程序流程中。
好消息是Node.js应用程序是驻留在内存中的单个进程(与PHP或其他来来去去的脚本程序不同)。因此,您可以加载频繁的所需数据并省略数据库访问。
存储记录的最佳机制可以是LRU(最近最少使用的)缓存。 node.js有几个LRU缓存包:
在LRU缓存中,您可以定义缓存可以使用的内存量,每个项目的到期时间以及可以存储的项目数量!或者你可以写自己的!