Re: Древовидные структуры(Архитектура)

105 views
Skip to first unread message

Nafania

unread,
Aug 17, 2012, 3:50:54 AM8/17/12
to highloa...@googlegroups.com
IN в качестве запроса оптимальное решение в данном случае. Лучше не
будет. Конечно ключи на categories_id должны быть.
Highload здесь никакого нет. Решение банальное - кеширование.

17.08.2012 3:21, Николай Измайлов пишет:
> Всем привет! Есть категории в виде дерева и каждой категории
> принадлежат товары. Интересно услышать архитектуры решений подобного,
> именно под высокие нагрузки. Мб какие паттерны, тип таблиц, база и т.д
> Возникает проблемы есть выводить все товары во всех ветках какой то
> определенной ветки. И если писать типа такого
> SELECT .. FROM tovar WHERE categories_id IN (....) с перечислением
> всех возможных категорий. Получается слишком много id категорий,
> нужен другой подход. Спасибо!


Igor Vavrjin

unread,
Aug 17, 2012, 3:58:32 AM8/17/12
to highloa...@googlegroups.com
17.08.2012 06:21, Николай Измайлов пишет:
> Всем привет! Есть категории в виде дерева и каждой категории
> принадлежат товары. Интересно услышать архитектуры решений подобного,
> именно под высокие нагрузки. Мб какие паттерны, тип таблиц, база и т.д
> Возникает проблемы есть выводить все товары во всех ветках какой то
> определенной ветки. И если писать типа такого
> SELECT .. FROM tovar WHERE categories_id IN (....) с перечислением
> всех возможных категорий. Получается слишком много id категорий,
> нужен другой подход. Спасибо!
Можно использовать sphinx, при генерации индексов сетать в товарах
список категорий которым он принадлежит и потом sql_attr_multi на поле в
котором хранятся категории.

the.si...@gmail.com

unread,
Aug 17, 2012, 5:18:34 AM8/17/12
to highloa...@googlegroups.com, Николай Измайлов
(1) google: nested-tree
(2) Nafania дебил
(3) научись вопросы формулировать
(4) пожалуйста

Nafania

unread,
Aug 17, 2012, 5:52:15 AM8/17/12
to highloa...@googlegroups.com
Это почему еще?

17.08.2012 13:18, the.si...@gmail.com пишет:
Message has been deleted

Sergey S. Golovashov

unread,
Aug 17, 2012, 8:12:12 AM8/17/12
to highloa...@googlegroups.com

Ну ещё подеритесь, девочки


17.08.2012 15:35, Anatoly Pashin написал:
Let's the war begin!

17 августа 2012 г., 20:52 пользователь Nafania <nafan...@gmail.com> написал:

Nafania

unread,
Aug 17, 2012, 8:18:04 AM8/17/12
to highloa...@googlegroups.com
Да скучно тут, почему бы и нет :)

17.08.2012 16:12, Sergey S. Golovashov пишет:

Илья Антипов

unread,
Aug 17, 2012, 8:34:10 AM8/17/12
to highloa...@googlegroups.com
Раз скучно - вопрос. В списке процессов на каждый php-fpm уходит по
9-10% cpu. Но иногда кратковременно вылезают одиночные по 40-50. Как
узнать что вызывается в этот момент и чем занят php? В ответ
достаточно пары названий программ - дальше разберусь. Заранее спасибо
и всем удачных выходных.

17 августа 2012 г., 16:18 пользователь Nafania <nafan...@gmail.com> написал:

--
С уважением,
Антипов Илья

Илья Антипов

unread,
Aug 17, 2012, 8:37:16 AM8/17/12
to highloa...@googlegroups.com
Прошу прощения. Забыл:
PHP 5.3.10 (cli) (built: Mar 28 2012 22:44:06)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with XCache v1.3.2, Copyright (c) 2005-2011, by mOo

Linux version 3.0.0-12-server (buildd@crested) (gcc version 4.6.1
(Ubuntu/Linaro 4.6.1-9ubuntu3) ) #20-Ubuntu SMP Fri Oct 7 16:36:30 UTC
2011


17 августа 2012 г., 16:34 пользователь Илья Антипов
<ilan...@gmail.com> написал:

Dmitry Menshikov

unread,
Aug 17, 2012, 7:36:53 AM8/17/12
to highloa...@googlegroups.com

Не хватает еще совета использовать графоориентированные бд.

17.08.2012 14:35 пользователь "Anatoly Pashin" <b1rd...@gmail.com> написал:
Let's the war begin!
17 августа 2012 г., 20:52 пользователь Nafania <nafan...@gmail.com> написал:
Это почему еще?

Alex Filatov

unread,
Aug 17, 2012, 5:20:58 AM8/17/12
to highloa...@googlegroups.com
правильнее "Nested sets"

Dmitry Menshikov

unread,
Aug 17, 2012, 8:37:12 AM8/17/12
to highloa...@googlegroups.com

Если я правильно понял суть проблемы, то можно pinba поставить и смотреть кекие скрипты едят cpu, а потом используя таймеры определить проблемное место в коде. Это если явно нельзя отпрофайлить.

17.08.2012 15:34 пользователь "Илья Антипов" <ilan...@gmail.com> написал:

Alexander Bodnarashik

unread,
Aug 17, 2012, 4:18:52 AM8/17/12
to highloa...@googlegroups.com, Alexander Bodnarashik
Все ниженаписанное предполагает субд MySQL.
Категорически против IN :) Предельно медленные запросы получаются, при несчастливом стечении обстоятельств выполняется на порядок медленнее чем пачка SELECT ... FROM tovar WHERE categories_id=?
В зависимости от частоты правок, их характера и типов выборок может пригодиться одна из имплементаций деревьев на рсубд. С предварительным выбором может помочь статья http://demiurg.livejournal.com/53125.html (старая, картинки уже канули в лету, но общую картину показывает нормально).
Ну и как подсказали выше -  кеширование, без него любое дерево "ляжет"  при сколько-нибудь ощутимой нагрузке.
По типам таблицы - поиграйтесь с разными движками (innodb/aria/xtradb.)

Aleksandr Sytar

unread,
Aug 17, 2012, 3:57:56 AM8/17/12
to highloa...@googlegroups.com
17 августа 2012 г., 3:21 пользователь Николай Измайлов
<nekul...@gmail.com> написал:

> Всем привет! Есть категории в виде дерева и каждой категории принадлежат
> товары. Интересно услышать архитектуры решений подобного, именно под высокие
> нагрузки. Мб какие паттерны, тип таблиц, база и т.д
> Возникает проблемы есть выводить все товары во всех ветках какой то
> определенной ветки. И если писать типа такого
> SELECT .. FROM tovar WHERE categories_id IN (....) с перечислением всех
> возможных категорий. Получается слишком много id категорий, нужен другой
> подход. Спасибо!

На Хабре была статья сравнения методов хранения древовидных структур
[1] - рекомендую ее прочитать

1- http://habrahabr.ru/post/47280/

Aleksandr Sytar

unread,
Aug 17, 2012, 8:51:35 AM8/17/12
to highloa...@googlegroups.com
17 августа 2012 г., 16:34 пользователь Илья Антипов
<ilan...@gmail.com> написал:

> Раз скучно - вопрос. В списке процессов на каждый php-fpm уходит по
> 9-10% cpu. Но иногда кратковременно вылезают одиночные по 40-50. Как
> узнать что вызывается в этот момент и чем занят php? В ответ
> достаточно пары названий программ - дальше разберусь. Заранее спасибо
> и всем удачных выходных.

Xdebug, pinba

Nafania

