1

我正在使用 node.js 构建一个聊天服务器应用程序。

我需要将聊天记录保存在数据库中,并且想使用像 mongodb 这样的 nosql 数据库。如果我在关系数据库世界中,我会创建用户、chat_sessions 和 chat_messages 表,并且对于每条新消息,我都会在 chat_messages 表中添加新记录。

nosql 中最好的方法是什么?

我是否必须创建一个 chat_session 文档,并在其中创建一个为每条新消息更新的 chat_messages 结构,或者是否有更好的方法来为 nosql/mongodb 执行此操作?

4

1 回答 1

2

您将使用类似的方法并将每条新消息作为单独的文档插入到集合中(可能每个房间或频道都有一个)。

MongoDB 中的文档有 16mb 的限制,因此将整个历史记录存储在一个文档中,该文档以无限的方式增长,这将是一个糟糕的选择。

您可以对用户名进行反规范化并将其存储在消息本身中,以避免查询两个表(这可能是关系数据库中的联接)。

将数据拆分为多个数据库而不是集合(每个房间、通道等)可​​能是有意义的,因为当前 mongodb 具有数据库级别的写锁。这将允许您使用 mongodb 和 node.js 实现更高的写入并发性。

于 2013-05-22T15:04:55.330 回答