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

标签 json node.js mongodb session redis

我目前正在开发一个 Node.js 应用程序。它有一个 mySql 数据库服务器,我用它来存储应用程序中的所有数据。但是,我发现自己在 session 存储中存储了大量与用户相关的数据。我这样做的方式是使用 express-session 来存储我的用户类的内容,但是这些用户类可能非常大。我正在考虑编写一个中间件,将 User 类作为 JSON 保存到 redis 或 mongodb,并将 key 存储到 session cookie 中的存储。当我从 redis 或 mongodb 检索 JSON 时,我将解析它并使用它来重建我的 User 类。

我的问题是哪种方法性能最快且可扩展:在 Redis 中存储 JSON 字符串,还是在 MongoDB 中存储我的用户类的 mongo 文档表示?谢谢!

编辑:我计划在应用程序的另一部分包含 mongoDB,以解决不同的问题。还有从redis解析JSON会比从mongo解析更耗时和内存吗?重复出现的用户数达到多少时服务器内存 session 就会成为问题?

最佳答案

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

据我所知,这些都是通过相同的原理工作的:它们将 session 对象序列化为 JSON 字符串,并将该字符串存储在存储中(使用 session ID 作为键)。

换句话说,您使用第二个 key 将用户数据作为 JSON 字符串存储在 Redis 或 MongoDB 中的想法基本上与 express-session 在使用 Redis 或MongoDB 存储。所以我不希望从中获得任何性能优势。

另一种选择是将用户数据存储为适当的 MongoDB 文档(不序列化为 JSON 字符串)。在引擎盖下,这仍然需要(反)序列化,尽管来自和到 BSON ,不是 JSON。我从来没有对这两者中哪一个更快进行基准测试,但我会猜测并说 JSON 可能会快一点。

Redis 和 MongoDB 之间也存在差异,因为 Redis 主要位于内存中并且更轻量级。然而,MongoDB 更像是一个“真正的”数据库,允许更精细的查询,并在可伸缩性方面有更多选择。

因为在我看来您只是在 session 中存储临时数据(因为实际数据存储在 MySQL 上),所以我建议如下:

  • 如果您在 session 中存储的数据总量适合内存,则使用 Redis session 存储;
  • 如果没有,请使用 MongoDB session 存储。

关于json - Redis 和 MongoDB;我应该如何存储大型 JSON 对象,性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31121413/

相关文章:

json - 使用 Anorm 在 PostgreSQL json 字段中插入 Json 对象

node.js - 如何在 NodeJS 中从客户端取消服务器端流式 gRPC 调用?

javascript - 如何确定 JSON 中字段的数据类型

php - PHP 会自动将数字转换为字符串吗?

json - 浏览器 JSON 插件

json - 如何通过mac终端导入json文件到mongo?

javascript - PDFKit - 自定义字体 - fs.readFileSync 不是函数

javascript - 如何在 Node JS 中使用事件?

mongodb - 快速写入 MongoDB 控制台,缓慢写入 ReplSet

mongodb - $unwind 聚合框架中的对象