我正在开发node.js和mongoose中的聊天系统。使用mongodb存储整个聊天记录是否很好?或者我们应该使用蚂蚁替代品吗?
答案 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不适合记录任何东西,因为:
在out project项目中,我们将最新的聊天记录存储在redis列表中(以便快速获取)以及postgres中的其他日志。