За последние 24 часа нас посетили 16966 программистов и 1652 робота. Сейчас ищут 843 программиста ...

счётчик просмотра новости

Тема в разделе "Вопросы от блондинок", создана пользователем siiXth, 26 окт 2010.

  1. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    задача:
    считать просмотр новости 1 раз в сутки от определённого айпи
    счётчик просмотров есть и он делает апдейт бд каждый раз при просмотре новости прибавляя к счётчику +1
    нужно записывать айпи и после проверять была ли им просмотрена новость и тогда делать апдейт в случае если не была.

    я собственно сделал путём добавления в таблицу строки ip_views , в ней айпишки через запятую
    при просмотре новости всё извлекается , сравниваю айпи юзера с бд_айпишек у новости через in_array
    на следующий день данное поле пустое и можно считать всё заново
    и того при каждом последующем просмотре новости мы не делаем апдейты бд

    но после того как я сделал мне говорят что данная реализация положит даже vds при 1 хостах в день :D

    с чем я почему-то несогласен :D

    кто прав ? :>
     
  2. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    лоховская реализация. Отдельную таблицу надо, куда вносить ип и ид новости.
     
  3. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    но всё-таки каковой будет нагрузка ? неужели такой сверхвысокой как мне заявили ? :D
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да норм будет.

    лучше просто делать по уму - таблица: IP, id_новости
    только вот ты видимо не знаешь волшебную фунциклю у мускула которая айпи в четырехбайтный инт переводит. очень экономно выходит. Я названия не помню. погугли "mysql ip to integer" и будет тебе счастье =)
     
  5. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    мне нужна именно моя реализация , неважно почему )
    и да , я не шарю ) тоесть 1288722231,1288722232,1288722233
    будет занимать меньше места ?

    и прошу подтвердить что
    :D
    а желательно то что убирание постоянного апдейта при просмотре новости принесёт больше эффекта чем сравнение с относительно большим полем с массивом айпишек и его перезаписывание xD а то ту так кричаааат что положится всё даже при 1к хостов в день ... :D ну а я говорю что итоговая нагрузка в итоге при любых раскладах будет даже возможно меньше , у меня фобия запросов бд , у друга фобия запроса больших полей :D рассудите нас )
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    siiXth
    о_О делай как я сказал =)
     
  7. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    так блин! :D
    вопрос был такой
    PHP:
    1. тоесть 1288722231,1288722232,1288722233
    2. будет занимать меньше места ?
    это уже айпишки в 4байтах ) вносится в бд , так будет меньше ?

    и если ты говоришь про "как я сказал" - тоесть "таблица: IP, id_новости" , так не катит.
    ты понимаешь что я должен стоять на своём до конца ? :D меньше будет запросов , но больше по размеру поля - это страшно разве ?

    рассудить приказано !
    и пох что реализация лоховская - просто работать оно должно без нагрузки и я считаю что так и будет , но со мной не соглашаются )
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    siiXth
    нагрузка будет красивая, если делать как я сказал. Что делать, если хочется левой пяткой почесать правое ухо и что за этим последует - я не знаю. Как минимум, ты лишаешься возможности делать выборки. И чтобы сделать выборку по IP например, тебе придется вздрочнуть чуть менее чем полностью всю свою хитрую базу.
    Нах надо. Ты еще к тому же сохраняешь IP в тексте + кавычки + запятая? посчитай
    18 байт чтоли выходит на каждую запись +id новости. а там четыре + id новости. Хотя зависимость тут хитрая. Нужен эксель.

    Ты задачу разжуй, плс. Может тебе просто в блоб писать интегеры четырехбайтные и не париться... Но опять таки придется жить без выборок, не сможешь даже посчитать сколько всего было за сегодня просмотров с такого-то IP - придется всю базу за сегодня просеивать. По сути ты пытаешься сделать работу БД в пхп скрипте. Это тупняк.
     
  9. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    Занимать она запросто может больше места, чем отдельной таблицей, особенно если в отдельной таблице типа поля будет не строка, а числовой (для ipv4 - 4 байта). К тому же твое текстовое поле должно быть "большое" (точнее желательно).
    У меня по такому принципу избранное сделано, не доходят руки переписать...

    индексы добавить, все так же один селект и, может быть, один апдейт. Ты ничего не парсишь и массив не создаешь, можно даже значение из базы не доставать - если строки вернула значит ip есть в ней.
     
  10. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    кстати, вариант с доп.таблицей расширяется: например ты можешь задавать временной интервал для нужного ИП когда можно входить, ввести счетчик с одного ИП (да, апдейт будет всегда) и время последнего запроса, почасовые выборки в диаграммку вывести и прочее...
     
  11. siiXth

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

    С нами с:
    14 мар 2010
    Сообщения:
    1.447
    Симпатии:
    1
    да не усложняйте всё , как дал - так и есть

    мне с теми айпишками больше ничего не надо делать кроме in_array
    ячейка типа 1288722231,1288722232,1288722233 (каждая айпишка переведена в 4 байта , но с запятыми)
    без ковычек , только цифры и запятые

    нужна именно такая реализация , а точней узнать какая на ней будет нагрузка на той реализации которая уже готова
    обнуляет ячейку раз в сутки , тоесть просмотрят 1000 гостей новость , будет 1000 айпишек , при каждом просмотре новости идёт проверка in_array с айпи юзера и этой ячейкой в которой 1000 айпишек
     
  12. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    реализация не очень хорошая:
    - расходуется лишнее место на диске,
    - при обнулении таблицы файл БД будет фрагментироваться,
    - лишнее текстовое поле в таблице
    - лишняя обработка в пхп

    но работать должно нормально при небольшой нагрузке.

    хотя решение с доп.таблицей изящнее, проще и удобнее.
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Опять грибочками балуешься? =)
     
  14. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    siiXth
    строка "1288722231,1288722232,1288722233" занимает 33 байта, а не 12 :)
     
  15. antonn

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

    С нами с:
    10 июн 2007
    Сообщения:
    2.996
    Симпатии:
    0
    и если уж так захотелось, ну сделай без in_array(), хотя бы регуляркой:
    Код (Text):
    1. if (!preg_match("(^".$ip."\,|^".$ip."$|^\,".$ip."$|\,".$ip."\,|\,".$ip."$)", $in_base_str )) {
    2.   //нету тут ip
    3. }
    для тупой проверки хотя бы в цикле прогони свое решение и это, изредка меняя $ip на рандомный.