-1

Я пишу многочасовое приложение, которое требует постоянного хранения разговоров (т.е. новые пользователи должны иметь возможность видеть старые сообщения). Я использую socket.io, если это помогает.Node chatroom, хранить сообщения в массиве или просто redis?

В настоящее время, когда пользователь входит в комнату, мое приложение-узел проверяет, был ли кто-то еще в этой комнате (и в каждой комнате есть иерархический родитель, например, комната под названием «Домашние животные» может принадлежать Северной Америке, так как там 'd быть отдельной европейской комнатой для домашних животных).

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

Итак, у меня есть многомерный массив с именем messages["PARENT"]["ROOM"], так что messages["North America"]["Pets"] будет массивом, который имеет все сообщения для этой комнаты. Помимо непонимания того, как массивы в JS работают (как объясняется в этом вопросе: javascript push multidimensional array), похоже, что я слишком усложняю ситуацию. Мои аргументы в пользу использования массива MD состояли в том, что не было смысла совершать круговые поездки, запрашивая все сообщения из Redis для комнаты, которая была активной.

Что было бы самым логичным подходом к тому, что я пытаюсь выполнить? Должен ли я просто использовать Редис и отказаться от этого? Как насчет очереди сообщений или, возможно, сервера pubsub? (Я пытаюсь не усложнять это, поскольку это просто прототип для друга).

Спасибо,

+0

В качестве побочного примечания я не являюсь разработчиком узлов, который просто помогал другу. – StackOverflowed

ответ

2

С архитектурной точки зрения, это плохой дизайн. Что, если завтра вы захотите масштабировать это приложение, настроив больше серверов? Разумеется, эти многомерные массивы будут специфичны для каждого экземпляра узла. Развязка хранилища имеет свои преимущества, один из которых масштабируется - хранилище теперь распределяется между несколькими серверами. Все зависит от того, чего вы хотите достичь. У вас может также закончиться нехватка памяти, если ваш MD увеличивается в размере, что затрудняет производительность ваших приложений.

+0

Я полностью согласен - я просто беспокоюсь о переходе туда и обратно каждый раз, или я слишком осторожен? – StackOverflowed

+0

Да, вы, и это хорошо. Однако посмотрите на последствия, когда вашему приложению придется обрабатывать несколько пользователей. Благодаря вашему дизайну система будет очень сложной. Дизайн программного обеспечения - это само по себе @StackOverflowed –

+0

Если мой ответ оправдал ваши ожидания, то, пожалуйста, выберите ответ ради этого сообщества @StackOverflowed –

Смежные вопросы