Лучший способ рассчитать просмотр страницы в Plone - PullRequest
4 голосов
/ 12 октября 2011

Я работаю в случае, требующем очень сложного использования просмотров страниц.

Каждый объект контента будет иметь просмотр страницы, и к нему нужно легко получить доступ, чтобы мы могли делать различные связанные с ним вещи (отсортированопо каталогу результат, отображение, расчет популярного метра ...).Ближайшим эквивалентом является представление видео на YouTube.

Я думаю о некоторых возможных способах реализации этого:

  1. Использование хранилища аннотаций и индексатора для создания индекса и метаданных portal_catalog.

  2. Используйте только индексатор (либо используйте атрибут volatile или обновите индексную базу на основе предыдущего индекса), чтобы нам не приходилось записывать часто изменяемые данные дважды.Вид страницы сохраняется только в мозге объекта.

  3. Использовать реляционную базу данных.Тогда как мы можем заставить его работать с portal_catalog?

  4. Используйте слой-обертку перед Plone для аналитики и получения нужных данных через некоторый API.Это снижает гибкость, но помогает сократить объем работы на стороне Plone (запись подписчика на событие, проверка сеанса, cookie-файлы ...), и производительность должна быть лучше?

Ваши идеи / опыт по этому поводу?

Ответы [ 6 ]

3 голосов
/ 12 октября 2011

Мы использовали внешний анализатор логов для проекта клиента (большая частная интрасеть). Архитектура:

  • Библиотека js добавляет «веб-ошибку», пустой gif-файл с дополнительными параметрами запроса, загруженный с выделенного сервера nginx.
  • Обработчик журналов берет журналы nginx, вращает их и анализирует строки в базе данных, считая доступ вместе с дополнительными метаданными. Записи в БД включают UID контента, среди прочих интересных углов.
  • Сайт имеет доступ только для чтения к той же базе данных, чтобы делать запросы статистики.

Подсчет страниц тогда прост, просто запросите базу данных для правильного UID. Ранжированные списки не намного сложнее; запросите статистику, затем используйте UID для присоединения данных каталога к результирующему набору.

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

Мы не можем использовать Google Analytics в данном конкретном случае, но если у вас нет такого ограничения, я бы, конечно, посоветовал вам изучить colleg.googleanalytics и посмотреть, сможете ли вы его подогнать. ваш вариант использования.

2 голосов
/ 12 октября 2011

Запись при каждом доступе является наихудшим сценарием для ZODB.Реляционные БД, как правило, неплохо справляются с подобными вещами, и я бы сначала посмотрел на них.

Нужно отсортировать данные?Просто добавьте некоторые утилиты или методы типа контента для запроса базы данных.Когда вам нужно выполнить поиск, выполните поиск в каталоге, а затем используйте методы db-connect для аннотирования данных для сортировки.

2 голосов
/ 12 октября 2011

Вы уже видели этот товар?: http://plone.org/products/collective.googleanalytics/

Кажется, он соответствует вашим потребностям или, по крайней мере, может стать хорошей основой для ваших настроек.

1 голос
/ 08 марта 2012

Я заметил, что ребята из Nidelven только что выпустили http://plone.org/products/Products.ZODBFriendlyCounter,, который обещает сделать это изначально без излишней ZODB write / bloatСтоит проверить, хотелось бы услышать больше мнений экспертов по этому поводу.

1 голос
/ 12 октября 2011

Мы сделали это давно (plone2.5). Клиент хочет этого! Как только это было сделано, это было наконец не реальная потребность. это были предпочтительные статьи, это не равно самым просматриваемым ... поэтому рейтинг контента был один.

Итак, сначала проверьте это с вашим клиентом.

Далее, лучший способ удовлетворить ваши потребности - это установить аналитический инструмент, googleanalytics или что-то еще, кроме API, для запроса самой просматриваемой страницы. Если вам нужно это в portal_catalog, вы можете индексировать значение при просмотре статьи + только каждый час.

0 голосов
/ 05 марта 2012

Если вы используете ловкость, вам следует настроить поведение просмотра страницы, чтобы добавить данные аннотата в основной объект, а дату аннотации использовать атрибут volatile.

...