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

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

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

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

22 ответов

23 просмотра

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...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта