Задать вопрос
@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.

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

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

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

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

Похожие вопросы