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

Доброе утро народ! Делаю чат и такая задача. Я добавил

в таблицу messages.is_view (boolean) Если кто-то его читает он станет правдой.
Проблема в том
1)когда я считаю количество, запрос очень долгое
2)Я каждый раз когда админ открывает чат обновляю вес сообщения от клиента

Вопрос: Есть другой вариант? Вы как реализовали бы?

22 ответов

20 просмотров

1) индекс на колонке стоит? 2) усложнить логику, проверяя кто читает чат.

Sarvar-PHP Автор вопроса
Евгений
1) индекс на колонке стоит? 2) усложнить логику, п...

А, я даже не думал про индексирования.🤦‍♂️ 2) чат читает только связанный оператор к сессия и клиенту

Sarvar-PHP Автор вопроса
Евгений
1) индекс на колонке стоит? 2) усложнить логику, п...

Ща поставлю индекс. Или а что если я добавлю к сессию кол-во сообщения. Всегда ++ пока админ не открывает чат

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

Sarvar-PHP Автор вопроса
Andrey Helldar
Допустим есть 2 таблицы - одна хранит инфу для чат...

В начале не было заметно. А когда все сообщения перевесил больше 50 лям у меня перевесил по временим больше 20 сек. И куча жалоб

Sarvar PHP
В начале не было заметно. А когда все сообщения пе...

Берёшь чистый SQL, добавляешь перед ним слово explain и выполняешь. В ответе будет инфа есть ли индексы. Если есть, то какие сумел использовать. Или их нет. Если индексов нет, то их либо не существует, либо запрос в них не попал.

Протестировал на таблице с 10 миллионами сообщений: https://pastebin.com/qUem3Dkh ------- --------------- ----------------------- # with index without index ------- --------------- ----------------------- min 712.827 ms 2105.372 ms max 776.636 ms 2137.057 ms avg 735.734 ms 2123.208 ms total 2218.423 ms 6379.078 ms ------- --------------- ----------------------- Order - 1 - - 2 - ------- --------------- -----------------------

Sarvar-PHP Автор вопроса
Andrey Helldar
Протестировал на таблице с 10 миллионами сообщений...

Теперь добавьте json column, а там будете искать там где у жсон message.client.chat_id=$model->chat_id

Sarvar PHP
Теперь добавьте json column, а там будете искать т...

Ни postgres, ни mysql не создают индексы на JSON поля, поэтому они всегда парсятся "как текст", грубо говоря. В JSON полях можно держать только ту информацию, которая никогда и ни при каких обстоятельствах не будет принимать участие в фильтрации.

Sarvar-PHP Автор вопроса
Andrey Helldar
Протестировал на таблице с 10 миллионами сообщений...

Хотя спасибо, у меня таблица с самого начала не правильно было продумано

Andrey Helldar
Ни postgres, ни mysql не создают индексы на JSON п...

Но можно хитро как-то, если не ошибаюсь, проиндексировать значение какого-то ключика в джсоне в мускле

Паша Финогентов
Но можно хитро как-то, если не ошибаюсь, проиндекс...

Это дикие костыли. Лучше всё же изменить структуру таблицы сообщений

Паша Финогентов
Но можно хитро как-то, если не ошибаюсь, проиндекс...

это костыль, json туда добавили, чтобы был. Для работы с json есть Монга и прочее

Паша Финогентов
Монга вообще непонятно для чего есть

могу ошибаться, но монга изначально планировался как БД в том числе и для JSON данны. Тогда как в классические SQL базы JSON добавил только в конце 10ых, на фоне роста его популярности в вебе

Vitaliy
могу ошибаться, но монга изначально планировался к...

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

Паша Финогентов
Та просто объективно хранить данные в формате json...

» переделать на норм структуру, но лень в итоге выходит прилично параметров , какой нить Яндекс Маркет пришлет JSON с кучей вложенностей , из которых для склада сейчас нужно 10 параметров, а когда что то отвалится - надо знать что пришло. Хранить JSON - как text / longtext внутри БД - большим куском, тоже извратом попахивает.

Vitaliy
» переделать на норм структуру, но лень в итоге вы...

The space required to store a JSON document is roughly the same as for LONGBLOB or LONGTEXT;

Andrey Helldar
Ни postgres, ни mysql не создают индексы на JSON п...

В postgres можно создать индекс на json поле :) CREATE INDEX ON product((info->>'name'));

Дмитрий Кожанов
В postgres можно создать индекс на json поле :) C...

В мускуле тоже через костыль. Но я не знаю использует ли постгрес физическую линковку или виртуальную.

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
7
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Всем привет! вывожу на общей стр дочерние ресурсыв каждом ресурсе галерея, и первая фотка должна выводиться на общей [!DocLister? &prepare=photo !]
Alekso
12
А можно вопрос? Мне сегодня сказали что у меня функция (которая просто заполняет массив значениями) не правильная void Full(double * arr, int n) { for (int i = 0; i < n; i...
† C E †
7
Добрый вечер. Хочу чтобы у меня в классе поле было функцией, которая возвращает строку. Делаю так: interface ... TGetOutPath = function : String of object; ... protec...
Kirill Filippenok
12
Карта сайта