Имеет ли смысл использовать Redis и Mongodb? - PullRequest
5 голосов
/ 26 июля 2011

У нас много данных, решили использовать mongodb, и он отлично работает.

Мы начали использовать redis для отслеживания активных пользователей в нашем приложении в реальном времени. Мы также начали делать паб / субканал с Redis.

Нашим следующим шагом может быть использование mongodb для неактивных данных и redis для активных данных. Примером этого может служить то, что все наши пользователи хранятся в mongodb, но когда они вошли в систему, мы переместим копию этих данных в redis для быстрого доступа. Мы также храним такие вещи, как их игровая активность, в redis и соответственно используем данные. Когда пользователь выходит из системы, мы сохраняем все, что ему нужно, в mongo, где он будет жить, пока его снова не понадобится, и загрузим его в redis.

Одна вещь, которую мы изучали, - это сохранение redis при сбое. Пользовательская активность в системе - это значимые данные, которые мы не хотели бы потерять при сбое, и если мы регистрируем данные только после факта, следует ли сохранять резервную копию важных данных в Монго после каждого события? Тогда при сбое редис можно восстановить из монго?

Есть ли лучший способ достичь того, чего мы пытаемся достичь?

Спасибо!

1 Ответ

6 голосов
/ 26 июля 2011

ОК, так что есть несколько точек зрения на этот вопрос. Первое, на что следует обратить внимание, это то, что у redis есть настраиваемое пользователем постоянство .

Пользовательская активность в системе - это значимые данные, которые мы не хотели бы потерять при сбое, и если мы регистрируем данные только после факта, следует ли сохранять резервную копию важных данных в Монго после каждого события?

Если честно, настройка по умолчанию с MongoDB - это сброс на диск каждые 60 секунд. Таким образом, у вас все еще есть 60-секундное окно потери данных.

  1. Вы можете использовать ведение журнала и уменьшить это окно до 100 мс, но это увеличит нагрузку на IO.
  2. Вы также можете настроить своих писателей так, чтобы они ожидали сброса этого журнала (WriteConcern: fsync), но это значительно замедлит запись.

Есть ли лучший способ достичь того, чего мы пытаемся достичь?

Действительно зависит от того, чего вы пытаетесь достичь.

  • С каким типом потери данных вы можете справиться?
  • Redis имеет репликацию , вы используете это? Решает ли это большинство ваших проблем с потерей данных?
  • Вы говорите, что используете функции PubSub, сколько узлов это покрывает? Являются ли ваши данные адекватно реплицированными только в результате этого?

В любом случае, это несколько сложная проблема. MongoDB может решить ваши проблемы, но репликация может решить и эти проблемы. Зависит от вашего уровня комфорта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...