PHP或Python脚本定期从远程数据库中提取大型IP地址数据集(/ 32网络掩码)。中间提取数据集将临时存储在APC或Memcached密钥库中。
脚本的主要工作是检查数据库/缓存中是否存在给定的ip-address(想想:“黑名单”)。
最有效(表现明智)的方式:
到目前为止我想出了什么:
备选方案1 将所有IP地址存储为大型数组列表,作为APC中单个键的值,然后执行
if (in_array("192.168.0.1", $ip_list_from_cache))
备选方案2 将每个IP作为键名存储在APC中,然后执行
if (apc_exists('192.168.0.1')
这是一个很大的列表,我希望比较检查非常快。
提前感谢任何评论!
答案 0 :(得分:0)
性能困境的解决方案通常是对两种解决方案进行基准测试。
在这种情况下,我会说缓存方法更有意义:the time complexity of in_array
is O(N)
,即线性扫描。另一方面,缓存通常实现为哈希表,其中查找为O(1)
。
另外,如果你在Memcached中聚合记录,你将避免在每个web worker进程中浪费大量RAM在内存中复制一次。
它也可以说是一个更清洁的解决方案。
另一方面,您是否考虑过在另一个级别进行此操作?使用一些轻量级脚本,您可以在LB(例如Nginx)级别进行检查。