Динамически создаваемый список лучших статей в Django? - PullRequest
2 голосов
/ 29 июля 2010

Я создаю сайт на Django для своего сайта для газет.Наименее очевидная задача здравого смысла, с которой я столкнулся при объединении сайта, заключается в том, как лучше всего создать список «лучших статей» для боковой панели страницы.

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

Спасибо всем.

Ответы [ 4 ]

1 голос
/ 29 июля 2010

Преждевременная оптимизация, сначала попробуйте метод db, а затем посмотрите, не слишком ли он чувствителен к базе данных. Любая приличная база данных имеет настолько хорошие кэши, что, вероятно, не будет иметь большого значения. И даже если это проблема, взгляните на другие предложения по db / cache.

Скорее всего, кстати, у вас будет много более интенсивных запросов к базе данных с каждым представлением, чем с простым обновлением представления.

1 голос
/ 29 июля 2010

Я бы попробовал сельдерей (с джанго-сельдереем). Хотя его не так просто настроить и использовать в качестве кэша, он позволяет ставить в очередь такие задачи, как увеличение счетчиков, и выполнять их в фоновом режиме. Его можно даже комбинировать с техникой кеширования - в представлениях счетчики приращений в кеше и определение PeriodicTask, которые будут время от времени запускаться, сбрасывать счетчики и записывать их в базу данных.

Я только что вспомнил - однажды я обнаружил эту запись в блоге , которая обеспечивает хороший способ увеличения столбца «просматриваются» (или аналогичный) в базе данных с помощью вызова AJAX JS. Если у вас нет интенсивного движения, может быть, это хорошая идея?

В этом посте также упоминается django-tracking , но я об этом немного знаю, я никогда не использовал его сам (пока).

0 голосов
/ 29 июля 2010

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

Так что я бы пошел с кешем.Я думаю, что кеширование в django является проблемой здесь, потому что оно требует таймаутов для всех ключей.Я не уверен, навязано ли это memcached, если нет, то иди с redis.На самом деле, в любом случае, просто используйте redis, библиотека python великолепна, я уже использовал ее в проектах django, и она имеет атомарные приращения и мощную сортировку - все, что вам нужно.

0 голосов
/ 29 июля 2010

Если вы сделаете что-то вроде сортировки по видам сверху, это будет быстро, если вы индексируете столбец представления в БД. Другой вариант - собирать только лучшие статьи x каждый час или около того и помещать это значение в структуру кэша Django.

Приятной особенностью кэширования списка является то, что алгоритм, который вы используете для определения топовых статей, может быть настолько сложным, насколько вам угодно, без сильных ударов по БД при каждом просмотре страницы. Каркас кеша Django может использовать память, базу данных или файловую систему. Я предпочитаю БД, но многие другие предпочитают память. Я полагаю, что он использует pickle, поэтому вы также можете напрямую хранить объекты Python. Он прост в использовании, рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...