Optimisation a system to receive products from a database
-
- Уже с Приветом
- Posts: 349
- Joined: 24 Jul 2012 23:26
- Location: echo RU::US($me);
Optimisation a system to receive products from a database
Проблемка возникла, сэкономить серверный ресурс при выводе продукции из базы данных. Как правило мы(я) пишем метод который опираясь на айди категории выводит все совподения продуктов на юзер итерфейс. Но вот если допустим, мы вызываем главную категорию получаеться что продукт привязянный к саб-категории не проявится на юзер интерфейсе для этой главной категории. Но если мы создадим и добавим путь который имеет саб-категория от родительского айди до айди этой саб-категории наподобия 1\5\4 и отправим продукту. В первый реквест получаем айди и этот путь со всех продуктов. Переводим путь в массив или в листы и сравниваем в лупе категории айди с айди в этом массиве, если присутствует, то отправляем айди в другой массив или лист. После берём этот массив и вызываем полную инфу на продукты которые совпали. Решение может быть затёртое, не знаю, сам просто написал что первое пришло в голову, но может быть у когото есть посвежее. А то это работает для 1000 позиций продукции, а если 100000 или более. Юзер устанет ждать. СПС
-
- Уже с Приветом
- Posts: 3001
- Joined: 28 Feb 2013 03:18
- Location: NY
Re: Optimisation a system to receive products from a database
А что за база данных? Почему нельзя в одном запросе получить все релевантные продукты с помощью JOIN?
-
- Уже с Приветом
- Posts: 349
- Joined: 24 Jul 2012 23:26
- Location: echo RU::US($me);
Re: Optimisation a system to receive products from a database
MySQL, да можно, но как сапоставить отношения продукта по иностранному ключу который привязан к саб-категории, саб-категории и ..... к родительской категории которая имеет другое айди? Если я вызываю родительскую или саб-родительскую категорию.
-
- Уже с Приветом
- Posts: 3001
- Joined: 28 Feb 2013 03:18
- Location: NY
Re: Optimisation a system to receive products from a database
Шо такое иностранный ключ? Как я уже написала - JOIN между таблицами.FreemanUSA wrote: ↑10 May 2017 21:22 MySQL, да можно, но как сапоставить отношения продукта по иностранному ключу который привязан к саб-категории, саб-категории и ..... к родительской категории которая имеет другое айди? Если я вызываю родительскую или саб-родительскую категорию.
-
- Уже с Приветом
- Posts: 23749
- Joined: 05 Jul 2003 22:34
- Location: Брест -> St. Louis, MO
Re: Optimisation a system to receive products from a database
Ну тут похоже просто случай с иерархией. Для этого есть всякие способы а в взрослых базах всякие CTE и рекурсивные квери.
В любом случае все это решается в базе. Может даже надо написать хранимую процедуру вместо запроса.
В любом случае все это решается в базе. Может даже надо написать хранимую процедуру вместо запроса.
Лучше водки — хуже нет! ©
-
- Уже с Приветом
- Posts: 10708
- Joined: 22 Jul 2006 20:19
Re: Optimisation a system to receive products from a database
Похоже что человек не знаком с основами сиквела.BronenosezPotemkin wrote: ↑10 May 2017 21:31Шо такое иностранный ключ? Как я уже написала - JOIN между таблицами.FreemanUSA wrote: ↑10 May 2017 21:22 MySQL, да можно, но как сапоставить отношения продукта по иностранному ключу который привязан к саб-категории, саб-категории и ..... к родительской категории которая имеет другое айди? Если я вызываю родительскую или саб-родительскую категорию.
ТС.
Вы нарисуйте структуру таблиц пожалуйста.
-
- Уже с Приветом
- Posts: 349
- Joined: 24 Jul 2012 23:26
- Location: echo RU::US($me);
Re: Optimisation a system to receive products from a database
Иностранный ключь это ссылка по которй привязан продукт к определённой категории. Блин, я прям не знаю как объяснить то. Ну допусти таблица категорий создана на основе того как TheStack каждая категория имеет иностранный ключь с родительским айди, систем для того что бы создавать бесконечное количество саб-категории. Вот мы вызываем родительскую категорию у котори тоже есть родительская категория и допустим три саб-категории у которых тоже есть сабкатегории. Как в эту родительскую категорию получить все продукты которые привяззаны к ней и ко всем её саб-категориям если у продуктов только иностранный ключ одной категории которая являеться саб-категорией.
-
- Уже с Приветом
- Posts: 4435
- Joined: 13 Feb 2002 10:01
- Location: Bay Area
Re: Optimisation a system to receive products from a database
Один запрос или нет -если проблема в том, что обход по всем этим саб-категориям занимает много времени, можно сделать chunked output на сервере. А на клиенте ( Get First /Get Next). Таким образом клиент может видеть часть результатов не дожидаясь пока все результаты получены.
Конечно, request при этом перестает быть stateless.
Конечно, request при этом перестает быть stateless.
-
- Уже с Приветом
- Posts: 4435
- Joined: 13 Feb 2002 10:01
- Location: Bay Area
Re: Optimisation a system to receive products from a database
иностранный ключ = foreign keyBronenosezPotemkin wrote: ↑10 May 2017 21:31Шо такое иностранный ключ? Как я уже написала - JOIN между таблицами.FreemanUSA wrote: ↑10 May 2017 21:22 MySQL, да можно, но как сапоставить отношения продукта по иностранному ключу который привязан к саб-категории, саб-категории и ..... к родительской категории которая имеет другое айди? Если я вызываю родительскую или саб-родительскую категорию.
Никогда не знал как оно по-русски. Я бы перевел "чужой ключ".
-
- Уже с Приветом
- Posts: 3001
- Joined: 28 Feb 2013 03:18
- Location: NY
Re: Optimisation a system to receive products from a database
Аaaaoshibka_residenta wrote: ↑10 May 2017 21:58
иностранный ключ = foreign key
Никогда не знал как оно по-русски. Я бы перевел "чужой ключ".
-
- Уже с Приветом
- Posts: 15475
- Joined: 27 Sep 2007 22:53
Re: Optimisation a system to receive products from a database
Скорее "внешний", по аналогии с министерством иностранных дел и внешней политикой.oshibka_residenta wrote: ↑10 May 2017 21:58иностранный ключ = foreign keyBronenosezPotemkin wrote: ↑10 May 2017 21:31Шо такое иностранный ключ? Как я уже написала - JOIN между таблицами.FreemanUSA wrote: ↑10 May 2017 21:22 MySQL, да можно, но как сапоставить отношения продукта по иностранному ключу который привязан к саб-категории, саб-категории и ..... к родительской категории которая имеет другое айди? Если я вызываю родительскую или саб-родительскую категорию.
Никогда не знал как оно по-русски. Я бы перевел "чужой ключ".
-
- Уже с Приветом
- Posts: 15475
- Joined: 27 Sep 2007 22:53
-
- Уже с Приветом
- Posts: 349
- Joined: 24 Jul 2012 23:26
- Location: echo RU::US($me);
Re: Optimisation a system to receive products from a database
СПС всем ответившим. Таблица для категорий одна, я не создаю саб,саб.. и т.д. привязка идёт по родительскому айди, это снижает серверную нагрузку оперировать чисто одной таблицей и даёт возможность создавать бесконечное количество саб-категории. JOIN нельзя применить по одной простой причине, нечего соединять так как продукция тоже находиться в одной таблице, каждый товар привязан к айди категории или сабкатегории. Вопрос заключалься в то что необходимо добавить в строку продукта как орентир для вызова саб-категории продукции на основную категорию, родительскую, при этом снизив количество запрсов в базу данных и обработки конечного результата.
-
- Уже с Приветом
- Posts: 4435
- Joined: 13 Feb 2002 10:01
- Location: Bay Area
Re: Optimisation a system to receive products from a database
google: self-join
-
- Уже с Приветом
- Posts: 10708
- Joined: 22 Jul 2006 20:19
Re: Optimisation a system to receive products from a database
На самом деле серверу пофигу - одна у вас таблица или не одна.FreemanUSA wrote: ↑11 May 2017 21:23 СПС всем ответившим. Таблица для категорий одна, я не создаю саб,саб.. и т.д. привязка идёт по родительскому айди, это снижает серверную нагрузку оперировать чисто одной таблицей и даёт возможность создавать бесконечное количество саб-категории. JOIN нельзя применить по одной простой причине, нечего соединять так как продукция тоже находиться в одной таблице, каждый товар привязан к айди категории или сабкатегории. Вопрос заключалься в то что необходимо добавить в строку продукта как орентир для вызова саб-категории продукции на основную категорию, родительскую, при этом снизив количество запрсов в базу данных и обработки конечного результата.
Если вы просто здесь выложите скрипт который создает таблицу, будет проще разговаривать.
-
- Уже с Приветом
- Posts: 4185
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Optimisation a system to receive products from a database
допустим продуктов не так много и вложенность не сильно глубокая.
Можно воткнуть всю логику на серверный код, никаких жоинов, кривых запросов и хоронимых процедур.
скажем так выглядит endpoint
это пример как можно собрать все продукты рекурсивно, можно использовать while.
код не оптимизирован под ваш конкретынй случай, pseudo java/groovy пример
Можно воткнуть всю логику на серверный код, никаких жоинов, кривых запросов и хоронимых процедур.
скажем так выглядит endpoint
Code: Select all
Set<Products> getProductsForCategory(String categoryId) {
Set<Products> result = []
getRecursiveForcategory(categoryId, result)
return result
}
код не оптимизирован под ваш конкретынй случай, pseudo java/groovy пример
Code: Select all
getRecursiveForCategory(String categiryId, Set result) {
Set subCategories = []
Set<Products> products = dao.queryById(categiryId)
if (products) {
result.addAll(products)
// collect all sub category ids
for (Product p: products) {
if (p.subCategoryId) subCategories.add(p.subCategoryId)
}
}
// query from all subcategories
for (String subCategoryId: subCategories) {
getRecursiveForCategory(subCategoryId, result)
}
}
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: Optimisation a system to receive products from a database
Очень странный код
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 349
- Joined: 24 Jul 2012 23:26
- Location: echo RU::US($me);
Re: Optimisation a system to receive products from a database
Спс огромное за помощью всем. Подчерпнул некоторые аспекты и внёс в свой код, создал фековых товаров 1 миллион и разбросал в 10 категорий и углубил саб категории до 20 уровня. Поск идёт в норму ни как на Мандженте , фактически выскакивание позиций на юзер итерфейс моментально. Теперь обкатываю систему против любого стороннего вмешательства на логин или какие либо рассылочные формы при общении с сервером. Преминил на каждый отправленный запрос как при входе в админ панель или на свой аккаунт с единично присвоенным айди ,через аджакс. То есть при запросе проверки данных если хэшированное айди не совподает то сервак просто игнорирует запрос. Если совподает айди, но логин данные не проходят то сервак отправляет обратно на вход и перепресваевает сгенерированное новое айди, высылая его в догонку. Так как система лимитированного входа по количеству запросов как в банках выносит мозг и просто банально раздражает ожидать 20-30 минут до следующей попытки как юзера. Может есть какие нибуть легче и более репродуктивные способы по защите против стороннего вмешательства.
-
- Уже с Приветом
- Posts: 4185
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Optimisation a system to receive products from a database
нет простых путей когда дело касается безопасности.FreemanUSA wrote: ↑22 May 2017 01:01 Может есть какие нибуть легче и более репродуктивные способы по защите против стороннего вмешательства.
придется попотеть над изучением стандартов и best practice
https://oauth.net/2/
https://spring.io/guides/tutorials/spring-boot-oauth2/
https://www.owasp.org/index.php/Categor ... en_Project