Дмитрий Сергеевич (axshavan) wrote,
Дмитрий Сергеевич
axshavan

Технические идеи по интернет-магазину

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

Главная страница. Она должна быть модульной. Я имею в виду не стандартный подход к вёрстке шаблонов - "каждый кусок отвечает сам за себя", а имею в виду то, что менеджер магазина может менять местами различные модули на ней, убирать и добавлять их, менять их параметры. Разумеется, на главной странице обычно куча всего - и новости, и последние отзывы, и последние записи в блогах, и статьи, и обновление товара. Если всё это ещё гибко настраивается, то, конечно, такая страница будет очень ресурсоёмкой. И в то же время сюда, на главную, попадает обычно большинство посетителей и долбится большинство ботов. Поэтому можно её всю (ну или почти всю) сверху донизу кэшировать в html и статично отдавать через nginx как и обычные картинки, js и css. Периодически или по команде обновлять или отключать кэш.

Вообще кэширование - очень полезная штука. Каждый кусочек любой страницы, который сам за себя, должен определять, не пора ли обновить кэш самого себя, и если не пора, то не лезть лишний раз в базу данных, а просто отдать кусок html. Как определить, не пора ли обновлять кэш себя, для сайтов, крутящихся на MyISAM, очень просто - надо брать время последнего обновления таблиц и смотреть на него. Если же магазин крутится на InnoDB, то так просто не получится - в InnoDB, насколько я помню, даты последнего изменения таблиц нет. Там есть один большой бинарный лог, по в который свалены данные всех транзакций. А критичные таблицы - заказы, корзину, пользователей - лучше держать в InnoDB, потому что там между ними всегда очень много связок, и много действий, которые должны выполняться одновременно, так что лучше иметь возможность использовать транзакции.

Вот насчёт таблицы товаров я не уверен. Её будут постоянно дрочить люди и боты, шарящиеся по каталогу товаров, и если она будет в InnoDB, это может заметно снизить скорость работы.

Как мне кажется, наибольшую нагрузку на сайт вызывает хождение по каталогу. Потому что нужно каждый раз подсчитывать, сколько товаров с данным критерием поиска (в простейшем случае это раздел или подраздел каталога, в худшем - ещё куча критериев, которые требут подцепления других таблиц), порезать правильно на количество страниц, опередить текущую и показать. Это всё круто тоже кэшировать - прямо кусками html. Зашёл человек посмотреть товары в таком-то разделе с таким-то критерием фильтрации, ходит по страницам, а мы ему - шлёп! шлёп! - куски кода для данного критерия прямо с постраничной навигацией отдаём. Раз в десять-двадцать минут, в зависимости от скорости обновления таблиц, кэш можно обновлять.

Что касается самого каталога товаров, то тут мнение двоякое. С одной стороны, верх крутости - это тэги к товарам. Но и без каталога тоже нельзя обойтись. Если человек просто зашёл посмотреть "а что тут есть" и цены, то лучше, конечно, каталог. А если он твёрдо знает, что ему надо, то ему нужен поиск по тэгам и свободный поиск по словоформам частей названия товара. Но с каталогом такая морока! Если у вас на сайте двадцать товаров, то каталог как бы и не нужен, всё можно сразу показать. Если двести товаров, то можно сделать три-четыре раздела, и использовать фактически как тэги. Но если товаров десятки тысяч наименований, то придётся нанимать миллион китайцев, чтоб они рассортировывали товары по сотням разделов, которые будут плодиться и дублировать друг друга на разных уровнях вложенности. Идеальное решение, по-моему, это запретить делать разделы большой степени вложенности, и внутри каждого подраздела осуществлять навигацию по тэгам. Тэги, кстати, могут проставлять и посетители, взяв на себя работу по каталогизации товаров и заменив тем самым миллион китайцев.

Уфф, ну и накатал.
Да! И никакого ISP manager! Всё настраивать самому любовно ручками, а если нет времени или достаточного количества знаний - взять админа на аутсорсинг, пусть с любовью и тщанием осуществит первичную настройку, и потом иногда пусть приходит, подкручивает где что надо.
UPD спустя пару минут И никакого битрикса!!!
Tags: web
Subscribe

  • Post a new comment

    Error

    Comments allowed for friends only

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments