Подходит ли вложенный массив mongodb с очень длинным хранилищем

I made a chat system, and all the information in the chatroom is expected to be stored through MongoDB's Document. Each message sent is appended to the room messages array.

Структура данных следующая:

Подходит ли вложенный массив mongodb с очень длинным хранилищем

Этот блог считает, что это правильное хранилище.

Но официальная документация говорит, что каждый документ не может быть больше 16 МБ.

  • разумна ли конструкция хранилища?
  • есть ли другой лучший дизайн?
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
154
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это действительно зависит от того, как вы будете запрашивать данные, но я думаю, что дизайн в порядке. Наличие всех сообщений в документе чата гарантирует согласованность и безопасность ваших чатов в отношении проблем параллелизма.

Насчет лимита в 16МБ, думаю, вполне нормально.

В любом случае, я бы не стал хранить всю историю сообщений внутри документа по соображениям производительности (запрос может стать очень медленным, если у вас очень загруженные чаты), но я бы ограничил размер списка чатов, скажем, 100 элементами. (самые последние), и я бы использовал другой подход для резервного копирования всей истории чата.

Спасибо за ваш комментарий. Я смогу справиться с текущим ограничением размера, перенеся историю чата.

Ker Li 05.09.2018 02:52

В продолжение моего собственного вопроса:

I need to control the length of room messages to be less than 100, similar to the queue, first-in, first-out method.

Пример кода для 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 сообщений чата в комнате для разговоров, я надеюсь, что это будет полезно для людей, которые сталкиваются с подобными проблемами!

Другие вопросы по теме