Данная страница содержит информацию о прогнозируемом кол-ве позиций, но все расчеты проводятся по текущему кол-ву позиций.
Информация об акциях получается из Тарантула и рассчитывается в момент обращения к приложению.
Проблема 1 - большое кол-во кэшируемых данных
Основные данные приложения:
| Справочник | Кол-во позиций | Кол-во прогнозируемое | Комментарий |
|---|---|---|---|
| Товар | 2386 / 8000 | 25 тыс | Основных товаров 2000. Доп. товаров 6000 Кол-во прогнозируемое указано, если сайт станет Маркетплейсом (на Яндекс.Маркете 600 тыс) |
| Город (населенный пункт) | 1100 | 153 тыс. | Кол-во прогнозируемое указано, если компания будет представлена во всех населенных пунктах РФ или пойдет |
| Акция | 1000 | 10 тыс. | Расчет прогнозируемого: кол-во текущее * 10 |
Покупатель на сайте видит акции проводимые для основных товаров.
Покупатель на сайте оперирует Городом (населенным пунктом) и Товаром (основным)
Кол-во представлений одной акции рассчитывается так: 2386*1100 = 2624600 разных представлений.
Каждая акция это кол-во данных с приблизительным размером в 10 Кб (бейджи).
Кол-во кэша под все акции = 2624600*1000*10 = 26246000000 Кб (26246 Гб)
Как видно, количество объектов, предполагаемых для хранения в кеше, очень велико, как минимум потребуется распределенное хранение (дорогое решение).
Проблема 2 - частота обновления кэша
Проблему осложняет в настоящий момент сложно-прогнозируемое кол-во обновлений следующих данных:
| Справочник | Кол-во позиций | Кол-во прогнозируемое | Комментарий |
|---|---|---|---|
| Регион | 100 | 1 тыс. | Расчет прогнозируемого: кол-во текущее * 10 |
| Цена товара в городе | 2386000 | 91800000000 | Кол-во считаем так: кол-во товаров * кол-во городов |
| Наличие товара на складе | 2386000 | 23860000 | Расчет: кол-во товаров * кол-во складов Расчет прогнозируемого: кол-во текущее * 10 |
| Склад | 1000 | 10000 | Расчет прогнозируемого: кол-во текущее * 10 |
| Популярность товара в городе | 2386000 | 23860000 | Расчет: кол-во товаров * кол-во городов Расчет прогнозируемого: кол-во текущее * 10 |
| Совместимость товара (рекомендация) | 2500000 | 25000000 | Расчет: кол-во текущее * кол-во текущее * 0.1 Расчет прогнозируемого: кол-во текущее * 10 |
| Вид доставки | 10 | 10 | |
| Вид оплаты | 10 | 10 | |
| Варианты предсобранных комплектов для акции бандлирования | 100 * 10 | 10000 | Расчет прогнозируемого: кол-во текущее * 10 |
Каждое изменение выше указанных данных влияет на перерасчет условий каждой акции (читай - пересобери кэш заново).
Чтобы сгенерировать кэш понадобится большое кол-во ресурсов приложения и бд.
Отслеживать изменения событийно (поштучно) не выглядит простым, предсказуемым решением и скорее усложнит решение, поэтому принимаем за факт потребности демонизировать постоянное обновление кэша акции (закончили одну итерацию обновления, начинаем заново).
Кажется разумным не генерировать варианты акций, и постараться расчеты производить в момент обращения к приложению, но для этого понадобится переложить часть данных в базу данных в памяти - Тарантул.
В приложении есть функционал, который возможно придется предрасчитывать, называется Предсобранные комплекты.
| Справочник | Кол-во позиций | Кол-во прогнозируемое | Комментарий |
|---|---|---|---|
| Акции бандлирования | 100 | 1000 | Расчет прогнозируемого: кол-во текущее * 10 |
| Варианты предсобранных комплектов для акции бандлирования | 10 | 100 | Расчет прогнозируемого: кол-во текущее * 10 |
Как видно, кол-во акций бандлирования 100 (в 10 раз меньше общего кол-ва акций), но кол-во предсобранных комплектов равно 10 (на практике может быть больше), значит закэшировать придется 26246000000 Кб (26246 Гб)
Кажется разумным не генерировать всевариантный кэш, а генерировать кэш только по определеным частям функционала предсобранных комплектов, а остальные данные хранить в памяти (Тарантул) в исходном виде (так, как эти данные хранятся в реляционной бд), а расчеты производить в момент обращения к приложению.
Комментарии
Комментариев пока нет.