@unabl4
ruby on rails web dev

Пре-калькуляция цен — как кешировать?

Всем привет.

Суть такова, что есть сервис, который сдаёт в аренду помещения (их сейчас порядка ~50,000).
Каждое помещение клиент может арендовать на тот промежуток дней, который сам выберет (для этого есть календарь - т.е для каждого дня владелец помещения может назначать разные цены на его усмотрение).

Вся суть подсчёта цены: p = f( check_in, check_out, x ), где check_in, check_out - это даты чек-ина и чек-аута, соотвественно,
а x - число от 1 до 10.

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

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

Появилась идея рассчитать цены на, скажем, год вперёд для всех помещений.
Т.е пересчитать все возможные комбинации (check_in, check_out, x), закешировать, и по надобности инвалидировать ключи.

Но тут встаёт вопрос - реально ли это вообще?. Быстренько посчитал на бумажке, и вышло, что потребуется порядка
33,580,500,000 ключей, если хранить в key-value хранилище: 366 * 367 / 2 * 10 * 50,000.

И где столько можно хранить?
Или есть какие-то другие, более эффективные решения? Тем более, что память не резиновая.

Заранее благодарю за ответы.
  • Вопрос задан
  • 197 просмотров
Пригласить эксперта
Ответы на вопрос 1
@andreyvlru
менеджер-программист
Может быть вам достаточно будет примерной сортировки.
Рассчитайте некий упрощенный ценовой индекс для каждого объекта и сортируйте по нему.
Можно усложнить и ценовой индекс сделать также зависимым от срока аренды и недели-месяца в году.

Задача во многом аналогична тому что делают многочисленные поисковики билетов, интересно как это делают они.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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