Я некоторое время думал о моделировании типичного сайта электронной коммерции с подобной ebay таксономией и атрибутами, зависящими от определенной категории продукта.Выделенная грантовая поисковая система для работы с динамическими таксономиями - помогает только с эффективностью или гибкостью?
Первой попыткой был выбор между EAV и моделированием наследования класса db на класс. Я выбрал последнее из-за производительности, но это означало создание выделенной таблицы для каждой конкретной категории (лист в категории дерева) с определенными атрибутами категории (например, разрешением для телевизоров), смоделированными как отдельный столбец.
Несмотря на то, что эта настройка не является гибкой, если вам нужно добавить атрибуты к существующим категориям или добавить новые категории. Для каждого такого изменения необходимо следующее:
- Alter/создать таблицу
- Новой формы для фильтрации жгутов такой категории по специфическим атрибутам
- Нового кода для генерации БД запросов для поиска и фильтраций
- Некоторых новых ViewModels/DTO и представления для представления продуктов из новых категорий
Чтобы справиться с такой сложностью, я думаю, что требуется какое-то мета-представление этих атрибутов (даже вне приложение) в файле xml или даже excel, так что при каждом изменении все упомянутые коды могут быть автоматически сгенерированы (запросы sql/orm, код приложения, шаблоны). Таким образом, это может помочь в разработке, но для этого требуется тестирование и дополнительное развертывание.
В этот момент я узнал, что ebay действительно не использует реляционные db для поиска и что их таксономия настолько гибка, что они могут быстро добавить новые категории листьев. Кроме того, их категории не являются категориями из иерархического дерева, смоделированного в реляционном db, а только для атрибутов поиска (граней).
После того, как вы быстро просмотрите наиболее перспективную выделенную фасетную поисковую установку (отдельный экземпляр Solr), я не уверен, может ли она помочь мне быть гибкой для изменений таксономии, поскольку обычно Solr просто отражает как-то реляционную БД, поэтому конкретные атрибуты категории все равно придется моделировать в БД как метаданные СУБД, так, например. динамические генерирующие формы пользовательского интерфейса для фильтрации атрибутов будут жесткими, если:
1) Я бы сохранил данные в РСУБД с помощью EAV fasion и преодолел проблемы с производительностью с помощью поиска SOLR (но все же были проблемы с бесполезностью EAV, без данных целостность и т. д.)
2) Я бы сохранил только словарь атрибутов (т. е. только их имена и типы) в СУРБД и сохранил определенные значения атрибутов в SOLR, используя его как не-реляционное хранилище данных, кроме объекта поиска , Я также не убежден в этом решении (даже если это возможно), поскольку приложение будет тесно связано с solr (т.е. версия продукта admin CRUD будет взаимодействовать с SOLR напрямую).
Что вы думаете? Считаете ли вы, что для любого типа (результативной) таксономии гибкость генерации кода неизбежна? Как бы вы справились с этим? Может быть, какой-то отдельный словарь данных в модуле EAV в БД только для целей генерации кода? Думаю, я мог бы использовать что-то вроде MongoDB, но генерация кода пользовательского интерфейса (время выполнения или нет) все равно потребует каких-то метаданных.
Здесь много вопросов, но я не хотел разбить его на более мелкие вопросы, так как меня интересует общий подход к дизайну при работе с более крупным классом таких проблем.
объявление 1: Грановитый поиск/навигация сам по себе не является моим приоритетом, я могу использовать обычную «расширенный поиск» форму с различными типами входных данных (строки, цены, диапазонами и т.д.). Я просто думал, могут ли аспекты помочь в достижении гибкости. Объявление 2: Что такое данные и что такое схема, зависит от точки зрения. В EAV все данные, OTOH, если я решил использовать «разрешение» в качестве столбца, он становится схемой. Если я хочу добавить новый тип атрибута в категорию телевизоров (например, количество портов USB), это также можно охарактеризовать как изменение схемы. ad 4. Интересно, знаете ли вы какие-либо примеры этого? – aaimnr
1. Если вы хотите иметь иерархические категории, то нет, с Solr это будет нелегко из-за 5. 2. Я признаю, что это субъективно, но IMO, если вам нужно сгенерировать код для размещения новой категории, то это изменение схемы, а не изменение данных для вашего приложения. 4. любое приложение на основе искателя, например. Google или http://www.lucidimagination.com/About-Search. –