Tarantool - зачем еще один кэш

Данная страница содержит информацию о прогнозируемом кол-ве позиций, но все расчеты проводятся по текущему кол-ву позиций.

Предложение 1 - не кэшируем акции (используем Тарантул)

Информация об акциях получается из Тарантула и рассчитывается в момент обращения к приложению.

Предложение 2 - кэширование акций (не используем Тарантул)

Проблема 1 - большое кол-во кэшируемых данных

Основные данные приложения:

СправочникКол-во позицийКол-во прогнозируемоеКомментарий
Товар2386 / 800025 тысОсновных товаров 2000. Доп. товаров 6000  
Кол-во прогнозируемое указано, если сайт станет Маркетплейсом (на Яндекс.Маркете 600 тыс)
Город (населенный пункт)1100153 тыс.Кол-во прогнозируемое указано, если компания будет представлена во всех населенных пунктах РФ или пойдет 
Акция100010 тыс.Расчет прогнозируемого: кол-во текущее * 10

Покупатель на сайте  видит акции проводимые для основных товаров.

Покупатель на сайте оперирует Городом (населенным пунктом) и Товаром (основным)

Кол-во представлений одной акции рассчитывается так: 2386*1100 = 2624600 разных представлений.

Каждая акция это кол-во данных с приблизительным размером в 10 Кб (бейджи).

Кол-во кэша под все акции =  2624600*1000*10 = 26246000000 Кб (26246 Гб)

Как видно, количество объектов, предполагаемых для хранения в кеше, очень велико, как минимум потребуется распределенное хранение (дорогое решение).

Проблема 2 - частота обновления кэша

Проблему осложняет в настоящий момент сложно-прогнозируемое кол-во обновлений следующих данных:

СправочникКол-во позицийКол-во прогнозируемоеКомментарий
Регион1001 тыс.Расчет прогнозируемого: кол-во текущее * 10
Цена товара в городе238600091800000000Кол-во считаем так: кол-во товаров * кол-во городов
Наличие товара на складе238600023860000

Расчет: кол-во товаров * кол-во складов

Расчет прогнозируемого: кол-во текущее * 10

Склад100010000Расчет прогнозируемого: кол-во текущее * 10
Популярность товара в городе238600023860000

Расчет: кол-во товаров * кол-во городов

Расчет прогнозируемого: кол-во текущее * 10

Совместимость товара (рекомендация)250000025000000

Расчет: кол-во текущее * кол-во текущее * 0.1

Расчет прогнозируемого: кол-во текущее * 10

Вид доставки1010 
Вид оплаты1010 
Варианты предсобранных комплектов для акции бандлирования100 * 1010000Расчет прогнозируемого: кол-во текущее * 10

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

Чтобы сгенерировать кэш понадобится большое кол-во ресурсов приложения и бд.

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

Вывод 1

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

Предсобранные комлекты

В приложении есть функционал, который возможно придется предрасчитывать, называется Предсобранные комплекты.

СправочникКол-во позицийКол-во прогнозируемоеКомментарий
Акции бандлирования1001000Расчет прогнозируемого: кол-во текущее * 10
Варианты предсобранных комплектов для акции бандлирования10100Расчет прогнозируемого: кол-во текущее * 10

Как видно, кол-во акций бандлирования 100 (в 10 раз меньше общего кол-ва акций), но кол-во предсобранных комплектов равно 10 (на практике может быть больше), значит закэшировать придется 26246000000 Кб (26246 Гб)

Вывод 2

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


27.05.2009 21:17

Комментарии

Комментариев пока нет.


Copyrights © 2007 - 2026 YaPro.Ru