Грамотный кеш с memcached

Разгильдяй

Новичок
Прошу совет для элегантного решения следующей задачи:
Есть игра с заявками, которые подают игроки, чтобы попасть в бои на арене. Для того, чтобы разгрузить фронт решили кешировать промежуточные данные в memcached. Бекэнд ложит данные в мемкеш на фронте, а nginx читает их и отдает клиенту. Все хорошо, но есть один затык. Для каждого типа заявок есть фильтры, которые определяет какие заявки необходимо показывать игроку. Пример фильтров (1. только моего уровня, 2. моего уровня и выше, 3. моего уровня и ниже, 4. +-1 от моего уровня итд).

А теперь собственно вопрос. Как правильно хранить данных в мемкеш, чтобы nginx по ключу достал заявки с учетом фильтра?

клиент располагает следующими данными о заявке:
1. тип боя
2. дата подачи заявки
3. фракция игрока
4. язык игрока
5. номер фильтра
6. уровень игрока
7. айди локации

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

Как грамотно это все разрулить?

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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Вот просто не хочется отвечать на такой безграмотный текст.
И не теория это никак.
 

tz-lom

Продвинутый новичок
Разгильдяй
гм,а вам не кажется что проблему сортировки и фильтрации надо переложить на модель данных,а кешировать уже то что отдаёт модель
 

Разгильдяй

Новичок
Разгильдяй
гм,а вам не кажется что проблему сортировки и фильтрации надо переложить на модель данных,а кешировать уже то что отдаёт модель
В моем случае примерно так и есть. На клиенте ничего не фильтруется и не сортируется. Речь идет о том, как правильно положить данные, чтобы nginx их смог прочитать с учетом фильтра. Я не являюсь профессиональным программистом и поэтому решил поинтересоваться и более опытных коллег, как это правильно сделать.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Что вам не понравилось в моем тексте?
В безграмотно написанном тексте мне не нравится безграмотность!
Но могу даже рассказать и подробнее. Я ощущаю очень низкий уровень как общего образования, так и профессиональной квалификации.
Я ощущаю нежелание приложить усилия и составить текст сообщения, следовательно, пренебрежение к участникам форума.
Так же, я вижу незнание предмета вопроса - незнание базовых понятий, описанных в документации к memcached и в теории баз данных.
Причина - автор их не читал и не считает нужным тратить месяцы на обучение, а хочет решить проблему за счет других.
Такое отношение мне неприятно.
 

Разгильдяй

Новичок
Я же написал выше, что не претендую на звание "Программист года". Подскажите в каком направлении дальше искать и я с удовольствием продолжу поиски. Документацию читал, а за безграмотный русский прошу прощения. Спасибо за ответ.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
в направлении раздела "работа" с указанием суммы компенсации за проектирование архитектуры приложения и аппаратного комплекса с учетом планируемой нагрузки
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
теоретически, я могу отправить тебя в направлении NoSQL или дублирования информации базой и memcached, детального анализа логики приложения и требуемой нагрузки,
таким образом, чтобы фильтр обрабатывался очень быстрой логикой, а данные получались из кеша,
но для реализации тебе таки прийдется потратить на изучение всего этого X месяцев
дело не в нежелании помочь
 

Разгильдяй

Новичок
теоретически, я могу отправить тебя в направлении NoSQL или дублирования информации базой и memcached, детального анализа логики приложения и требуемой нагрузки,
таким образом, чтобы фильтр обрабатывался очень быстрой логикой, а данные получались из кеша,
но для реализации тебе таки прийдется потратить на изучение всего этого X месяцев
дело не в нежелании помочь
1. Я честно говоря тоже уже думал о NoSQL.
2. По поводу обработки фильтра быстрой логикой, а данные из кеша это уже реализовано. Хотелось только поэксперементировать и исключить вообще PHP при запросах к серверу на чтение данных. Но стало интересно существуют ли в рамках моей задачи более интересные решение, чем фильтрация на стороне клиета или дублирование записей в мемкеше для каждого фильтра отдельно. Оба этих решения мне не нравятся. Почитал в выходные различные статьи про кеширование через мемкеш и захотелось поэксперементировать. Если бы можно было исключить фильтры, то решение было бы идеальное и из запросов на чтение можно было бы вообще исключить PHP.
3. Х месяцев потратить прийдется в любом случае и это даже не обсуждается.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
можно нескромный вопрос? тебе зарплату за это платят?
 
Сверху