горе-прогер
12.11.2015 - 15:53
Приветствую всех!
У меня на сайте имеется раздел для личной переписки. Так вот, когда пользователь отправляет новое сообщение то скрипт 4 раза обращается к БД. Это много или нормально, сколько запросов в идеале должно быть для таких целей? Ниже опишу то как это у меня работает.
Первое обращение в БД - проверка что пользователь добавлен в контакты.
Второе обращение - запись нового сообщения в БД
Третье - помечаю сообщение как отвеченное (И не только, на самом деле, с этим же запросом сохраняется последний ID, чтобы потом знать с какого сообщения динамически подгружать другие)
Четвертное - Помечаем сообщение как непрочитанное для контакта которому его отправили (Сделано так для будущего группового чата, чтобы подсчет непрочитанных сообщений велся у каждого отдельно)
Какой совет вы можете дать по этому поводу?
Это вообще нормально столько запросов за раз?
Со структурой таблиц все в порядке, ключи, индексы и т.д. все настроена как подобает. И речь не идет о мультизапросах, меня больше волнует именно запросы которые будет осуществлять MySQL для записи, обновлений и выборки.
AllesKlar
12.11.2015 - 16:11
Цитата (горе-прогер @ 12.11.2015 - 13:53) |
Третье - помечаю сообщение как отвеченное (И не только, на самом деле, с этим же запросом сохраняется последний ID, чтобы потом знать с какого сообщения динамически подгружать другие) Четвертное - Помечаем сообщение как непрочитанное для контакта которому его отправили (Сделано так для будущего группового чата, чтобы подсчет непрочитанных сообщений велся у каждого отдельно) |
Это одна и та же запись в таблице?
Если да, то можно одним UPDATE обойтись
_____________
[продано копирайтерам]
Zzepish
12.11.2015 - 16:13
Чтоб не постить лишние темы: выборка из 4-х таблиц в 4 запросах - это норма?
горе-прогерЕсли они логические не связаны, то чего переживать? У меня есть страницы где 10 раз обращается к БД.
Другой разговор, что бывает можно за один раз все вытащить через JOIN, но только там где это нужно.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Цитата |
Чтоб не постить лишние темы: выборка из 4-х таблиц в 4 запросах - это норма? |
Ну вот не могу понять вопрос. Зависит-же от логики скрипта, где-то норма где-то нет.

Конечно надо стараться сокращать число запросов к БД, но есть места где не обойтись без отдельных запросов и даже есть места где можно сделать JOIN, но не нужно из-за высоких затрат на объединение, скажем.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
inpost
12.11.2015 - 16:21
горе-прогерЭто очень мало.
_____________
Обучаю веб-программированию качественно и не дорого:
http://school-php.comФрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Zzepish
12.11.2015 - 16:22
GET
просто нужно сделать выборку, для занесения данных а массив)
4 независимые таблицы. JOIN'ом нечего соединять)
горе-прогер
12.11.2015 - 16:28
Цитата (AllesKlar @ 12.11.2015 - 16:11) |
Это одна и та же запись в таблице? Если да, то можно одним UPDATE обойтись |
Нет, разные. Логика скрипта не позволяет осуществить это в одной таблице!
горе-прогер
12.11.2015 - 16:29
Цитата (GET @ 12.11.2015 - 16:13) |
горе-прогер
Если они логические не связаны, то чего переживать? У меня есть страницы где 10 раз обращается к БД.
Другой разговор, что бывает можно за один раз все вытащить через JOIN, но только там где это нужно. |
Все таблицы, по сути, не связаны между собой. Дело в том, что переписка может быть активной, а переписываться могут сразу 1000 и больше пользователей, вот и думаю, нормально ли это для приложения или нет
горе-прогер
12.11.2015 - 16:30
Цитата (inpost @ 12.11.2015 - 16:21) |
горе-прогер Это очень мало. |
Ну не знаю) Я привередлив к производительности. Тем более речь идет о скрипте к которому много пользователей и часто будут обращаться. Здесь в корне все меняется
Цитата |
Ну не знаю) Я привередлив к производительности. Тем более речь идет о скрипте к которому много пользователей и часто будут обращаться. Здесь в корне все меняется |
Цитата |
Первое обращение в БД - проверка что пользователь добавлен в контакты. Второе обращение - запись нового сообщения в БД Третье - помечаю сообщение как отвеченное (И не только, на самом деле, с этим же запросом сохраняется последний ID, чтобы потом знать с какого сообщения динамически подгружать другие) Четвертное - Помечаем сообщение как непрочитанное для контакта которому его отправили (Сделано так для будущего группового чата, чтобы подсчет непрочитанных сообщений велся у каждого отдельно) |
ну можно попробывать спланировать по другому архитектуру БД, у меня например всё в одной таблице, +подключается еще одна в случае если нужно плюсануть личку, но у меня и инициация переписки не совсем обычная, из-за особенностей самого приложения.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
горе-прогер
12.11.2015 - 16:46
Цитата (GET @ 12.11.2015 - 16:39) |
ну можно попробывать спланировать по другому архитектуру БД, у меня например всё в одной таблице, +подключается еще одна в случае если нужно плюсануть личку, но у меня и инициация переписки не совсем обычная, из-за особенностей самого приложения. |
Я как только не ломал голову над архитектурой БД.
Не хочется проектировать таблицы так, чтобы скрипт часто обращался к таблице с сообщениями т.к. эта самая тяжелая таблица будет. Да и в любом случае, чтобы все работало без каких либо ограничений (без урезания функционала) то по другому я ничего не могу придумать, на самом деле долго голову ломал на этим. И поэтому меня сильно заволновал вопрос, нормально ли столько обращений, если принимать во внимание тот факт, что сайт будет посещаемым, скажем от 10 тыс и больше
sergeiss
12.11.2015 - 16:47
Цитата (горе-прогер @ 12.11.2015 - 15:53) |
Какой совет вы можете дать по этому поводу? Это вообще нормально столько запросов за раз? |
"Не трожь работающую систему!" (с) один из "Законом Мерфи"

А вообще, если хочется пооптимизировать, то внимательно почитай про триггеры. Для некоторых позиций из перечисленных они тебе очень даже пригодятся. В частности, для пп. 3 и 4. Они, т.е. триггеры, позволят тебе не делать некоторые запросы, т.к. они будут сделаны автоматически (при выполнении запросов из пп.1 и 2).
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
горе-прогер
12.11.2015 - 16:54
Цитата (sergeiss @ 12.11.2015 - 16:47) |
А вообще, если хочется пооптимизировать, то внимательно почитай про триггеры. Для некоторых позиций из перечисленных они тебе очень даже пригодятся. В частности, для пп. 3 и 4. Они, т.е. триггеры, позволят тебе не делать некоторые запросы, т.к. они будут сделаны автоматически (при выполнении запросов из пп.1 и 2). |
Да, я слышал, даже как-то давненько экспериментировал с ними, вот только давно было.
Триггреы ведь MYISAM поддерживают? Я уже и не помню
Ну не беда 
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.