Архитектура базы данных с использованием Redis + Node.js - PullRequest
4 голосов
/ 20 января 2011

Следуя некоторым другим SO-вопросам, я разрабатываю приложение для мониторинга веб-сайтов в качестве любимого проекта с целью узнать больше о Node.js + Redis.

Я планировал разрешить пользователям добавлять URL-адреса и добавлять их в Redis SET. Каждую минуту я получаю результаты SET, выполняю HTTP-запрос Get и печатаю ответ.

Кажется, это работает нормально, но у меня есть пара вопросов:

  1. Учитывая, что Redis SET не позволяет повторять ключи (что избавит меня от выполнения запроса на тот же URL), как я могу контролировать, когда пользователь удаляет URL из своей учетной записи, но другой пользователь имеет тот же URL ? Могу ли я иметь значение INCR в ключе URL, чтобы я знал, сколько пользователей имеют URL в своей учетной записи?

  2. Учитывая, что я делаю HTTP-запрос каждую минуту и ​​хочу использовать Redis для сохранения результатов (время отклика, вверх / вниз и т. Д.), каков наилучший способ сохранить все эти данные в Redis (результаты запросов к каждому URL каждую минуту)? Должен ли я сохранять каждый ответ в уникальном ключе Redis?

  3. Для того, чтобы показать результаты пользователю в режиме реального времени, как лучше всего запросить результаты и проанализировать их в режиме реального времени?

Спасибо за помощь.

1 Ответ

5 голосов
/ 20 января 2011

Я думаю, вы должны начать писать прототип в redis-cli. Также я хотел бы отметить эту очень хорошую статью от Саймона Уиллисона, объясняющую redis .

Учитывая, что Redis SET не позволяет повторные ключи (которые спасут меня от делать запрос на тот же URL), как я могу контролировать, когда пользователь удаляет URL из его аккаунта, но другой пользователь имеет тот же URL? Могу ли я иметь INCR значение в ключе URL, так что я знаю, как у многих пользователей есть URL в их счет?

Я бы использовал для этого SADD + INCR .

SADD urls http://www.google.com
INCR http://www.google.com

Чтобы удалить http://www.google.com Я бы просто сделал:

DECR http://www.google.com
#Only if DECR http://www.google.com => 0, then you should remove from SET
SREM urls http://www.google.com 

Учитывая, что я делаю HTTP-запрос каждый минут, и я хочу использовать Redis, чтобы сохранить результаты (время отклика, вверх / вниз, и т.д.), как лучше всего спасти эти данные в Redis (результаты запросы к каждому URL каждую минуту)?

Я бы использовал уникальный ключ для каждого URL и записывал данные в redis как json (JSON.stringify(obj)), используя MSET .

MSET data:http://www.google.com "{json for google}" data:http://www.yahoo.com "{json for yahoo}"

Чтобы показать результаты пользователю в режиме реального времени, что является лучшим способом запросить результаты и разобрать их в в режиме реального времени?

Я бы получил результаты через MGET и проанализировал json (obj = JSON.parse(json-string)).

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