Size: a a a

pgsql – PostgreSQL

2021 June 28

KZ

Konstantin Zaitsev in pgsql – PostgreSQL
Что-то производительностью по count чисто по индексу?
источник

С

Сергей in pgsql – PostgreSQL
В телеграме после прочтения одного сообщения происходит декремент кол-ва непрочитанных
источник

KZ

Konstantin Zaitsev in pgsql – PostgreSQL
Только подряд и на клиенте, на сервер отправляется прочитано до такого то
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
И что, их можно читать в произвольном порядке?
Вы же сами пишете:
> А потом считать сколько новых сообщений в чате после последнего прочитанного сообщения?
источник

С

Сергей in pgsql – PostgreSQL
Поправьте, если я ошибаюсь. Система следующая: сохранять последнее прочтенное сообщение для каждого участника чата, а при необходимости узнать количество непрочитанных сообщений, производить подсчет сообщений, которые идут после последнего прочтенного?
источник

V

Valery in pgsql – PostgreSQL
А вам этот подсчет нужен для клиента или для какой-то аналитики со стороны чат-сервера?
источник

С

Сергей in pgsql – PostgreSQL
Клиент
источник

С

Сергей in pgsql – PostgreSQL
Но ваш вариант с подсчетом на клиенте не подходит, как я уже писал, может быть несколько клиентов у пользователя (смартфон, десктоп)
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Я имел в виду только то, что, если это "обычный" мессенджер, индивидуально хранить статусы сообщений явно не нужно.
А далее — да, можно хранить последнее прочтённое сообщение.
И ещё, если не нужен 100% точный счётчик, и id выдаются централизованно и почти всегда последовательно — вообще ничего считать не надо.
источник

V

Valery in pgsql – PostgreSQL
На сервер отправляем последнее прочтенное сообщение с устройства и все, проблема нескольких устройств решена
источник

С

Сергей in pgsql – PostgreSQL
Этот вариант с последним сообщением не подходит, так как это опять же использовать COUNT(*) WHERE id > [last_read_message_id]. Нужен 100% счетчик.
источник

V

Valery in pgsql – PostgreSQL
Опишите ваше понимание "отправить последнее сообщение на сервер"
источник

С

Сергей in pgsql – PostgreSQL
При прочтении сообщения, отправить запрос, который установит его в качестве последнего прочтенного для определенного пользователя
источник

С

Сергей in pgsql – PostgreSQL
Таблица members, у которой есть колонка last_read_message_id
источник

V

Valery in pgsql – PostgreSQL
Ага. А то, что этот номер нужен всего для двух вещей- синхронизировать между разными устройствами прочитанные сообщения и отметка для отсылки новых сообщений - вы согласны?
источник

V

Valery in pgsql – PostgreSQL
Для того, чтобы пользователь видел, сколько у него непрочитанных сообщений, ему не надо считать на сервере эту цифру- у него уже есть список сообщений и номер прочитанного
источник

V

Valery in pgsql – PostgreSQL
Вот вам 100% точный счётчик без нагрузки на БД сервера
источник

С

Сергей in pgsql – PostgreSQL
Вы предлагаете при отправке сообщения любым пользователем делать инкремент общего количества сообщений отправленных в чате (таблица chats, столбец message_count), а для пользователя, хранить номер последнего прочитанного сообщения (таблица members, столбец last_read_message_index) и при выборке считать разницу message_count - last_read_message_index?
источник

KZ

Konstantin Zaitsev in pgsql – PostgreSQL
Почему вы на клиенте то не хотите подсчитать сколько их в условном «массиве»?
источник

V

Valery in pgsql – PostgreSQL
Я предлагаю на стороне чат сервера отправлять клиенту сообщение и получать от клиента номер последнего прочтенного сообщения. В этом случае клиент имеет список полученных сообщений и знает номер последнего прочтенного сообщения. Обладая этой информацией, клиент способен сам правильно отобразить число непрочитанных сообщений
источник