|
|
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
Досталась одна БД на интернет магазине. Структуру менять не хотят, так как это затронет биллинг. Механизм в общем то простой. Есть товар с опциями и хеш к этим опциям. Хеш представляет собой все возможные комбинации опций. Чем больше опций, тем больше хешей. Получается есть таблицы с: ИД товаров, ИД опции, ИД хеш. ИД товара 1111 опции 1111;2222 1111;3333; 1111;4444 1111;5555 хеш 1111; 2222 1111; 2222.3333 1111; 2222.3333.4444 1111; 2222.3333.4444.5555 Получается, чтобы завести новую опцию надо распарсить строку хешей по точке, вставить новый ИД опции и отсортировать по возрастанию, затем записать в таблицу. Парсинг делается через регулярки в цикле SELECT, зетем собираю обратно в строку xmlagg (10g oracle). Для некоторых категорий товаров, где много опций это занимает около 30 минут - час. Вопрос: Если сделать это через хранимую процедуру JAVA и использовать в ее в селекте для каждого хеша как функцию PL/sql я выйграю в производительности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2017, 13:19 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
Архитектура попахивает говном, то, что ты называешь хешом, хешом можно назвать с большой натяжкой, а чтобы распарсить строку с разделителями, не обязательно пользоваться регулярусами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2017, 20:10 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
soulilya.... 1.Парсинг делается через регулярки в цикле SELECT, зетем собираю обратно в строку xmlagg (10g oracle). ... 2.Вопрос: Если сделать это через хранимую процедуру JAVA и использовать в ее в селекте для каждого хеша как функцию PL/sql я выйграю в производительности? 1. В цикле выполняются select-ы или в плане select что-то выполняется в цикле? Это две большие разнецы. Если в цикле select-ы, то выгоднее избавиться от переключений sql и pl/sql engine (в цикле). Если только SQLем не решить задачу, можно дописать/переписать хранимую процедуру pl/sql, так что бы появился bulk: получил в pl/sql все необходимые данные от sql один раз; обработал их в pl/sql + подготовил (массивы) к выгрузке в sql; сделал bulk выгрузки в sql (forall) docs.oracle.com/cd/E11882_01/appdev.112/e25519/overview.htm#LNPLS00104 Так оно быстрее. 2. Тов. Кайт по поводу производительности высказывался примерно так: - сделай на sql - не можешь, сделай на pl/sql -не можешь, сделай на java (не дословно, ссылку не дам) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 04:13 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
soulilyaПолучается, чтобы завести новую опцию надо распарсить строку хешей по точке, вставить новый ИД опции и отсортировать по возрастанию,... Странно: зачем каждый раз распарсивать строку, в которой каждая часть (как бы хеш) заранее была известна. Список-то опций где-то в базе есть? Если нет, сделай новую таблицу или матвью, где сохрани опции и их хеши и не занимайся прогревом cpu каждый раз. Опции-то, поди, не каждый час добавляют :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 04:41 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
--Странно: зачем каждый раз распарсивать строку, в которой каждая часть (как бы хеш) заранее была известна. Как ты новый идентификатор вставишь? Еще нужно чтобы он был отсортирован по порядку. select это имеется ввиду - курсор, для каждой строки выполняется преобразование строки хеша. Архитектура не моя, мне на оптимизацию эта хрень досталась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 09:55 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
soulilyaАрхитектура не моя, мне на оптимизацию эта хрень досталась. Тогда оптимизируй от постановки задачи и цели использования, а не от "вычищаю конюшню круглой лопатой, как сделать её квадратной?" soulilyaСтруктуру менять не хотят, так как это затронет биллинг. Значит на уровне интерфейса взаимодействия с биллингом придётся на лету собирать привычную ему херню. И, если надо, разбирать обратно там же. А хранить уже в любой удобной для обработки структуре. От реляционной и до UDT/XML. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 10:02 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
Как-то у меня есть подозрения, что по этому "хешу" потом LIKE'ами ищут. Но зачем распарсивать строчку, когда ее можно просто всю собрать заново - мне тоже не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 10:28 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
если новый "ИД опции" будет больше, чем предыдущие, то искать посерёдке не надо, можно дописывать в конец ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 12:25 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
--Но зачем распарсивать строчку, когда ее можно просто всю собрать заново - мне тоже не понятно. Это дольше, я проверял. ---Как-то у меня есть подозрения, что по этому "хешу" потом LIKE'ами ищут. Так оно и есть. ---Значит на уровне интерфейса взаимодействия с биллингом придётся на лету собирать привычную ему херню. Увеличивает время работы билинга свыше допустимого, пробобовал. --если новый "ИД опции" будет больше, чем предыдущие, то искать посерёдке не надо, можно дописывать в конец Перед этим тебе надо сравнить значения в строке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 12:42 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
soulilyaУвеличивает время работы билинга свыше допустимого, пробобовал. показывай, как пробовал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 12:51 |
|
||
|
Оптимизация создания хешей для товаров.
|
|||
|---|---|---|---|
|
#18+
На каком этапе наибольшие затраты времени? - что хотите оптимизировать? Одним ударом всё ? найти строки с нужным товаром распарсить строку хешей по точке вставить новый ИД опции отсортировать по возрастанию собираю обратно в строку xmlagg и т.п. Для начала замерьте с помощью DBMS_UTILITY.GET_TIME, ещё лучше запустите с трассировкой dbms_monitor.SESSION_TRACE_ENABLE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2017, 13:17 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39443208&tid=1886044]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
195ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 231ms |
| total: | 523ms |

| 0 / 0 |
