Список Просмотренных Материалов

  • Автор темы Автор темы maximus825
  • Дата начала Дата начала
M

maximus825

Коллеги, добрый день!

Столкнулся с простой, на первый взгляд, ситуацией. Существует сайт. На сайте публикуются материалы пользователей. Необходимо, при выборе пользователем, выводить список новых материалов, которые этот самый пользователь не видел.

Пока придумано три решения:
1. Создать дополнительную таблицу в БД, куда складывать ID всех просмотренных материалов и строить вывод исключая эти самые ID. (минус - огромнейшая таблица. На сайте в данный момент >40к материалов и >600 пользователей. 40 000 * 600 = 24 миллиона строк. И это далеко не предел.)
2. В каждом материале в соответствующую ячейку вкладывать через ";" ID пользователей, просмотревщих материал. (минус - очень быстро можно забить ячейку данными настолько, что ее длина станет кртически большой превысит максимальный размер ячейки для любого типа данных)
3. Создать ячейку в таблице пользователей и указывать в ней время последнего посещения сайта. На основании этого строить список новых материалов (минус - неточность)

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

Заранее благодарен.
 
Очень простая. Добавим в таблицу с пользователями два столбца (last_time и this_time). Все новые материалы будем определять по значению ячейки last_time. Формировать ее будем исходя из сессии. Время сессии 15 минут. Время каждого последующего действия пользователя на странице материалов, будем хранить в ячейке this_time. Если между значениями ячейки this_time и текущим временем менее 15 минут - значение ячейки last_time оставляем без изменений. Если же пройдет более 15 минут - в ячейку last_time вносим значение ячейки this_time, а в this_time вносим значение текущего времени.

Неточность заключается в следующем. Допустим входит пользователь на сайт и выбирает просмотр только новых материалов. Ему строится список новых публикаций с момента его последнего входа (для примера 5 страниц по 15 материалов). Пользователь просматривает первую и вторую страницы, а далее его кто-то отвлекает на срок более 15 минут. При попытке прочитать 3ю страницу новых материалов, его перебросит на первую страницу, где будет всего (для примера) 2 новых публикации. Вот именно это меня и не устраивает.
 
Вы какой-то огород нагородили.
Хватит одного столбца с записанным туда время последнего прочитанного, или еще чего, к примеру время последней считки.
Проще надо быть, проблем меньше...
 
Вы какой-то огород нагородили.
Хватит одного столбца с записанным туда время последнего прочитанного, или еще чего, к примеру время последней считки.
Проще надо быть, проблем меньше...
И как вы предлагаете обновлять время последнего прочитанного материала? Если при обновлении страницы то это не вариант. Страниц может быть более одной.
 
Да хоть мильён, разница какая?
начните с начала, с определения - что такое прочитанный?
 
Да хоть мильён, разница какая?
начните с начала, с определения - что такое прочитанный?
Прочитанный это значит что пользователь этот материал видел. На странице материала, в общем списке. Без разницы где именно. Если человек посетил страницу, на которой публиковался материал, значит этот материал пользователь видел. В каком порядке выводятся материалы, тоже не должно быть важно. Если пользователь смотрит главную страницу, то материалы выходят строго по ID (3966/3967/3968 и т.д.), но если пользователь видит материал на странице категории, то материалы не факт что будут идти последовательно. Следовательно если запомнить номер последнего просмотренного, можно проморгать пару материалов.
 
Ничего не понятно. если чел видит список из надцати страниц, считается что все видел или как?
 
тогда вам надо новая таблица куда скидывать прочитанные айдишники
 
Размер таблицы, получающийся в данный момент меня очень сильно смущает.
 
5000 ? это можно сказать пустая таблица.
 
5000 ? это можно сказать пустая таблица.
Да там не 5000. Сейчас 44 тысячи постов. 600 пользователей. На выходе имеем таблицу в 24 миллиона строк. Учитывая что количество пользователей растет так же, как и количество материалов - Неособо маленькая таблица получится.
 
это не намного больше 5000, пустая
44 тысячи это количество материалов. А вот количество просмотренных (если писать в базу потоково) более 24х миллионов. Но мы нашли решение. Проверка будет вестись по дате последнего прочитанного поста и списку просмотренных постов, которые будут один за другим добавляться в базу, а при достижении 100% просмотра материалов на сайте (или нажатии кнопки "я все прочитал") дата последнего прочитанного поста будет обновляться на текущую, а все записи изи списка просмотренных - удаляться.
 
данных у вас всего 44 тыс, откуда вы миллионы взяли одному богу известно, да и при миллионе это не так и страшно. не важно сколько штук в таблице, важнее сколько их у чела, у чела 44 тыс.
а дальше опять непонятно про что разговор. поток сознания...
 
данных у вас всего 44 тыс, откуда вы миллионы взяли одному богу известно, да и при миллионе это не так и страшно. не важно сколько штук в таблице, важнее сколько их у чела, у чела 44 тыс.
а дальше опять непонятно про что разговор. поток сознания...
А вы посчитайте сами. 44 тысячи материалов. 600 пользователей. 44000 на 600 умножьте.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!