PHP:在 MySql 中存储 IP 的正确方法和在数百万行中搜索 IP 的最快方法

标签 php mysql ipv4 unsigned-integer

我使用 inet_aton 将 IPv4 地址存储在“int unsigned”列类型中。 [我这样做对吗?是否需要使用“unsigned”?] 这个特定的列也被索引了。由于在整个表中将有数百万行和多行包含相同的 IP,搜索这些行的最快方法是什么?

..还是我用错了方法?

最佳答案

使用 inet_aton 是执行此操作的正确方法,因此您不会存储额外的无意义信息(对于任何给定的 3 个数字,能够存储大于 256 的值毫无意义)。它会产生一个 32 位数字,适合 unsigned int。

在 int 列上建立索引将使通过 IP 地址进行快速查找。如果您的数据库变得非常大,您将开始遇到在 MySQL 中存储此类内容的扩展问题。

我假设您不会这样做,但会指出在 RDBMS 中存储大型繁忙站点的完整日志信息通常被认为是一件坏事 (tm)。您不需要数据库保证的关系完整性属性,并且您写入的条目比读取的条目多得多。考虑使用 nosql,或附加到平面文件,并在必要时使用专用程序解析您的日志。

关于PHP:在 MySql 中存储 IP 的正确方法和在数百万行中搜索 IP 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980489/

相关文章:

php - 在插入或更新之前检查 MySQL 行中的数据

sql - 给定子网范围和 IP 列表,选择 IP 所在的所有行

php - YII 框架中的 Guzzle 导入错误

PHP/MySQL 数据库连接优先级?

php - SourceGuardian 错误

php - 如何首先显示最新上传的图像? (PHP+CSS)

PHP/HTML/JavaScript : Automatically leave page?

PHP MYSQL - 插入不使用列名但使用自动增量字段

php - 如何在 PHP 中仅使用 REMOTE_ADDR 显示 IPv4?

java - 如何在服务器上获取客户端的ip?