Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Нагрузка на БД

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Запросы вложенные в цикл
nordghost
Отправлено: 12 Ноября, 2015 - 22:36:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 319
Дата рег-ции: Окт. 2011  


Помог: 3 раз(а)




Вопрос больше связан с логикой чем с языком программирования. Допустим у нас есть страна, в каждой стране есть область, в каждой области город, в каждом городе район, в каждом районе улица, и в каждой улице дом, а в каждом доме - квартира, и каждая из этих сущностей разделена по отдельным таблицам, и связаны с помощью ID. В один прекрасный момент нам необходимо все их показать пользователю (прям вот так как есть соблюдая вложенность), и первое что приходит в голову это использовать циклы. Сначала выбрать все страны, потом в каждой стране выбрать города, потом в каждом городе район, и в каждом районе улицу и т.д. Что мы имеем в итоге? Тучу запросов к MySQL и это может закончиться очень печально. Как можно оптимизировать данное действие что бы снизить нагрузку на MySQL?


-----
<a href="http://netbeans[dot]org/">Моя любимая IDE</a> :3
 
My status
 Top
LIME
Отправлено: 13 Ноября, 2015 - 11:15:39
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Свести все в единую таблицу с полем "тип сущности"
Тоесть тип улица или страна или тд и тп
Реализовать в виде nested sets ...погуглить
Тогда можно будет тащить всю иерархию одним запросом
Или ветвь дерева
Второй вариант юзать кладр
Для кладр есть готовые решения
Зависит от движка
Тоже в гугл
Както так
(Добавление)
Nested sets это способ отображения иерархии в реляционной бд
Вернее одна из оптимизаций оного
Это так....для общего понимания
 
 Top
Мелкий Супермодератор
Отправлено: 13 Ноября, 2015 - 11:21:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




nordghost пишет:
в каждом городе район, в каждом районе улица, и в каждой улице дом, а в каждом доме - квартира

Ох до чего же все эти гипотезы далеки от действительности.
Небось, ещё предполагаете, что номер дома - это цифра?

nordghost пишет:
все их показать пользователю

Нафига? Нафига юзеру все эти мегабайты информации?
Обычно дают выбрать страну. Затем аяксом подтягивают регионы. А лучше автокомплитом. Но не выгружают весь массив юзеру.


-----
PostgreSQL DBA
 
 Top
LIME
Отправлено: 13 Ноября, 2015 - 11:28:07
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Мелкий пишет:
Ох до чего же все эти гипотезы далеки от действительности.
именноУлыбка
Потому кривой кладр будет выходом я думаю
Мелкий пишет:
Обычно дают выбрать страну. Затем аяксом подтягивают регионы. А лучше автокомплитом.
ну задачи всякие бывают
Например отобразить все офисы компании принимающие скидку по всему миру
Ну от балды
Но ты понял
(Добавление)
Мелкий пишет:
Ох до чего же все эти гипотезы далеки от действительности.
например в Зеленограде нет районов
Там кварталы и номер дома содержит в себе квартал
Тоесть не цифра
Это я пояснил типа какие грабли ожидают
 
 Top
nordghost
Отправлено: 13 Ноября, 2015 - 12:06:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 319
Дата рег-ции: Окт. 2011  


Помог: 3 раз(а)




Мелкий пишет:
nordghost пишет:
в каждом городе район, в каждом районе улица, и в каждой улице дом, а в каждом доме - квартира

Ох до чего же все эти гипотезы далеки от действительности.
Небось, ещё предполагаете, что номер дома - это цифра?

nordghost пишет:
все их показать пользователю

Нафига? Нафига юзеру все эти мегабайты информации?
Обычно дают выбрать страну. Затем аяксом подтягивают регионы. А лучше автокомплитом. Но не выгружают весь массив юзеру.


