2010-06-22 5 views
0

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

Простейшим примером этого может быть отслеживать, какие продукты пользователь Приобретенные и рассматривающие так, что когда кто-то смотрит на продукт, мы можем показать «продукты других людей купили, которые также купили этот» ... и т.д.

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

EDIT: Под «эффективным снизу вверх» - я в основном только говорить о принятии решения, которое является эффективным как для хранения и извлечения - вероятно, следовало бы просто сказать, что :)

Кроме того, в добавьте еще одно осложнение, скажем, я хочу отслеживать отношения просмотра между продуктами, а не просто регистрировать, что просматривался отдельный продукт. Так, например, я мог бы показать на странице продукта А, что люди, просмотревшие продукт А, также просматривают продукты b c и d. В конце некоторых комментариев ниже я думал о создании таблицы/модели django с двумя простыми полями (product_name и last_viewed_date), таким образом я могу запустить задание, чтобы объединить все представления одного продукта в одну строку (с помощью last_viewed_date, принимая дату самой последней записи) ... НО, если я также хочу сохранить историю каждого из этих представлений, как объяснялось выше, как я могу это сделать?

+0

Можете ли вы объяснить, что вы подразумеваете под «эффективным снизу вверх» –

ответ

0

Дизайн таблицы базы данных будет лучшим решением. Таким образом, вы можете рекомендовать похожие предметы, которые просматривают люди.

Иногда люди могут заходить на сайт, иногда просто просматривать, поэтому для отслеживания просматриваемых элементов вам потребуется таблица с идентификатором session-id, а другая - идентификатором пользователя.

Также вы хотели бы классифицировать элементы и отображать только связанные элементы. Таким образом, если бы один клиент посмотрел на инструменты для садоводства и iPhone, вы бы не предложили следующему человеку, ищущему iPhone для покупки рейка.

Ответ отредактирован для комментариев

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

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

Я бы лично пошел с РСУБД, а не текстовым файлом в любой день для этого сценария.

+0

Но предположим, что типичный пользователь может посмотреть на 5 продуктов, и мы хотим отслеживать каждый из этих 5 просмотров. Умножьте это на тысячи пользователей, и это много написания базы данных. Как вы думаете, существует потенциально более эффективный способ хранения этих данных? Возможно, сначала файл журнала, а затем один раз в день сопоставлялся с таблицей db? –

+0

@Benjamin Dell - отредактированный для комментариев –

+0

Да, может быть, вы правы. Мне интересно, как я могу архивировать данные позже. Возможно, создав поле «qty», я мог бы просто объединить похожие записи вместе в конце каждого дня (т. Е. Если у меня есть 10 записей, показывающих, что продукт A был просмотрен, тогда они могут быть объединены в одну строку с датой, установленной на последний и поле qty обновляются, чтобы отразить общее число, которое также посмотрело на этот продукт. Звучит ли это разумно? PS Спасибо также Хэнку за предложение вашего предложения для декоратора. –

0

RDBMS может обрабатывать намного больше записей, чем кажется большинству людей. Если вы не заменяете существующую реализацию, которая уже обрабатывает огромные объемы трафика, лучше сделать код для ясности в настоящее время и позже изменить реализацию, если она не может идти в ногу. В идеале, вы сделали бы это с помощью совершенно чистого способа (например, декоратора функций просмотра, которые вы хотите отслеживать?), Чтобы позже вы могли поменяться на другую реализацию, не затрагивая весь ваш код.