За последние 24 часа нас посетили 21117 программистов и 1604 робота. Сейчас ищут 2396 программистов ...

Счетчик посещений страницы

Тема в разделе "MySQL", создана пользователем ionico, 27 июн 2011.

  1. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    Здравствуйте, уважаемые программисты!

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

    Есть вот такие две идеи:

    1. Создать в БД таблицу, со столбцами: counterID, pageID, userID, получается для каждой страницы будет своя строчка, в которую будет записан ID страницы и ID пользователей посещающих её, в виде строки UserName01, UserName02, UserName03, ...

    Идея плоха тем, что я не знаю какой размер ячейки userID указать, и потом, когда пользователей станет много, это получится огромнейшая строка, с которой работать будет не удобно.

    2. Создать такую же, как и в первом варианте таблицу и записывать каждое уникальное посещение новой строкой, т.е.

    1 page01 UserName01
    2 page01 UserName02
    3 page02 UserName01
    4 page02 UserName02
    ...
    N pageN UserNameN

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



    Других вариантов у меня нет, я в тупике. Может я целиком неправильно подхожу к этому вопросу?
    Подскажите, пожалуйста, в каком направлении двигаться? Есть ли какие-то лаконичные решения данной задачи?

    Заранее спасибо.
     
  2. Scorpion15

    Scorpion15 Активный пользователь

    С нами с:
    1 мар 2011
    Сообщения:
    19
    Симпатии:
    0
    Если я Вас правильно понял, предлагаю свой вариант:
    При посещении определенной страницы(на которой необходимо вести счетчик) будет производится запрос к БД таблицы такого вида:
    id INT, userId INT, count INT
    id-номер страницы
    user- это id пользователя из таблицы с зарегистрированными пользователями!
    count-количество посещений.
    Из запроса мы должны узнать есть ли в этой таблицы уже такой пользователь(ну и соответственно к какой страницы мы обращаемся)
    если есть то ++ к count,
    если нет, то создаем новую строку в таблице и записываем туда данные!
     
  3. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    Спасибо за ответ, но это немного не то, мне нужно узнать сколько уникальных посетителей было на определённой странице?

    Т.е. таблица вида ID INT, pageID INT, userID INT, а потом подсчитывать сколько раз в таблице встречается определённый pageID. Только меня смущает тот факт, что строк в таблице у меня будет: (кол-во страниц) * (кол-во уникальных посетителей)... если уникальных посетителей будет много, то таблица будет очень большая. Я плохо знаком с такими тонкостями БД. Сильно ли такое кол-во строк замедлит скорость запроса к этой таблице БД?
     
  4. Scorpion15

    Scorpion15 Активный пользователь

    С нами с:
    1 мар 2011
    Сообщения:
    19
    Симпатии:
    0
    Так если сделать как я написал выше, и потом сделать запрос типа:
    SELECT count(userID) FORM table WHERE pageID=1;

    И я немного не понимаю смысл вот этого:

    Код (Text):
    1. Только меня смущает тот факт, что строк в таблице у меня будет: (кол-во страниц) * (кол-во уникальных посетителей)...
    Если можно объясните по подробнее!
     
  5. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    Предположим, у меня 5 страниц, которые нужно отслеживать, и 10 пользователей.
    Если каждый пользователь зайдёт хотя бы по одному разу на каждую страницу, то у меня уже будет 50 строк в таблице в БД, вида:

    1, page01, user01
    2, page01, user02
    3, page01, user03
    ...
    10, page01, user10
    11, page02, user01
    12, page02, user02
    13, page02, user03
    ...
    ...
    50, page05, user10

    в принципе, ничего страшного, но если пользователей будет 1000, а страниц 2000, то не сильно ли это огромная таблица получится? так можно делать? или может есть более лаконичные варианты хранения такого рода данных?

    заранее благодарю за ваш ответ.
     
  6. Scorpion15

    Scorpion15 Активный пользователь

    С нами с:
    1 мар 2011
    Сообщения:
    19
    Симпатии:
    0
    Моё сугубо личное мнение, что в этом нет ничего страшного, mysql выдержит намного больше, ведь зачем тогда нужна БД если в ней хранить 10 записей :)
    И вообще я очень сильно сомневаюсь что у вас будет так много страниц, возможно если только пользователей.
    А для полного удовлетворения напишите цикл записи данных в тестовую таблицу(допустим миллион записей) и попробуйте поработать с тем, что получиться, и Вы увидите как быстро выполняются запросы.
     
  7. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    пару миллионов легко выдерживает. А если еще вместо user10 и page05 будут просто цифры - ID пользователя и ID страницы соответственно - то и миллионов 5 можно легко.
     
  8. ionico

    ionico Активный пользователь

    С нами с:
    16 авг 2008
    Сообщения:
    73
    Симпатии:
    0
    Понятно. Всем спасибо за ответы. Буду пробовать :)