Node.js,将对象存储在内存或数据库中?

时间:2016-08-04 08:17:51

标签: javascript node.js memory-management database-performance

正在开发一个节点js应用程序,它从集中式数据库中读取一个json列表

列表Object大约为1.2mb(如果保存在txt文件中)

要求就好,数据每24小时刷新一次,所以我保留了一份cron工作

现在,在获取数据之后,我将其保存到我的服务器本地运行的db(couchbase)

数据访问非常频繁,每秒大约需要1或2个请求,几乎所有需要Object

Object保留为节点js中的内存对象或将其保留在本地数据库中是不是很好?

两者的优点和缺点是什么?

Object仅读取所有请求,仅由cron作业写入

这是一个高端系统,i7四核,16GB内存

2 个答案:

答案 0 :(得分:2)

  1. 这取决于您的硬件
  2. 如果此对象是不可变的,则根据请求,最好将其保留在内存中。如果没有 - 依赖。
  3. 在任何情况下,工作流打开连接到db - 获取数据 - 返回结果 - 免费数据将比内存中的缓存消耗更多资源。
  4. 例如,在我们的项目中,我们处理高清图像,并将所有对象保存在内存中 - 原始格式为3-7mb。测试表明,这比使用任何缓存系统(如redis或沙发基座)更有效。

答案 1 :(得分:1)

我会将最新版本保留为内存对象,并将其存储起来。这样,如果发生任何崩溃,你就有备份。但是,如果您编辑该文件,我只会将其保留为数据库对象。

每2秒访问该对象的数据库可能会正常工作,但1.2MB的内存不是那么多,如果你可以保留它,那么你的服务器不会遇到问题。

与内存相比,DB有点慢,但是(最有可能)具有线程安全的优势。如果要编辑文档,可能会遇到内存对象的线程问题。

您知道应用程序和要求,您应该能够判断您是否需要线程安全数据库,或者是否需要保护服务器上的内存。如果您不知道,我们需要查看实际的代码和用例,告诉您哪些方法可以做得最好。