Как стать автором
Обновить

Комментарии 29

Интересная статья. Раньше писал на C#, и прошёл курс по SQL, так что в принципе все понятно. Жду продолжения

Очень хочется все денормализовать к такой-то бабушке. И каталог сделать атрибутом. Вот пятой точкой чувствую, что один и тот же продукт захочет быть в разных категориях рано или поздно. Типа как и "азиатки" и "худые" одновременно. Или это не про продукты? Энивей, когда найденное решение содержит жонглирование экспрешенами, очень хочется вернуться к архитектуре как таковой и что-нибудь с ней сделать, чтобы не трогать экспрешены.

А на том месте где выбираются категории и атрибуты для фильтров, сразу хочется найти альтернативы. Какой-нибудь материалайзед вью, или хотя-бы кэш результатов запроса. И если уж EF, то EF.CompileAsyncQuery в этом месте. И кэш. Иначе что там лоад тестировать, если при проектировании производительность даже вскользь не фигурировала.

А в целом упражнение хорошее. Но для реалистичности все же нужно еще какие-то нон-фанкшинал требования принять во внимание и уделить им немножко времени.

Готов к куче минусов. Мелкософт уходит от нас но появляется все больше статей как писать на .NET как пользовать их технологии. Не надоело!

Чисто формально - .НЕТ открытый проект, куда бы МС не ушёл, на возможность пользоваться .НЕТом это не повлияет.

Дальше, .НЕТ - от рантайма-джита, через базовую библиотеку и до дизайна языка и компилятора - громадный и интереснейший кусок знаний (и опыта), развивающийся у нас на глазах.

Так что хотя бы с этой точки зрения должно быть познавательно.

Ну и возвращаясь к уходу МС - было бы, конечно, здорово и интересно всё это импортозаместить - да хотя-бы даже реализовать рантайм-джит для Эльбруса или только MAUI для авроры (или как там её?), но я/ты/он/она такое организовать не потянем, а заинтересованности у тех, кто мог бы, к сожалению, не заметно.
А могло бы стать шагом к какой-нибудь православной хармони-ос.

JDK российской сборки уже есть несколько: "Axiom JDK", "ГосJava". Может быть и своя сборка .NET в скором времени появится.

Двадцать пять лет уже читаю, что Мелкософт уходит...

Сейчас довольно не плохой поиск по json полям идет. И если запихнуть туда поля может быть вполне не плохо. Но мне кажется для этого бд лучше взять Mongo.

Хм, а как в задаче поиска по множеству категорий поможет Mongo? Там для этого вообще нет никаких инструментов.
Можно идти или в сторону специализированных поисков или таки по таблице на категорию или играть с селективностью запросов и дальше уже отбирать на уровне приложения.
Впрочем, подход EAV (описанный в статье) вообще непригоден для подобных задач, он крайне неэффективен.

Так речь шла про свойства/параметры товара, а не категории.

Так свойство товара - это и есть категория.
И поиск по свойствам - это поиск по множеству категорий, к которым отнесен товар.
Это одно и то же.

С чего бы это. Свойства, это например, емкость жесткого диска или год выпуска. А категория - бытовая техника, компьютеры.

Хм, и емкость жесткого диска и год выпуска и тип товара и позиция в какой-то иерархии - это все категории товара (или свойства товара, это синонимы).
Категория товара - не то же, что и "товарная категория".

Просто поиск по множеству категорий - термин скорее из теории БД, а "товарная категория" - из товарного учета.

Выбранная структура данных идеально вписывается в semantic web.
Но оно не в тренде, к сожалению.

В эластик все запихать или кликхаус.

Это не статика, а постоянно изменяющая информация. Что-то нужно удалить, что-то добавить. Кликхаус и эластик не для этого.

Эластик отлично сюда ложится - построенный на Lucene прямо из коробки будет фасетный поиск. Кликхаус да, для другого.

С эластиком +/-. Вроде хорош, но мне кажется что не совсем тут идеально ложится.

Ну, оперативное изменение будет довольно дорогим и на большом объеме будет сильно тормозить или требовать очень много ресурсов. Но для небольших объемов решение на эластике или солре вполне допустимо.
CH, увы, потянет, но до 10-100rps, дальше уже будет невыгодно.
В общем, как всегда, нужно сначала смотреть на ФТ/НТФ, а потом уже решение выбирать.

1) Сорри, не понял графика - при скольки запросах в секунду началось замедление?
2) Про базу
2.1) Postgres намного популярнее и неспроста
2.2) хорошо бы проверить план исполнения запросов

На двух :) через 4 секунды график пошёл вверх. Шучу, на графике нет RPS.

JMetter работает так: у нас есть некое количество тредов, каждый из которых в цикле выполняет свой план. Если тред ждёт ответа 2 секунды, значит он будет давать нагрузку в пол запроса в секунду. Если сервер быстро отвечает, один тред и 100 запросов может сделать. Когда сервер не вывозит, запросы становятся в очередь, а линия начинает линейно расти от количества ожидающих.

Можно прикинуть, что на 1 запрос сервер тратит 85мс и вывозит где-то 12 запросов в секунду.

12 запросов в секунду выглядит нормально для "игрушечного" окружения, без настройки базы и т.п.
Впрочем, интересно посмотреть весь сериал - я понял, что вы готовите несколько постов.

Дошло!
(Нагрузочное я тоже иногда делаю, просто давно перешел от JMetter на всякие облачные сервисы )

Да прибудет с Вами фасетный поиск

Expressions медленные как ни крути.
Expression.Lambda - тяжёлая вещь. Попробуйте хотя бы начать замену с неё.

Expressions медленные
Expression.Lambda - тяжёлая вещь.

Не настолько.
Плюс ламбда в EF не компилируется.

Да и мусор от них вряд ли переживёт ген0 при таком использовании.

Если посмотреть на Вашу схему, то это похоже на EAV модель.
Если цель эксперимента - реализация фасетного поиска, то это тупиковый путь, потому что там есть нюансики.
Лучше смотреть в сторону Эластика, Сфинкса и т.п.
Кроме этого, есть определенный алгоритм построения запроса. Как вариант, можно почитать здесь https://habr.com/ru/articles/517074/

Спасибо тебе добрый человек, никак не мог вспомнить и нагуглить EAV-модель.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории