最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Redis和MongoDB;我应该如何存储大型JSON对象,性能问题

IT培训 admin 14浏览 0评论

Redis和MongoDB;我应该如何存储大型JSON对象,性能问题

我目前正在开发Node.js应用。它有一个mySql数据库服务器,我用它来存储应用程序中的所有数据。但是,我发现自己在会话存储中存储了大量与用户有关的数据。我一直通过使用express-session来存储User类的内容,但是这些User类可能很大。我正在考虑编写一种中间件,该中间件会将User类作为JSON保存到redis或mongodb并将密钥存储到会话cookie中。当我从redis或mongodb中检索JSON时,我将对其进行解析并将其用于重建User类。

我的问题是哪种方法执行速度最快且可扩展:将JSON字符串存储在Redis中,还是将我的User类的mongo文档表示形式存储在MongoDB中?谢谢!

编辑:我打算将mongoDB包含在应用程序的另一部分中,以解决另一个问题。与从mongo进行解析相比,从redis进行JSON解析还会更耗时且占用更多内存吗?在什么情况下重复出现的用户数量将使服务器内存会话成为问题?

回答如下:

[express-session具有将会话数据保存到的各种session store选项。

[AFAIK,所有这些都遵循相同的原理:它们将会话对象序列化为JSON字符串,并将该字符串存储在存储中(使用会话ID作为键)。

换句话说,使用第二个密钥将用户数据作为JSON字符串存储在Redis或MongoDB中的想法基本上与express-session使用Redis或MongoDB存储时的想法完全相同。因此,我不希望从中获得任何性能好处。

[另一种选择是将用户数据存储为适当的MongoDB文档(不序列化为JSON字符串)。在幕后,这仍然需要(反)序列化,尽管往返于BSON,而不是JSON。我从未对这两个中的哪一个进行基准测试,但是我会猜测并说JSON可能会更快。

Redis和MongoDB之间也有区别,因为Redis主要是内存中的,并且更轻量。但是,MongoDB更像是一个“真实的”数据库,它允许进行更复杂的查询,并且在可伸缩性方面具有更多选择。

因为在我看来,您仅在会话中存储临时数据(因为实际数据存储在MySQL中,所以我建议以下内容:

  • 如果您在会话中存储的数据总量适合内存,请使用Redis会话存储;
  • 如果不使用,请使用MongoDB会话存储。

Redis和MongoDB;我应该如何存储大型JSON对象,性能问题

我目前正在开发Node.js应用。它有一个mySql数据库服务器,我用它来存储应用程序中的所有数据。但是,我发现自己在会话存储中存储了大量与用户有关的数据。我一直通过使用express-session来存储User类的内容,但是这些User类可能很大。我正在考虑编写一种中间件,该中间件会将User类作为JSON保存到redis或mongodb并将密钥存储到会话cookie中。当我从redis或mongodb中检索JSON时,我将对其进行解析并将其用于重建User类。

我的问题是哪种方法执行速度最快且可扩展:将JSON字符串存储在Redis中,还是将我的User类的mongo文档表示形式存储在MongoDB中?谢谢!

编辑:我打算将mongoDB包含在应用程序的另一部分中,以解决另一个问题。与从mongo进行解析相比,从redis进行JSON解析还会更耗时且占用更多内存吗?在什么情况下重复出现的用户数量将使服务器内存会话成为问题?

回答如下:

[express-session具有将会话数据保存到的各种session store选项。

[AFAIK,所有这些都遵循相同的原理:它们将会话对象序列化为JSON字符串,并将该字符串存储在存储中(使用会话ID作为键)。

换句话说,使用第二个密钥将用户数据作为JSON字符串存储在Redis或MongoDB中的想法基本上与express-session使用Redis或MongoDB存储时的想法完全相同。因此,我不希望从中获得任何性能好处。

[另一种选择是将用户数据存储为适当的MongoDB文档(不序列化为JSON字符串)。在幕后,这仍然需要(反)序列化,尽管往返于BSON,而不是JSON。我从未对这两个中的哪一个进行基准测试,但是我会猜测并说JSON可能会更快。

Redis和MongoDB之间也有区别,因为Redis主要是内存中的,并且更轻量。但是,MongoDB更像是一个“真实的”数据库,它允许进行更复杂的查询,并且在可伸缩性方面具有更多选择。

因为在我看来,您仅在会话中存储临时数据(因为实际数据存储在MySQL中,所以我建议以下内容:

  • 如果您在会话中存储的数据总量适合内存,请使用Redis会话存储;
  • 如果不使用,请使用MongoDB会话存储。
发布评论

评论列表 (0)

  1. 暂无评论