Хранение записи для IP-адреса (альтернатива БД) - PullRequest
0 голосов
/ 03 января 2012

Мне нужно хранить запись для пользователя по IP-адресу, чтобы ограничить скорость, с которой определенный IP-адрес может выполнять действие.

Я знаю, что сохранение IP в базе данных будет работать, но ябеспокоит то, что на небольшом VPS с ограниченными ресурсами процесс MySQL потребует слишком много вычислительной мощности.Есть ли другой способ хранения данных для IP?

Я думал о системе, похожей на:

/ips/
/ips/127/
/ips/127/0
/ips/127/0/0
/ips/127/0/0/1.txt

Пример кода:

$ip_parts = explode('.', $_SERVER['REMOTE_ADDR']);
$records = intval(file_get_contents('ips/' . implode('/', $ip_parts)));

if($records > 50) {
    echo 'Error - credits used.';
} else {
    // Do something
}

С 1.TXT-файл, содержащий необходимые данные.Могу ли я столкнуться с проблемами с количеством файлов или папок, из-за которых этот метод работает медленнее, чем база данных?

Ответы [ 4 ]

3 голосов
/ 03 января 2012

Что заставляет вас думать, что создание собственной схемы базы данных на основе файлов лучше, чем сборка программного обеспечения для инженеров-программистов с 20-летним опытом?Просто используйте базу данных MySQL - редко бывает так, что лучше этого не делать, кроме случаев, когда вы действительно хотите сохранить файлы.

2 голосов
/ 03 января 2012

Проверьте этот вопрос / ответ на ServerFault относительно оптимизации СУБД.Вы пытаетесь изобрести колесо без особой причины (если только вы никогда не будете использовать MySQL на этом VPS).И, в то время как на предмет хранения IP-адресов в MySQL, взгляните на функцию INET_ATOI () для MySQL.

1 голос
/ 03 января 2012

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

При этом, независимо от того, используете ли вы файлы или базу данных, вы, вероятно, захотите узнать о ip2long и эквивалентном MySQL INET_ATON. Особенно, если вы в конечном итоге используете MySQL, поскольку числовые ключи, как правило, более эффективны, чем строки.

0 голосов
/ 03 января 2012

Вы пробовали sqlite? Должно работать хорошо.

http://php.net/manual/en/book.sqlite.php

...