Как делать корзины для больших интернет магазинов?

Подскажите как правильно проектировать приложение (Интернет магазин с огромной базой товаров).
Есть к примеру 10к+ товаров (20 категорий).

Как правильно все организовать? Как должна выглядеть база данных и как обрабатывать все эти товары?

Планируется SPA на реакте, поэтому интересует вопрос подгрузки данных.
Не вариант же подгружать 10к товаров одним массивом на клиент и хранить его в сторе.
И как обрабатывать корзину. В корзине по сути должны храниться только id товаров, и потом динамически как то подгружаться нужная информация о товарах для рендеринга и оформления заказа. Не получится же просто пробегаться по всему массиву товаров в поиске нужных (добавленных в корзину) товаров.

В общем подскажите как все организовывается в таких приложениях
  • Вопрос задан
  • 766 просмотров
Пригласить эксперта
Ответы на вопрос 5
@FanatPHP
Чебуратор тега PHP
Очень смешной топик.
Сразу видно что почти никто из советчиков никогда с реальным интернет-магазином не работал.

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

Ну и третье, уже специально для автора вопроса, а не только для всех юных писателей крупных интернет-магазинов - сначала, перед тем как приступать к написанию крупных интернет магазинов, следует изучить букварь по веб-разработке. И открыть для себя, что у любого интернет-магазина, даже некрупного, есть back-end. В котором, в общем-то, вся логика работы с товарами, заказами и корзиной и реализуется. И которое к "SPA на реакте" не имеет ни малейшего отношения. И чтобы написать которое, надо учить основы баз данных, SQL и какой-нибудь серверный язык программирования. Ну и ещё примерно 20 дисциплин.
Ответ написан
firedragon
@firedragon
Senior .NET developer
Для каждого действия своя модель для корзины
Cardid
Item id
Item image
Item count
Item price
Total
Discount

И без разницы сколько у вас там товаров
Ответ написан
Stalker_RED
@Stalker_RED
Есть таблица товаров, у каждого товара есть product_id
Есть таблица заказа, у него есть order_id, user_id, дата, еще что-то там.
Есть таблица связи многие-ко-многим, типа order_has_product, например
order_id | product_id | qty

Когда нужны все товары из корзины делаешь примерно так
select id, title, description from products where product_id in (
  select product_id from order_has_product where order_id = 42
)
-- ну или с джоином, вложенный написал просто для наглядности

Отдаешь это на фронт, отрисовываешь.

Не вариант же подгружать 10к товаров одним массивом
Конечно не вариант. Храните их в бд на бэке. Причем 10к, это не большой магазин, в большом магазине будут тысячи КАТЕГОРИЙ товаров.

Не получится же просто пробегаться по всему массиву товаров в поиске ...
Конечно не нужно пробегаться. Почитайте про индексы.
Ответ написан
@dimoff66
Кратко о себе: Я есть
Таблицы
categories: id, name, parentId (если их немного то можно подгрузить все сразу)

products: id, name, categoryId (подгружать по частям, либо пагинацией, либо динамической подгрузкой при прокрутке, для реакта есть табличные компоненты, которые динамическую подгрузку осуществляют сами)

cart: userId, productId, quantity (при загрузке подгрузить количество позиций, чтобы выводить его в шапке сайта, при открытии корзины подгрузить с сервера всю информацию с наименованием, ценами и чем-то еще, можно хранить в LocalStorage для незарегистрированных пользователей)
Ответ написан
1. Это небольшой магазин)
2. Тут много вариантов, ничего особенного, зависит от бизнес-логики (что хочет отображать заказчик, что должен видеть клиент магазина)
3. Подгрузка на клиент вне зависимости от выбранного фраймворка должна осуществляться только порционно (т.е. грузим 20-50 товаров максимум, остальное подгружаются при переходе на следующую страницу со смещением (во всех БД есть инструкция пропуска нужного количества записей))
4. Корзина: зависит от среднего количества товара, которое обычно заказывает пользователь. Если какие-то оптовики с большим количеством товара в заказе, то я бы сделал возможность добавления в корзину только после авторизации, чтобы сразу записывать это в таблицу. Если типовой магазин, то можно писать в LocalStorage + дублировать в таблицу (если авторизован).
Записывать в корзину стоит полную информацию о товаре, для того, чтобы удаленный из базы товар не пропадал, а показывал его название, описание, и т.п., НО показывался статус товара (недоступен для заказа).

ЭТО ВСЕ ЛИЧНО МОЕ МНЕНИЕ, КОТОРОЕ НЕ ПРЕТЕНДУЕТ НА ПРАВИЛЬНОСТЬ.
И вообще возьмите OpenCart, да и все)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы