|
|
|
Проектирование суммирущих таблиц, оптимизация
|
|||
|---|---|---|---|
|
#18+
Есть задача реализовать удобный поиск в системе. Нашел очень удачное решение на сайте mobile.de: нажмите кнопку "показать" и см. закладку слева "Ограничить поиск" Суть примерно такова, что есть 1 млн записей в базе данных, быстрый поиск по данным записям возможен по примерно 15 категориям. В некоторых категориях может быть до 100 и более значений. Каждое значение категории имеет подсказку количества значений если будет выбрана данная категория. Делать насчет по общей таблицы записей не представляется возможным во вразумительное время. Для разбора данной ситуации предлагаю упрощенный вариант с четырьмя измерениями (Бренд, Категория, Модель, Продавец), для решения данной задачи предлагается создать суммирующую таблицу, в которую будут помещаться конечные "предрассчитаные" значения поиска. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Для построения одной категории (в примрере сумм по категориям) будет делаться запрос вида Код: plaintext 1. 2. 3. 4. для того, чтобы запрос работал быстро необходимо сдлеать составной индекс по brand_id и seller_id. Чтобы грубо оценить объем данных в этой таблице необходимо перемножить количества возможных значения измерений, это покроет все комбинации данных значений допустим брендов у нас 100 моделей 1000 продавцов 100 категорий 100 получается, около 1 млрд записей, допустим я сделал избыточной данную информацию и часть записей будет с нулевым количеством записей, их можно выкинуть, пусть останется 5-10 млн записей, но это все равно многовато. При 5 млн записей приведный выше запрос отрабатывает за 300мс на машине класса Core 2 Duo 2.5 Ггц, а таких запросов надо делать столько сколько категорий. В итоге получается все равно медленно, ообенно на нагруженной системе. Уважамые коллеги, конибудь решал подобного рода задачи, если решали то в каком направлении дальше можно оптимизировать данную стуктуру поисковой таблицыее наполнения, построения запросов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2009, 07:56 |
|
||
|
Проектирование суммирущих таблиц, оптимизация
|
|||
|---|---|---|---|
|
#18+
ayrtonУважамые коллеги, конибудь решал подобного рода задачи, если решали то в каком направлении дальше можно оптимизировать данную стуктуру поисковой таблицыее наполнения, построения запросов? Читать что такое есть OLAP, в частности ROLAP, а также индексированные view и материализованные представления. Дальше - читаем о partitioned view и partiotioned table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2009, 01:04 |
|
||
|
Проектирование суммирущих таблиц, оптимизация
|
|||
|---|---|---|---|
|
#18+
Роман что такое olap/dwh я знаю, я совсем о другом, я понимаю что вы клоните к измерениям по необходимым для меня параметрам, но ИМХО быстро (до 100 мс на таких задачах) это работать не будет, если у Вас есть другая информация основанная на реальном опыте построения такой же системы, то прошу поделиться временами отклика, размером основной таблице и измерениями. По сути дела моя таблица это и есть кусок DWH, но только она не полностью решает вопрос как вернуть все это быстрее 100 мс. Чего то в этой архитектуре не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2009, 12:04 |
|
||
|
Проектирование суммирущих таблиц, оптимизация
|
|||
|---|---|---|---|
|
#18+
ayrton, тогда дальше - только опитизировать архитектуру хранения. секционируйте по h.brand_id или по h.seller_id, будет мало - разносите секции по разным серверам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2009, 12:34 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=87&tid=1543223]: |
0ms |
get settings: |
5ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
57ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 217ms |
| total: | 377ms |

| 0 / 0 |
