PHP:以MySQL和最快的方式存储IP的正确方法,以在数百万行中搜索IP
-
09-10-2019 - |
题
我正在使用inet_aton存储IPv4地址。 [我在做这件事吗?并且是否使用“无符号”吗?]此特定列也是索引的。由于整个表中将有数百万的行和多个行包含相同的IP,这将是搜索这些行的最快方法?
..还是我以错误的方式进行操作?
解决方案
我在做这件事吗?并且使用“未签名”?
是的。没有 unsigned
更高的IP地址将无法正确存储并使用 int
(代替 varchar
)最有效地存储它。
搜索这些行的最快方法是什么?
至于搜索优化,这取决于您要搜索的内容(附加表等)。通常,索引无签名的int列可为您提供快速的性能。
其他提示
使用inet_aton是正确的方法,因此您不会存储额外的毫无意义的信息(对于任何给定的3个数字,能够存储大于256的值没有意义)。它导致32位数字,将适合未签名的INT。
在int列上索引将快速通过IP地址进行查找。如果您的数据库确实很大,您将开始遇到缩放问题,以在MySQL中存储此类内容。
我假设您不会这样做,但会指出,在RDBMS中存储一个大型繁忙网站的完整日志信息通常是一件坏事(TM)。您不需要数据库保证的关系完整性属性,并且编写比阅读更多的条目。考虑NOSQL或附加到平面文件,并在必要时使用专用程序在日志中解析。
是的,这是将IP地址存储在MySQL中的最佳方法。
如果您查看文档的 inet_aton 您可以看到建议使用未签名的int列或任何IP地址(与第一个Octed超过127)的任何IP地址不会正确存储。
这也是进行搜索的非常快的方法。 MySQL可以很好地处理整数列,并且通过索引此列并在搜索中使用inet_aton,您可以实现非常快的查询。
不隶属于 StackOverflow