存储IP地址记录(DB备选)

时间:2012-01-03 15:52:51

标签: php mysql database ip

我需要为每个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 个答案:

答案 0 :(得分:3)

是什么让您认为构建自己的基于文件的数据库方案比具有20年经验的软件工程师的软件构建更好?只需使用一个MySQL数据库 - 很少有一种情况下不这样做会更好 - 除非你真的希望保存文件。

答案 1 :(得分:2)

在ServerFault上查看有关DBMS优化的this question / answer。你试图重新发明轮子没有特别的原因(除非你不会在那个VPS上使用MySQL)。而且,关于在MySQL中存储IP地址的主题,请查看MySQL的INET_ATOI()函数。

答案 2 :(得分:1)

使用文件系统也不是免费的,并且可能在多个点上造成很多白发,所以我怀疑它是否真的比使用数据库更好。

也就是说,无论您最终使用的是文件还是数据库,您可能都想了解ip2long和MySQL的等效INET_ATON。特别是如果你最终使用MySQL,因为数字键往往比字符串更有效。

答案 3 :(得分:0)

你试过sqlite吗?它应该运作良好。

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