Py学习  »  MongoDB

MongoDB嵌套数组的存储空间是否非常长?

Ker Li • 4 年前 • 361 次点击  
< Buff行情>

我做了一个聊天系统,聊天室里的所有信息都是通过MongoDB的文档存储的。 发送的每条消息都附加到房间消息数组中。

< /块引用>

数据结构如下:

这是 blog thinks this is the right storage.

但是 The official documentation says each document cannot be more than 16 MB

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/37874
 
361 次点击  
文章 [ 2 ]  |  最新文章 4 年前
Ker Li
Reply   •   1 楼
Ker Li    5 年前

作为我自己问题的后续行动:

我需要控制房间消息的长度小于100,类似于队列、先进先出的方法。

Golang的示例代码如下:

query := bson.M{
    "room_customer.customer_id": msg.FromUserName,
}
changes := bson.M{
    "$push": bson.M{"room_messages": bson.M{"$each": []model.RoomMessage{
        {    
            Msg:        msgText,
            CreateTime: time.Now(),
        },
    },
    "$slice": -100}},
}
roomCollection.Update(query, changes)

这样,您就可以随时保持聊天室的聊天记录多达100条信息,希望对遇到类似问题的人有所帮助!

Juan Bermudez
Reply   •   2 楼
Juan Bermudez    5 年前

这确实取决于您将如何查询数据,但我认为设计是可以的。 将所有消息都放在聊天文档中可以保证一致性,并保证您在并发问题上的聊天安全。

关于16MB的限制,我觉得还可以。

不管怎样,出于性能原因,我不会将消息的整个历史记录保存在文档中(如果聊天室很忙,查询速度会变得非常慢),但是我会将聊天列表的大小限制为100个元素(最新的元素),并使用另一种方法来备份整个聊天室历史记录。