如何删除Cassandra表中属于指定私网IP范围的行数据
Cassandra删除指定私网IP段行数据操作方案
方案1:使用UDF(用户自定义函数)直接在CQL层过滤删除
前置操作
修改集群所有节点的cassandra.yaml配置,将enable_user_defined_functions设置为true,重启节点生效。
步骤1:创建IP转整数的UDF
CREATE OR REPLACE FUNCTION ip_to_int(ip text) RETURNS NULL ON NULL INPUT RETURNS bigint LANGUAGE java AS ' String[] parts = ip.split("\\."); if (parts.length != 4) return -1L; try { long p1 = Long.parseLong(parts[0]); long p2 = Long.parseLong(parts[1]); long p3 = Long.parseLong(parts[2]); long p4 = Long.parseLong(parts[3]); if (p1 < 0 || p1 > 255 || p2 < 0 || p2 > 255 || p3 < 0 || p3 > 255 || p4 < 0 || p4 > 255) { return -1L; } return (p1 << 24) + (p2 << 16) + (p3 << 8) + p4; } catch (NumberFormatException e) { return -1L; } ';
步骤2:确认目标网段的整数范围
目标私网IP段对应32位整数范围如下:
- 172.16.0.0 - 172.31.255.255:
2886729728~2887778303 - 192.168.0.0 - 192.168.255.255:
3232235520~3232301055 - 240.0.0.0 - 255.255.255.255:
4026531840~4294967295
步骤3:先查询验证匹配结果
替换示例中的表名ip_table、IP字段名ip_addr、主键名id为你的实际表结构,执行查询确认匹配的行符合预期:
SELECT id, ip_addr FROM ip_table WHERE ip_to_int(ip_addr) BETWEEN 2886729728 AND 2887778303 OR ip_to_int(ip_addr) BETWEEN 3232235520 AND 3232301055 OR ip_to_int(ip_addr) BETWEEN 4026531840 AND 4294967295 ALLOW FILTERING;
步骤4:执行删除
确认结果无误后执行删除语句:
DELETE FROM ip_table WHERE ip_to_int(ip_addr) BETWEEN 2886729728 AND 2887778303 OR ip_to_int(ip_addr) BETWEEN 3232235520 AND 3232301055 OR ip_to_int(ip_addr) BETWEEN 4026531840 AND 4294967295 ALLOW FILTERING;
方案2:客户端批量处理(适用于数据量大的场景)
如果表数据量超过10万行,使用ALLOW FILTERING容易超时,建议走客户端批量处理:
- 分批全表扫描数据,每次读取1000~5000行,避免单次请求压力过大
- 在客户端代码中判断IP是否属于目标网段,以下为Python判断示例:
import ipaddress def is_target_ip(ip_str): try: ip = ipaddress.IPv4Address(ip_str) return (ip in ipaddress.IPv4Network('172.16.0.0/12') or ip in ipaddress.IPv4Network('192.168.0.0/16') or ip in ipaddress.IPv4Network('240.0.0.0/4')) except ValueError: return False
- 收集所有符合删除条件的行的主键,批量执行DELETE操作
注意事项
- 删除操作前务必备份全表数据,避免误删
- 大批量删除建议控制每秒删除速率不超过1000条,避免影响集群正常业务
- 后续如果有频繁的IP段过滤需求,建议新增预存的整数类型IP字段,过滤效率远高于text类型的动态转换
内容的提问来源于stack exchange,提问作者Bhagyashree Thorat
相关产品推荐
相关产品推荐

