我应该如何在 Node 中管理内存中的数据?

How should I manage in-memory data in Node?

我在服务器端使用 Node、Express 和 Socket.io 构建了一个简单的应用程序。我的页面在需要检索不会更改的数据时查询我的 API,并使用 WebSockets 从服务器获取动态数据的实时更新。该应用程序允许一个人 "Supervisor" 向任意数量的 "Users"(未经身份验证)发送问题,并在他们陆续进来时查看他们的答案。用户使用 POST 请求,它通过 WebSocket 流式传输到 Supervisor。服务器将用户数据存储在一个简单的数组中,并使用数组中的项目(用户)到包含每个问题和答案的对象的 ES6 映射,如下所示:

class User {}
let users = [], qa = new Map();
io.on('connection', socket => {
  let user = new User(socket.id);
  users.push(user);
  qa.set(user, {});
  socket.on('question-answered', ({id, answer}) => {
    let questionData = qa.get(user);
    questionData[id] = answer;
    qa.set(user, questionData);
  });
});

这显然是一种非常原始的数据处理方式,但我认为不需要额外的复杂性。数据不需要在服务器崩溃或重新启动时持续存在(用户的问题和答案也存储在 localStorage 中),MongoDB 甚至 Redis 对这种数据来说似乎都是大材小用。

所以我的问题是,我这样做的方式正确吗?我有什么遗漏吗?我只想要一种将数据存储在内存中并能够通过客户端 GET 请求和 socket.io 访问它的简单方法。感谢您的帮助。

如果数组和映射为您提供所需的数据访问类型,并且您不需要崩溃持久性,并且您有适当数量的内存来保存数据量,那么您就完成了.

除非您的需求(查询、持久性、性能、多用户、崩溃恢复、备份等...)需要更复杂的东西,否则不需要更多。一个简单的陈词滥调适用于此:如果它没坏,就不需要修理。