mongodb + nodejs保存聊天记录

时间:2014-12-01 08:51:18

标签: node.js mongodb

我正在开发node.js和mongoose中的聊天系统。使用mongodb存储整个聊天记录是否很好?或者我们应该使用蚂蚁替代品吗?

2 个答案:

答案 0 :(得分:1)

好的,所以我使用评论内容稍微转换了这个问题:

  

但是很少有朋友建议最好不要使用增长的mongoDB集合。这就是为什么我有点困惑。如果你正在做这个项目你会怎么做?

关于如何有效使用MongoDB的建议。

我不确定你的朋友引用了什么引用,但MongoDB非常擅长聊天,比如初始数据永远不会更新的应用程序,也就是说你永远不会向服务器发送更新语句,只有insert()和{ {1}}(可能是一个更新,说它何时被看到,但应该是一个到位的更新)。

如果您正在更新行(文档),MongoDB将不会那么好,但是在最近的版本中,它们也变得更好了。默认情况下引入remove()意味着在文档需要移动到新的磁盘扇区之前,您实际上可以将消息增长到更接近其原始大小的2的幂,从而使磁盘重用更容易。当然,非就地更新对IO和CPU来说都是昂贵的。

至于搜索,SQL确实拥有FTS,但是,正如Stack Exchange本身所发现的那样:数据库在搜索时非常擅长。他们很快用MS弹性搜索取代了MS SQL FTS。

至于排序:我不确定为什么SQL会更好。 MongoDB可以对索引进行排序,在这种情况下,对非任务的排序在任何数据库中都是非常糟糕的做法。想象一下,必须加载数据库中的每条评论才能进行排序。因此,在排序时两者都是相同的。

通过分组,MongoDB现在具有聚合框架,但由于回归,目前缺少使用覆盖查询的容量。这意味着组将从磁盘加载,而不是仅使用索引。这确实使SQL在这方面做得更好......目前。但是,我很难看到你如何组织任何事情,你会有两张桌子:

  • 会话
  • 消息

一个屏幕显示第一个表格,第二个表格显示......第二个。

您将在第一个表格中按powerof2sizes进行过滤,在第二个表格中按user_id进行过滤。

日志是一个非常普遍要求的聊天应用程序的特性,所以与@Rax不同,我赢了,并在我的理由中使用它;我不确定如何改变除了MongoDB和其他技术之间的空间要求之外的任何东西。话虽这么说:相当多的技术实际上默认使用MVCC,这将占用比MongoDB更多的空间(值得注意的是,SQL技术不是很多数据库,比如聊天公司所采用的CouchDB等)

我还会说你读的比你写的多。每当有人发送消息时,都会有一个消息,不仅在原始的一边说'#34;它已被发送!!!"而且还要在接收端说“#34;获取下一条消息"。因此,每条消息都会触发两次读取。 MongoDB适用于那些类型的工作流程。

无论如何,那应该给你一些指示。我会试试MongoDB以及它如何为你工作。

答案 1 :(得分:0)

对于我的观点,mongodb不适合记录任何东西,因为:

  • 您的数据结构(消息,userId等)不会更改
  • 你应该以某种方式选择它,分组,订购等.SQL更适合它
  • 通常,日志通常不会被请求,因此您无需对其进行键值。
  • 您将阅读更多内容

在out project项目中,我们将最新的聊天记录存储在redis列表中(以便快速获取)以及postgres中的其他日志。