Задача стоит не такая, в данном случае был упрощённый пример. Сама задача немного посложнее.
(Добавление)
LIME пишет:
Свести все в единую таблицу с полем "тип сущности"
Тоесть тип улица или страна или тд и тп
Реализовать в виде nested sets ...погуглить
Тогда можно будет тащить всю иерархию одним запросом
Или ветвь дерева
Второй вариант юзать кладр
Для кладр есть готовые решения
Зависит от движка
Тоже в гугл
Както так
(Добавление)
Nested sets это способ отображения иерархии в реляционной бд
Вернее одна из оптимизаций оного
Это так....для общего понимания


Спасибо будем пробовать.


-----
<a href="http://netbeans[dot]org/">Моя любимая IDE</a> :3
 
My status
 Top
LIME
Отправлено: 13 Ноября, 2015 - 13:47:27
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Только обязательно отпишись
Интересно как получилось
 
 Top
SAD
Отправлено: 13 Ноября, 2015 - 14:21:24
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




Можно заюзать сервис какой - нибудь для работы с адресами. Если только для России.

https://dadata[dot]ru/ к примеру

https://dadata.ru/api/suggest/

(Отредактировано автором: 13 Ноября, 2015 - 14:22:26)

 
 Top
LIME
Отправлено: 13 Ноября, 2015 - 14:49:05
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




SAD про кладр не слышал? Хотя ты нав Украине
Есть для России штука .... называется классификатор адресов и чтототамеще
Кладр
И есть решения для распространенных движков
 
 Top
SAD
Отправлено: 13 Ноября, 2015 - 14:54:16
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




LIME пишет:
SAD про кладр не слышал? Хотя ты нав Украине


Слышал и работал без сервисов. Боль еще та.

Тот сервис, который я скинул, с ФИАС работает, вроде как.

Есть, вроде, и другие сервиса

Плюс сервисов:
есть API
есть плагины
не нужно париться с обновлением базы

(Отредактировано автором: 13 Ноября, 2015 - 14:56:25)

 
 Top
LIME
Отправлено: 13 Ноября, 2015 - 15:01:08
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




SAD ну мэйби
Кладр боль это да
Слава помидорам не работаю с этими траблами
Но сошлись на том что самому свой кладр придумывать это дискотека на граблях
Думаю тс будет достаточно
 
 Top
nordghost
Отправлено: 13 Ноября, 2015 - 18:09:18
Post Id



Посетитель


Покинул форум
Сообщений всего: 319
Дата рег-ции: Окт. 2011  


Помог: 3 раз(а)




LIME пишет:
Только обязательно отпишись
Интересно как получилось


У меня не с адресами возня, у меня задача сделать простой генератор рабочего процесса с помощью визуального программирования на PHP+jQuery, Там есть условия и есть неслабая вложенность процессов и т.д.


-----
<a href="http://netbeans[dot]org/">Моя любимая IDE</a> :3
 
My status
 Top
SAD
Отправлено: 13 Ноября, 2015 - 18:11:02
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2508
Дата рег-ции: Май 2009  
Откуда: Днепропетровск, Украина


Помог: 75 раз(а)




тогда подробней опять таки распишите задачу
 
 Top
Panoptik
Отправлено: 13 Ноября, 2015 - 18:27:51
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


Помог: 131 раз(а)




nested sets ни в коем случае, он не для этого предназначен и при записях > 1000 на вставку будет тупить очень прилично

если задача реальная и боевая, то тут нужно смотреть что и для чего надо. если показывать пользователю все-все-все что есть в бд, то нужно так же ходить по уровням как хранятся данные в таблицах. от общей к частному
если нужно найти адрес из всех возможных, я бы воспользовался каким-либо поисковым движком а-ля сфинкс. проиндексировал бы все данные чтобы оно искало из строки вида
"Страна Область Район Город Улица Дом" и для автокомплита эта штука бы выдавала то что ищут, а других сложных моментов с этим я не вижу. простая иерархия без причудов


-----
Just do it
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB