Хорошо, чтобы использовать memcache таким образом? или нужна перестройка системы? - PullRequest
1 голос
/ 25 августа 2009

У меня есть «оценка», которую мне нужно рассчитать для нескольких элементов для нескольких пользователей. Каждый пользователь имеет множество уникальных оценок, и вычисление может потребовать много времени и ресурсов процессора. (медлительность не на конце базы данных). Чтобы справиться с этим, я широко использую memcached. Без memcache для загрузки некоторых страниц потребуется 10 секунд! Memcache, кажется, работает хорошо, потому что оценки - это очень маленькие кусочки информации, но для их вычисления требуется некоторое время. Я на самом деле устанавливаю ключ, чтобы никогда не истек, а затем я удаляю их при случайных обстоятельствах изменения счета.

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

если это имеет значение, все это в python / django.

Намерение кеша - это плохая практика? Это нормально? Зачем? я должен попытаться перестроить вещи?

Ответы [ 3 ]

2 голосов
/ 25 августа 2009

Если это не сломано ... не исправляйте это; ^) Кажется, ваш метод работает, так что я бы сказал, придерживайтесь его. Вы можете посмотреть на memcachedb (или кабинет Токио), который является постоянной версией memcache. Таким образом, когда происходит сбой и перезагрузка машины memcache, ей не нужно пересчитывать все значения.

1 голос
/ 25 августа 2009

Вы применяете несколько архитектурных паттернов здесь, и у каждого из них, безусловно, есть место. Здесь недостаточно информации, чтобы оценить, нуждается ли ваше текущее решение в реструктуризации или ваши идеи будут работать. Мне кажется, что по мере того, как ваше понимание требований пользователя растет, вы, возможно, захотите что-то улучшить.

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

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

0 голосов
/ 26 августа 2009

Вместо того, чтобы использовать memcached, попробуйте сохранить вычисленную оценку в том же месте, что и другие ваши данные; это может быть проще и потребовать меньше блоков.

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

...