задача: считать просмотр новости 1 раз в сутки от определённого айпи счётчик просмотров есть и он делает апдейт бд каждый раз при просмотре новости прибавляя к счётчику +1 нужно записывать айпи и после проверять была ли им просмотрена новость и тогда делать апдейт в случае если не была. я собственно сделал путём добавления в таблицу строки ip_views , в ней айпишки через запятую при просмотре новости всё извлекается , сравниваю айпи юзера с бд_айпишек у новости через in_array на следующий день данное поле пустое и можно считать всё заново и того при каждом последующем просмотре новости мы не делаем апдейты бд но после того как я сделал мне говорят что данная реализация положит даже vds при 1 хостах в день с чем я почему-то несогласен кто прав ? :>
да норм будет. лучше просто делать по уму - таблица: IP, id_новости только вот ты видимо не знаешь волшебную фунциклю у мускула которая айпи в четырехбайтный инт переводит. очень экономно выходит. Я названия не помню. погугли "mysql ip to integer" и будет тебе счастье =)
мне нужна именно моя реализация , неважно почему ) и да , я не шарю ) тоесть 1288722231,1288722232,1288722233 будет занимать меньше места ? и прошу подтвердить что а желательно то что убирание постоянного апдейта при просмотре новости принесёт больше эффекта чем сравнение с относительно большим полем с массивом айпишек и его перезаписывание xD а то ту так кричаааат что положится всё даже при 1к хостов в день ... ну а я говорю что итоговая нагрузка в итоге при любых раскладах будет даже возможно меньше , у меня фобия запросов бд , у друга фобия запроса больших полей рассудите нас )
так блин! вопрос был такой PHP: тоесть 1288722231,1288722232,1288722233 будет занимать меньше места ? это уже айпишки в 4байтах ) вносится в бд , так будет меньше ? и если ты говоришь про "как я сказал" - тоесть "таблица: IP, id_новости" , так не катит. ты понимаешь что я должен стоять на своём до конца ? меньше будет запросов , но больше по размеру поля - это страшно разве ? рассудить приказано ! и пох что реализация лоховская - просто работать оно должно без нагрузки и я считаю что так и будет , но со мной не соглашаются )
siiXth нагрузка будет красивая, если делать как я сказал. Что делать, если хочется левой пяткой почесать правое ухо и что за этим последует - я не знаю. Как минимум, ты лишаешься возможности делать выборки. И чтобы сделать выборку по IP например, тебе придется вздрочнуть чуть менее чем полностью всю свою хитрую базу. Нах надо. Ты еще к тому же сохраняешь IP в тексте + кавычки + запятая? посчитай 18 байт чтоли выходит на каждую запись +id новости. а там четыре + id новости. Хотя зависимость тут хитрая. Нужен эксель. Ты задачу разжуй, плс. Может тебе просто в блоб писать интегеры четырехбайтные и не париться... Но опять таки придется жить без выборок, не сможешь даже посчитать сколько всего было за сегодня просмотров с такого-то IP - придется всю базу за сегодня просеивать. По сути ты пытаешься сделать работу БД в пхп скрипте. Это тупняк.
Занимать она запросто может больше места, чем отдельной таблицей, особенно если в отдельной таблице типа поля будет не строка, а числовой (для ipv4 - 4 байта). К тому же твое текстовое поле должно быть "большое" (точнее желательно). У меня по такому принципу избранное сделано, не доходят руки переписать... индексы добавить, все так же один селект и, может быть, один апдейт. Ты ничего не парсишь и массив не создаешь, можно даже значение из базы не доставать - если строки вернула значит ip есть в ней.
кстати, вариант с доп.таблицей расширяется: например ты можешь задавать временной интервал для нужного ИП когда можно входить, ввести счетчик с одного ИП (да, апдейт будет всегда) и время последнего запроса, почасовые выборки в диаграммку вывести и прочее...
да не усложняйте всё , как дал - так и есть мне с теми айпишками больше ничего не надо делать кроме in_array ячейка типа 1288722231,1288722232,1288722233 (каждая айпишка переведена в 4 байта , но с запятыми) без ковычек , только цифры и запятые нужна именно такая реализация , а точней узнать какая на ней будет нагрузка на той реализации которая уже готова обнуляет ячейку раз в сутки , тоесть просмотрят 1000 гостей новость , будет 1000 айпишек , при каждом просмотре новости идёт проверка in_array с айпи юзера и этой ячейкой в которой 1000 айпишек
реализация не очень хорошая: - расходуется лишнее место на диске, - при обнулении таблицы файл БД будет фрагментироваться, - лишнее текстовое поле в таблице - лишняя обработка в пхп но работать должно нормально при небольшой нагрузке. хотя решение с доп.таблицей изящнее, проще и удобнее.
и если уж так захотелось, ну сделай без in_array(), хотя бы регуляркой: Код (Text): if (!preg_match("(^".$ip."\,|^".$ip."$|^\,".$ip."$|\,".$ip."\,|\,".$ip."$)", $in_base_str )) { //нету тут ip } для тупой проверки хотя бы в цикле прогони свое решение и это, изредка меняя $ip на рандомный.