Я разрабатываю рынок плагинов Minecraft, и мне нужен надежный и эффективный способ отслеживания просмотров страниц и загрузок файлов. Меня интересует только отслеживание просмотров и загрузок ресурсов (плагинов), размещенных на сайте.
Я создал этот пост, потому что встречал много похожих вопросов, но они либо устарели, либо нет. особенно полезно для моего конкретного случая использования. Я осознаю, что моя текущая структура таблиц может быть не самой лучшей, поэтому приветствуются любые предложения по ее улучшению. Вот подход, который я пробовал до сих пор:
Отслеживание просмотров страниц:
Я создал таблицу resources_views:
Он обновляет last_viewed_at вместо создания новых строк, если
критерии совпадают.
Чтобы предотвратить рассылку спама (например, когда пользователь обновляет страницу), он обновляет
метку времени только в том случае, если последний просмотр был более 30 минут назад.
Отслеживание загрузок:
Аналогично я отслеживаю загрузки в таблице resources_downloads:
Ограничение UNIQUE предотвращает дублирование строк для одного и того же IP-адреса или
пользователя.
Он позволяет отслеживать загрузки каждого ресурса и
обновления конкретного ресурса.
Мои вопросы:
Это хороший подход для отслеживания просмотров и загрузок ресурсов
и предотвращения спам и экономия места в базе данных?
Есть ли лучшие или более эффективные альтернативы для достижения этой цели,
особенно для систем с высоким трафиком?
Повысит ли использование другой структуры базы данных, например агрегирование
просмотров/загрузок в ежедневную сводную таблицу, производительность
в долгосрочной перспективе?
Мои основные цели:
Минимизируйте размер базы данных и предотвращайте дублирование строк.
Поддерживайте отзывчивость системы как к высокому трафику, так и к частым
обновлениям.
Будем признательны за любые предложения и улучшения!
Я разрабатываю рынок плагинов Minecraft, и мне нужен надежный и эффективный способ отслеживания просмотров страниц и загрузок файлов. Меня интересует только отслеживание просмотров и загрузок ресурсов (плагинов), размещенных на сайте. Я создал этот пост, потому что встречал много похожих вопросов, но они либо устарели, либо нет. особенно полезно для моего конкретного случая использования. Я осознаю, что моя текущая структура таблиц может быть не самой лучшей, поэтому приветствуются любые предложения по ее улучшению. Вот подход, который я пробовал до сих пор: Отслеживание просмотров страниц: Я создал таблицу resources_views: [code]CREATE TABLE resource_views ( view_id INT AUTO_INCREMENT PRIMARY KEY, ip_address CHAR(64) NOT NULL, user_id VARCHAR(10), resource_id VARCHAR(5) NOT NULL, update_id VARCHAR(5) NOT NULL, first_viewed_at DATETIME NOT NULL, last_viewed_at DATETIME NOT NULL, UNIQUE KEY ( ip_address, user_id, resource_id, update_id ) ); [/code] Основные особенности этого дизайна: [list] [*]Он гарантирует отсутствие дублирующихся строк за счет создания уникальной комбинации ip_address >, [code]user_id[/code], resources_id и update_id. [*]Он обновляет last_viewed_at вместо создания новых строк, если критерии совпадают. [*]Чтобы предотвратить рассылку спама (например, когда пользователь обновляет страницу), он обновляет метку времени только в том случае, если последний просмотр был более 30 минут назад. Отслеживание загрузок: Аналогично я отслеживаю загрузки в таблице resources_downloads: [code]CREATE TABLE resource_downloads ( ip_address VARCHAR(65) NOT NULL, user_id VARCHAR(10) DEFAULT NULL, resource_id INT NOT NULL, update_id INT NOT NULL, first_downloaded_at DATETIME NOT NULL, last_downloaded_at DATETIME NOT NULL, PRIMARY KEY (ip_address, resource_id, update_id), CONSTRAINT unique_download UNIQUE (ip_address, user_id, resource_id, update_id) ); [/code] Здесь также: [list] [*][code]last_downloaded_at[/code] обновляется, если критерии совпадают. [*]Ограничение UNIQUE предотвращает дублирование строк для одного и того же IP-адреса или пользователя. [*] Он позволяет отслеживать загрузки каждого ресурса и обновления конкретного ресурса. [/list] Мои вопросы: [list] [*]Это хороший подход для отслеживания просмотров и загрузок ресурсов и предотвращения спам и экономия места в базе данных? [*]Есть ли лучшие или более эффективные альтернативы для достижения этой цели, особенно для систем с высоким трафиком? [*] Повысит ли использование другой структуры базы данных, например агрегирование просмотров/загрузок в ежедневную сводную таблицу, производительность в долгосрочной перспективе? [/list] Мои основные цели: [list] [*]Минимизируйте размер базы данных и предотвращайте дублирование строк. Поддерживайте отзывчивость системы как к высокому трафику, так и к частым обновлениям. [/list] Будем признательны за любые предложения и улучшения!