Вопросы разработки каталога товаров

Главные вкладки

Аватар пользователя Zigs Zigs 20 марта 2012 в 14:45

Добрый день.
Очень хочется узнать мнение компетентной общественности по вопросу организации некоего каталога товаров. Задача, в общем-то, стандартная, но есть вопросы.
Собственно, основной вопрос поста это эффективности работы Field API.

Планируется реализовать некий структурированный каталог товаров на базе node. Структура каталога определяется таксономией.
Все товары имеют некие общие свойства: артикул, дата производства, производитель, страна производства, раздел каталога, фотографии и.т.д.
У некоторых групп товаров могут быть еще и уникальные свойства, например, для мебели это размер, цвет, для сантехники способ монтажа и т.д.

Планируемое количество товаров 20-30 тыс.
Количество терминов таксономии для словаря разделов около 100.
Количество видов товаров, имеющих уникальные свойства 20-30.
Планируемая посещаемость 3-5 тыс.

Главная требование - быстрый и удобный поиск почти по всем возможным параметрам в разделе.

Первый и самый простой путь это создать для каждого вида товара свой тип материала со всеми полями (общие + уникальные для этого вида).
При таком способе - минимум ручной писанины, не нужно писать свои запросы, формы, почти все настраивается в админке друпала с использованием стандартных модулей.

Однако, Field API хранит значения всех полей в отдельных таблицах, это означает многочисленные джойны при выборке, а так же многочисленные условия на эти джойны при поиске.
Логика подсказывает, что такой поиск будет не эффективным и будет сильно грузить сервер.

После некоторого блуждания по сети нашелся альтернативное решение, но, требующее некоторого программирования.
Это создание своего модуля, который создавал бы при установке создавал нужные типы материалов. Соответствующие мануалы есть на многих ресурсах, но мне больше приглянулся этот

Главная идея в том, чтобы отказаться от Field API для хранения единичных значений и использовать Field API только для тех свойств, которые требуют множественных значений, например, фотографии.
Конечно, нужно будет реализовывать hook_scheme(), hook_node_insert(), hook_node_update() и еще некоторые для управления данными. В итоге получаем всего, как максимум, две основные таблицы: совсем базовая - node, таблицу для хранения общих параметров и еще несколько таблиц для хранения уникальных свойств определенных типов товаров.
Все записи в этих таблицах связаны один к одному, поиск по параметрам осуществляется мгновенно. Можно даже свои индексы определить.
При написании еще еще некоторого количества кода можно эти типы подружить со вьюс, которые хорошо будет использовать для простых списков.

Ну как-то так Smile Покритикуйте пожалуйста.

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

Комментарии

Аватар пользователя Semantics Semantics 20 марта 2012 в 14:55

А ещё можно искать сфинксом, хранить поля в MongoDB и им же фильтровать, развернуть аттрибуты в строку, заюзать всякие алгоритмы, которые были рассказаны на численных методах и т.п.

Аватар пользователя multpix multpix 20 марта 2012 в 15:03

немного в сторону от вопроса))
А чем искать ? дефолтным D поиском?
вариант apache solr на отдельном сервачке не рассматривали?
отыщет по параметрам на ура - а сервак с ресурсом разгрузит
и планируйте тогда структуру - типы - общие и уникальные поля)

сфинкс и солр - хороши, но в пользу солр - его апач лицензия

Аватар пользователя Zigs Zigs 20 марта 2012 в 16:16

На предыдущих проектах заказчиков вполне устраивал и штатный поиск, поэтому отдельный сервак с отдельным поисковым механизмом пока не рассматривали. Да и хоститься пока предполагается на Shared'e и улучшать его по мере необходимости. На предполагаемом шареде есть Sphinx, сейчас изучаем вопрос его задействования.
Видимо придется задействовать какой-то внешний механизм поиска, потому что хороший контекстный поиск по заголовку и описанию очень важен.
Остальные параметры почти все будут выбираться из выпадающих списков - их не сложно проиндексировать.
Еще остаются процессы добавления, удаления и просмотра товаров. Предположительно в день будет добавляться 200-300 новых элементов каталога.

Есть ли все-таки смысл программить свой тип контента или можно обойтись стандартными средствами?
Логика подсказывает, что стоит, но на практике может быть иначе Smile а конкретных цифр для сравнения пока не нашел.

Аватар пользователя Zigs Zigs 12 апреля 2012 в 13:06

Продолжу очередной вопрос тут, чтобы не плодить темы.

Есть некие товары и пара основных словарей, производители и категории товаров.
Нужно, чтобы посетитель имел возможность отбирать товары по производителю и категории.

Например, зашли по адресу http://site/sony, отобразился список разделов и подразделов из второго словаря. Посетитель может пойти site/sony/computers, чтобы посмотреть список всех компьютеров, которые производит фирма sony. Может пойти site/sony/computers/notebooks, чтобы посмотреть список только ноутбуков.

Если я правильно понимаю, то реализовать это стандартными средствами views не получится. Единственный обнаруженный вариант это использование Allow Multiple Values в параметр View :Has taxonomy term ID и передавать туда просто список идентификаторов терминов. Но это не красиво, хочется чтобы путь состоял из нормальных слов.
Собственно делать синонимы на общее множество производителей и категорий тоже не вариант, их будет немереное количество.
Как быть коллеги?

Аватар пользователя AntonVTR AntonVTR 25 апреля 2012 в 11:00

не понятно как же реализовали хранение характеристик, вот мне создание разных типов материала с различными свойствами совсем не нравится.
Можно например сделать поле свойство и значение и присваивать. вес (свойство), 10 кг (значение), но они оказываются не связанны друг с другом.

так же полей может быть много и они могут отличаться, например емкость аккумулятора и время работы на одном аккумуляторе (суть одна, а свойства разные и производители могут использовать разные свойства)

как же правильно организовать хранение свойств