Рекомендация NoSQL для проекта (потоковая передача текста) - PullRequest
2 голосов
/ 27 марта 2012

Я ищу рекомендацию по NoSQL DB ... вот над чем я работаю:

Я пишу веб-клиент для доставки текстовых потоков (в основном, подписи в реальном времени)для значительного числа потребителей.Как только все будет налажено, в любой момент может произойти более 100 событий.Многие из них будут небольшими (<10 потребителей), но некоторые из них могут быть довольно большими (более 10 000 потребителей одновременно, а может и больше?). </p>

В ходе каждого события текст будет накапливаться с любой скоростью.от нескольких слов в минуту до 200+ слов в минуту.Каждый потребитель будет использовать веб-клиент (браузер на рабочем столе / ноутбуке / планшете / смартфоне), который будет периодически опрашивать любой текст, который он еще не получил.Для данного пользователя также будет возможно запросить полный текст события до того момента, когда он сделает запрос.Завершенные события должны задерживаться на некоторое время, но будут удалены в течение 24-36 часов после их завершения.

Моя первая мысль - использовать Redis, у которого есть методы для добавления текстового значения в хранилище данных.а также встроенную поддержку для получения подстроки из конца текстового значения (т. е. клиент может просто сохранить смещение символа последнего полученного символа и передать его клиентскому API, который будет использоваться для извлеченияподстрока из текста события).Я обеспокоен тем, что рост строки, содержащей текст события, может быть необычным использованием Redis и может вызвать у меня некоторые проблемы.

Итак ... есть ли NoSQL DB, которая кажется особенно подходящей для этого?своего рода приложение?Есть ли существенная причина НЕ использовать Redis для чего-то подобного?

1 Ответ

0 голосов
/ 30 марта 2012

Основной открытый вопрос - что делать с новыми клиентами. Например, скажем, событие началось, и кто-то подключается к нему на несколько минут. Нужно ли им все с самого начала или просто с момента их подключения?

Если последний, я бы рекомендовал систему сообщений вместо добавления строк в строки. Один из способов - использовать Redis ' Pub / Sub . Это выглядит лучше всего, особенно если новым соединениям не нужно все с самого начала. Для более длительного хранения клиент, который слушает, как и любой другой, и запись в архиве - предпочтительно через локальный кеш, а затем загружает завершенную расшифровку после завершения или в процессе. Я бы держал потребности и код в реальном времени отдельно от запросов истории и архивов.

Другим способом было бы использовать упорядоченный набор, используя временную метку для времени, когда была сделана запись. В результате клиент только отслеживает последнее обновление и получает что-либо с этого времени. Документацию по заказанным комплектам можно найти здесь . Этот метод также предоставляет возможность выбрать область времени из стенограммы. Приложив немного математики, вы можете даже воспроизвести событие с точки зрения стенограммы, как если бы оно было живым. Если у вас есть десятки тысяч клиентов, тянущих всю стенограмму каждый опрос

Еще одним преимуществом упорядоченного набора меток времени является строковое кодирование. При использовании строк Redis и getrange необходимо использовать кодировки фиксированной ширины. Диапазон смещений байтов, а не смещений символов. Если вам нужна возможность поддержки, скажем, UTF-8, это может быть проблемой для вас.

Третий вариант - добавить строку текста в список. Это похоже на отсортированный набор, за исключением того, что ваш клиент хранит последний индекс (размер списка) и при каждом опросе пытается получить что-нибудь от lastIndex + 1 до конца.

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