Как лучше всего сохранять IP адреса для статистики.
Например для написания системы счётчиков, обсчёта статистики посещений, требуется запись большого количества IP адресов и приходится часто сравнивать их, что приводит к высоким нагрузкам. Например мы сохраняем разные IP чтобы узнать сколько уникальных посетителей у нас было!
Далее описанный мой способ сохранения и проверки IP адресов улучшает производительность в 4 раза. (посравнению с обычным)
1. Способ сохранения
- в Mysql используем поле text
- в файлах, каждому аккаунту свой фаил с IP например в папке ips: ips/user1.dat
- при использовании памяти, необходимо выделить достаточно
2. Метод кодирования и оптимизации
Каждый IP выглядит примерно так: 123.123.123.123
получаем 15 символов + один символ для разделения IP-адресов = 16
Столько требуется для записи одного IP, а для 1000 выходит уже 16кб информации!
Уменьшаем в 4 раза следующим способом:
$ip=$REMOTE_ADDR; $a=explode(".",$ip); $ip=chr($a[0]).chr($a[1]).chr($a[2]).chr($a[3]);
Теперь наш IP закодирован и составляет всего 4 символа.
Добавление в фаил с IP адресами происходит без разделителя, он нам не нужен.
3. Как проверить присутствие такого IP в переменной (из файла или Mysql) и добавить новый.
Мы получаем переменную с нашими закодированными IP адресами например из файла так:
$ips=file_get_contents("ips/user1.dat");
Теперь закодируем наш IP для проверки его в файле:
$ip=$REMOTE_ADDR; $a=explode(".",$ip); $ip=chr($a[0]).chr($a[1]).chr($a[2]).chr($a[3]);
Проверим наличие $ip в переменной $ips перебирая их через каждые 4 символа:
$found=0; for($i=0;$i<strlen($ips);$i+=4) if($ips[$i]==$ip[0]) if($ip==substr($ips,$i,4)) {$found=1;break;}
if($ips[$i]==$ip[0]) - используется для оптимизации процесса поиска
Теперь если IP ненайден то добавим его:
предполагается что у вас php4 и функция file_put_contents не существует, тогда воспользуемся стандартной процедурой добавления записи в фаил...
$f=fopen("ips/user1.dat","a"); fwrite($f,$ip); fclose($f);
Для работы с MYSQL и памятью читайте на php.net
Ну вот и всё, считаю что это самый оптимальный и продуктивный способ для создания подобных систем.
2007 copyright by demon