LINUX.ORG.RU

История изменений

Исправление OxiD, (текущая версия) :

Я уже порядком забыл о чем тут речь была, какой-то некропостинг.

Но замечу что, «магистральные коннекты» (это ты так назвал репликацию видимо), какой-то непонятный set который хранится в виде b-tree (таких готовых БД не существует кажись), заставлять сервер хранить стейт клиента, отдельный микросервис (наверное спроектирован по DDD) для лайков, и вообще архитектура которую ты тут описываешь это сложная и дорогая дичь, по сравнению с тем что предложил я - просто хранить список сообщений, линейный, без всяких сетов, и когда кто-то ставит реакцию - всем в чатике уходит новое сообщение с реакцией и id сообщения к которому она относится. Когда появялется новое сообщение любого типа - клиент просто получит новое сообщеие, куда бы он ни был подключен (ну да, прям как наверное в https://nanochat.ru).

Ну да, тут есть минус - нельзя будет просто взять из базы рандомное сообщение и за O(1) увидеть его лайки (не сканируя все следующие сообщения в чате, я имею в виду).

О боже. Какой ужас, это же то, ради чего создаются чаты. Чтобы что - только я не смог придумать.

Если идти по моему пути то нужна одна любая база данных, (No)SQL, с репликацией, и/или шардированием, и в первом приближении все. При чем на диск запросы записи будут последовательные, что было-бы еще одним аргументом «за» 10 лет назад.

По твоему пути будет нужна база с синхронной репликацией, кастомными типами данных, которые будут позволять хранить зачем-то огромные set в виде дерева на диске, реплицировать состояние клиента ( и решать конфликты, когда вдруг окажется, что соединения протухают не мгновенно). И да, установка лайка приведет к рандомному чтению с диска (что было-бы минусом 10 лет назад).

В обоих случаях еще нужна какая-то система нотификации что новое сообщение появилось, но это успешно решается уже редисом например, с pub/sub.

Но вообще твое решение будет наверное ок, пока живет на одном сервере и без «магистральных» коннектов.

Исходная версия OxiD, :

Я уже порядком забыл о чем тут речь была, какой-то некропостинг.

Но замечу что, «магистральные коннекты» (это ты так назвал репликацию видимо), какой-то непонятный set который хранится в виде b-tree (таких готовых БД не существует кажись), заставлять сервер хранить стейт клиента, и вообще архитектура которую ты тут описываешь это сложная и дорогая дичь, по сравнению с тем что предложил я - просто хранить список сообщений, линейный, без всяких сетов, и когда кто-то ставит реакцию - всем в чатике уходит новое сообщение с реакцией и id сообщения к которому она относится. Когда появялется новое сообщение любого типа - клиент просто получит новое сообщеие, куда бы он ни был подключен (ну да, прям как наверное в https://nanochat.ru).

Ну да, тут есть минус - нельзя будет просто взять из базы рандомное сообщение и за O(1) увидеть его лайки (не сканируя все следующие сообщения в чате, я имею в виду).

О боже. Какой ужас, это же то, ради чего создаются чаты. Чтобы что - только я не смог придумать.

Если идти по моему пути то нужна одна любая база данных, (No)SQL, с репликацией, и/или шардированием, и в первом приближении все. При чем на диск запросы записи будут последовательные, что было-бы еще одним аргументом «за» 10 лет назад.

По твоему пути будет нужна база с синхронной репликацией, кастомными типами данных, которые будут позволять хранить зачем-то огромные set в виде дерева на диске, реплицировать состояние клиента ( и решать конфликты, когда вдруг окажется, что соединения протухают не мгновенно). И да, установка лайка приведет к рандомному чтению с диска (что было-бы минусом 10 лет назад).

В обоих случаях еще нужна какая-то система нотификации что новое сообщение появилось, но это успешно решается уже редисом например, с pub/sub.

Но вообще твое решение будет наверное ок, пока живет на одном сервере и без «магистральных» коннектов.