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
Форумы портала PHP.SU :: Версия для печати :: Нагрузка на БД
Форумы портала PHP.SU » » Вопросы новичков » Нагрузка на БД

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

1. nordghost - 12 Ноября, 2015 - 22:36:25 - перейти к сообщению
Вопрос больше связан с логикой чем с языком программирования. Допустим у нас есть страна, в каждой стране есть область, в каждой области город, в каждом городе район, в каждом районе улица, и в каждой улице дом, а в каждом доме - квартира, и каждая из этих сущностей разделена по отдельным таблицам, и связаны с помощью ID. В один прекрасный момент нам необходимо все их показать пользователю (прям вот так как есть соблюдая вложенность), и первое что приходит в голову это использовать циклы. Сначала выбрать все страны, потом в каждой стране выбрать города, потом в каждом городе район, и в каждом районе улицу и т.д. Что мы имеем в итоге? Тучу запросов к MySQL и это может закончиться очень печально. Как можно оптимизировать данное действие что бы снизить нагрузку на MySQL?
2. LIME - 13 Ноября, 2015 - 11:15:39 - перейти к сообщению
Свести все в единую таблицу с полем "тип сущности"
Тоесть тип улица или страна или тд и тп
Реализовать в виде nested sets ...погуглить
Тогда можно будет тащить всю иерархию одним запросом
Или ветвь дерева
Второй вариант юзать кладр
Для кладр есть готовые решения
Зависит от движка
Тоже в гугл
Както так
(Добавление)
Nested sets это способ отображения иерархии в реляционной бд
Вернее одна из оптимизаций оного
Это так....для общего понимания
3. Мелкий - 13 Ноября, 2015 - 11:21:17 - перейти к сообщению
nordghost пишет:
в каждом городе район, в каждом районе улица, и в каждой улице дом, а в каждом доме - квартира

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

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

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

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

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

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


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


Спасибо будем пробовать.
6. LIME - 13 Ноября, 2015 - 13:47:27 - перейти к сообщению
Только обязательно отпишись
Интересно как получилось
7. SAD - 13 Ноября, 2015 - 14:21:24 - перейти к сообщению
Можно заюзать сервис какой - нибудь для работы с адресами. Если только для России.

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

https://dadata[dot]ru/api/suggest/
8. LIME - 13 Ноября, 2015 - 14:49:05 - перейти к сообщению
SAD про кладр не слышал? Хотя ты нав Украине
Есть для России штука .... называется классификатор адресов и чтототамеще
Кладр
И есть решения для распространенных движков
9. SAD - 13 Ноября, 2015 - 14:54:16 - перейти к сообщению
LIME пишет:
SAD про кладр не слышал? Хотя ты нав Украине


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

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

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

Плюс сервисов:
есть API
есть плагины
не нужно париться с обновлением базы
10. LIME - 13 Ноября, 2015 - 15:01:08 - перейти к сообщению
SAD ну мэйби
Кладр боль это да
Слава помидорам не работаю с этими траблами
Но сошлись на том что самому свой кладр придумывать это дискотека на граблях
Думаю тс будет достаточно
11. nordghost - 13 Ноября, 2015 - 18:09:18 - перейти к сообщению
LIME пишет:
Только обязательно отпишись
Интересно как получилось


У меня не с адресами возня, у меня задача сделать простой генератор рабочего процесса с помощью визуального программирования на PHP+jQuery, Там есть условия и есть неслабая вложенность процессов и т.д.
12. SAD - 13 Ноября, 2015 - 18:11:02 - перейти к сообщению
тогда подробней опять таки распишите задачу
13. Panoptik - 13 Ноября, 2015 - 18:27:51 - перейти к сообщению
nested sets ни в коем случае, он не для этого предназначен и при записях > 1000 на вставку будет тупить очень прилично

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

 

Powered by ExBB FM 1.0 RC1