2016-08-04 104 views
2

正在开发一个节点JS应用,其内容从一个集中的数据库一个JSON列表Node.js,将对象存储在内存或数据库中?

列表Object大约是1.2MB(如保存在txt文件)

要求就好,数据是每24被刷新小时,所以我一直cron作业它

现在获取数据我把它变成一个DB(couchbase),这是本地我的服务器上运行

数据访问非常频繁,我避开后1或2请求每秒和几乎所有需求Object

Object作为内存对象保留在节点js中还是保留在本地数据库中是否好?

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

Object只读的,所有的请求,只有cron作业写一次

它是一个高端系统,酷睿i7四核处理器,16GB内存

+0

“InProc”对象比任何数据库都快得多。但显然使用了这些内存。你还需要小心内存泄漏。所有人都表示,对此的适当评论完全是你的更广泛的实施,所以你可能是唯一能够回答这个问题的人。试试吧,看看 – Liam

+0

取决于,如果你开始复制对象,你可能会消耗大量的RAM,但是如果正确完成,内存对象的性能会快很多 – Paradoxis

+0

尝试我只保留它作为json对象和模块.exports我暴露了该对象,以便我可以从其他位置访问该对象。同时访问来自其他地点的我预先检查是否为空?好吗 ? –

回答

2
  1. 这取决于您的硬件
  2. 如果这个对象是不可变的,那么每个请求最好保存在内存中。如果不 - 取决于。
  3. 在任何情况下,工作流打开连接到数据库 - 获取数据 - 返回结果 - 免费数据将消耗比缓存内存更多的资源。

例如,在我们的项目中,我们处理高清图像,并保留所有对象在内存中 - 3-7mb的原始格式。测试表明,这比使用任何缓存系统(如redis或couch base)效率更高。

+0

ya对象是不可变的 –

1

我会保留最新的版本作为内存对象,并保存它。这样,如果出现任何崩溃,你就有备份。但是,如果您编辑文件,我只会将其保存为数据库对象。

每2秒钟访问该对象的数据库可能会正常工作,但1.2MB的内存并不多,如果可以保留该内容,则服务器不会出现问题。

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

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

+0

雅我保持txt作为备份 –