unread,
Aug 17, 2012, 9:31:01 AM8/17/12
to highloa...@googlegroups.com
Смотря какого размера пачка. С обстоятельствами такими еще ни разу не
сталкивался.
Касательно деревьев. Деревья это хорошо и удобно. Однако они порождают
порой такие sql запросы, что запрос с IN будет просто цветочками.
Поэтому повторюсь - кешируем все и везде.
Кешируем результаты выборки из базы и обновляем кеш при изменении
структуры (а она в устоявшемся проекте меняется не часто).
Кешируем страницы в хтмл нгинксом, если не критична актуальность страницы.
итд итп.
Кеш наше все.


17.08.2012 12:18, Alexander Bodnarashik пишет:

Alexander Bodnarashik

unread,
Aug 17, 2012, 9:58:52 AM8/17/12
to highloa...@googlegroups.com, Alexander Bodnarashik
Не хочу втягиваться в "дискуссию", поэтому постараюсь кратко: все (большинство) известных подходов к построению деревьев в рсубд имеют свои слабые и сильные стороны и хотя бы в одном случае (удаление, вставка, изменение) имеют запрос не хуже, чем вариант с IN (поскольку IN тоже вполне себе подход для оперирования частями деревьев), это если строго. Если на бытовом уровне - в среднем по больнице вариант с IN отстой.
И кеш никак не спасает от задержек при первоначальной выборке (для чтения) и совсем не помогает при любых изменениях в ветках/узлах дерева.

Nafania

unread,
Aug 17, 2012, 10:35:29 AM8/17/12
to highloa...@googlegroups.com
Почему IN такие плохие? Есть какие-нибудь статьи на эту тему?
В целях самообразования хотелось бы узнать.

17.08.2012 17:58, Alexander Bodnarashik пишет:

Aleksandr Sytar

unread,
Aug 18, 2012, 4:17:09 PM8/18/12
to highloa...@googlegroups.com

На продакшене никто ничего не отлаживает, для этого есть тестовые среды.

On Aug 18, 2012 3:12 AM, "Alex Samorukov" <sa...@os2.kiev.ua> wrote:
xdebug - идиотский совет, на продакшне убьет весь перформанс. Пинба - ну может быть, но лог - куда проще включить. Такие дела.

Alex Samorukov

unread,
Aug 17, 2012, 7:12:51 PM8/17/12
to highloa...@googlegroups.com, Aleksandr Sytar
On 08/17/2012 05:51 AM, Aleksandr Sytar wrote:
> 17 О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 2012 О©╫., 16:34 О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
> <ilan...@gmail.com> О©╫О©╫О©╫О©╫О©╫О©╫О©╫:
>> О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ php-fpm О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
>> 9-10% cpu. О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ 40-50. О©╫О©╫О©╫
>> О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ php? О©╫ О©╫О©╫О©╫О©╫О©╫
>> О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
>> О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
> Xdebug, pinba
xdebug - О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫
О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫, О©╫О©╫ О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫.

Alex Samorukov

unread,
Aug 19, 2012, 12:10:00 PM8/19/12
to highloa...@googlegroups.com, Aleksandr Sytar
О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ + О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫д  xdebug О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.

On 08/18/2012 10:17 PM, Aleksandr Sytar wrote:

О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫, О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫.

On Aug 18, 2012 3:12 AM, "Alex Samorukov" <sa...@os2.kiev.ua> wrote:
On 08/17/2012 05:51 AM, Aleksandr Sytar wrote:
17 О©╫О©╫О©╫О©╫О©╫О©╫О©╫ 2012 О©╫., 16:34 О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫
<ilan...@gmail.com> О©╫О©╫О©╫О©╫О©╫О©╫О©╫:
О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫. О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ php-fpm О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫
9-10% cpu. О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫ 40-50. О©╫О©╫О©╫О©╫

О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫ О©╫ О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫ php? О©╫ О©╫О©╫О©╫О©╫О©╫
О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫ - О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫. О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫

О©╫ О©╫ О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫ О©╫О©╫О©╫О©╫О©╫О©╫О©╫О©╫.
Xdebug, pinba
Reply all
Reply to author
Forward
0 new messages