170 похожих чатов

Всем привет! Ищу совета. Есть система в которой сейчас в онлайне

примерно 2000 клиентов. У них есть две вещи которые интересны и их нужно накопить и отображать всем заинтересованным:
- Текущее состояние.
- Текущее действие которое клиент выполняет. Действий может быть одновременно не более двух.

Суть в том что нужен паралельный веб-сервис который будет хранить состояния всех этих клиентов в себе (отдельно от самой системы в которой эти состояния есть), а в следующей итерации так же будут храниться все текущие действия и отдавать всем желающим по запросу. Данные должны быть актуальны с задержкой не более 1 секунды. Клиенты будут передавать всю информацию об изменении своего состояния и своих действиях в эту систему.

Тоесть грубо говоря будет сервис который будет слушать от всех клиентов любые изменения, обрабатывать их и соответственно вносить изменения в две сводные таблицу состояний состояющую в текущих условиях из ~2000 и <4000 строк.

Вопрос - где эти самые состояния хранить? В SQL базе данных - не уверен что хорошая идея. Слишком частые обновления данных будут происходить и любой затык на уровне БД не обеспечит того что в сервисе будут данные в реальном времени.
В первом приближении я видел это как банальное хранение словаря в памяти веб. приложения с периодическим сбросом в json файл на случай если произойдет рестарт или еще что, что очистит память.
Но всё осложняется тем что веб-сервер не один, используется кластер и соответственно у каждого будет своя память и так не заработает. Можно конечно отдельно развернуть только на одном но не уверен что это хорошая идея.
Дальше посмотрел Redis, но не уверен что он вообще подходит под эту задачу, всё таки это больше кэш чем некая сверхбыстрая БД.
Ведь задача не просто хранить 2000 строк, но и постоянно их модифицировать и очень быстро формировать сводную таблицу из них и отдавать.

Какие есть варианты для организации подобного сервиса?
Или всё таки SQL?

2 ответов

7 просмотров

Ну у ms sql есть inmemory таблицы :)

Редис?

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Ты просто гитлеровскую эстетику плохо понимаешь. Он же всё под Цезаря делал. А это как бы запрещённый приём в политике. Пиджаки они зачем все носят? Чтобы показать что они тип...
Ivan Kropotkin
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
а чем лучше всего сделать глобальный лок, если много нодов, до сотни? ну то есть мне надо, чтобы некоторые операции с объектом не происходили одновременно. перемещение между н...
Д. П.
15
Hi guys, I'm looking for a good LLM course. Is there any course to learn LLMs in advanced? I'm aiming to use them in my apps, so a perfect course in my openion, is not only a ...
Taha
14
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
Легче писать на C++ чем на C, если полностью не изучать C++, а знать только основное?
Алмаз
8
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Карта сайта