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

Тема в разделе "PHP программирование", создана пользователем maximus825, 25 фев 2013.

  1. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Коллеги, добрый день!

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

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

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

    Заранее благодарен.
     
  2. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    какая такая ?
     
  3. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Очень простая. Добавим в таблицу с пользователями два столбца (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 новых публикации. Вот именно это меня и не устраивает.
     
  4. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Вы какой-то огород нагородили.
    Хватит одного столбца с записанным туда время последнего прочитанного, или еще чего, к примеру время последней считки.
    Проще надо быть, проблем меньше...
     
  5. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    И как вы предлагаете обновлять время последнего прочитанного материала? Если при обновлении страницы то это не вариант. Страниц может быть более одной.
     
  6. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Да хоть мильён, разница какая?
    начните с начала, с определения - что такое прочитанный?
     
  7. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Прочитанный это значит что пользователь этот материал видел. На странице материала, в общем списке. Без разницы где именно. Если человек посетил страницу, на которой публиковался материал, значит этот материал пользователь видел. В каком порядке выводятся материалы, тоже не должно быть важно. Если пользователь смотрит главную страницу, то материалы выходят строго по ID (3966/3967/3968 и т.д.), но если пользователь видит материал на странице категории, то материалы не факт что будут идти последовательно. Следовательно если запомнить номер последнего просмотренного, можно проморгать пару материалов.
     
  8. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    Ничего не понятно. если чел видит список из надцати страниц, считается что все видел или как?
     
  9. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Вот если он просмотрит каждую страницу из 20ти - значит все видел.
     
  10. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    тогда вам надо новая таблица куда скидывать прочитанные айдишники
     
  11. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Размер таблицы, получающийся в данный момент меня очень сильно смущает.
     
  12. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    5000 ? это можно сказать пустая таблица.
     
  13. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    Да там не 5000. Сейчас 44 тысячи постов. 600 пользователей. На выходе имеем таблицу в 24 миллиона строк. Учитывая что количество пользователей растет так же, как и количество материалов - Неособо маленькая таблица получится.
     
  14. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    это не намного больше 5000, пустая
     
  15. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    44 тысячи это количество материалов. А вот количество просмотренных (если писать в базу потоково) более 24х миллионов. Но мы нашли решение. Проверка будет вестись по дате последнего прочитанного поста и списку просмотренных постов, которые будут один за другим добавляться в базу, а при достижении 100% просмотра материалов на сайте (или нажатии кнопки "я все прочитал") дата последнего прочитанного поста будет обновляться на текущую, а все записи изи списка просмотренных - удаляться.
     
  16. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    данных у вас всего 44 тыс, откуда вы миллионы взяли одному богу известно, да и при миллионе это не так и страшно. не важно сколько штук в таблице, важнее сколько их у чела, у чела 44 тыс.
    а дальше опять непонятно про что разговор. поток сознания...
     
  17. maximus825

    maximus825 Member

    Регистрация:
    2 дек 2011
    Сообщения:
    6
    Симпатии:
    0
    А вы посчитайте сами. 44 тысячи материалов. 600 пользователей. 44000 на 600 умножьте.
     
  18. -master-

    -master- Well-Known Member

    Регистрация:
    14 янв 2012
    Сообщения:
    629
    Симпатии:
    18
    база это не арифметика
     
Загрузка...
Похожие Темы - Список Просмотренных Материалов
  1. gx6060
    Ответов:
    2
    Просмотров:
    423
  2. gx6060
    Ответов:
    6
    Просмотров:
    563
  3. Shandrik
    Ответов:
    6
    Просмотров:
    807
  4. anna
    Ответов:
    8
    Просмотров:
    813
  5. erhe
    Ответов:
    10
    Просмотров:
    790

Поделиться этой страницей