0

PHP 或 Python 脚本会定期从远程数据库中获取大量 IP 地址(/32 网络掩码)数据集。在两次提取之间,数据集将临时存储在 APC 或 Memcached 密钥库中。

该脚本的主要工作是检查数据库/缓存中是否存在给定的 IP 地址(想想:“黑名单”)。

什么是最有效(性能方面)的方法:

  1. 将 IP 地址存储在 APC/Memcache 中
  2. 将给定的 IP 与存储的 IP 列表进行比较。

到目前为止我想出了什么:

备选方案 1 将所有 IP 地址存储为一个大数组列表,作为 APC 中单个键的值,然后执行

if (in_array("192.168.0.1", $ip_list_from_cache))

备选方案 2 将每个 IP 作为密钥名称存储在 APC 中,然后执行

if (apc_exists('192.168.0.1')

这是一个很大的列表,我希望比较检查非常快。

提前感谢您的任何评论!

4

1 回答 1

0

性能困境的解决方案通常是对两种解决方案进行基准测试。

不过,在这种情况下,我想说缓存方法更有意义:时间复杂度in_arrayO(N),即线性扫描。另一方面,缓存通常实现为哈希表,其中查找是O(1).

此外,如果您在 Memcached 中聚合记录,您将避免浪费大量 RAM 为每个 Web 工作进程在内存中复制列表一次。

这也可以说是一个更清洁的解决方案。


顺便说一句,您是否考虑过在另一个层面上这样做?通过一些简单的脚本,您可以在 LB(例如 Nginx)级别进行检查。

于 2013-09-20T20:00:57.323 回答