#387·ip2region

XDB 二分段索引 结束IP 字段的缩减优化

Author: gongzhengyangCreated Oct 13, 2025Updated Jul 5, 2026
Labelsenhancement
Image

xdb 数据中二分索引段,如果不存储写入 结束IP 的信息,可以一定程度缩减 xdb 文件大小

IP 版本 原始 xdb 缩减后 压缩比
IPv4 11 MB 8.2 MB 74.5%
Ipv6 290 MB 169 MB 58%

实现依据

二分索引段的目的是实现 IP 范围判断,判断某个 IP 是否处于某个 IP 范围内,同时获取到该范围对应的 region 所以当 IP 段是有序的,并且结束IP 与下一 IP 段的开始IP 具备连续性,就可以只依据开始 IP 来判断查询的 IP 属于哪个 IP 范围段

实现压缩的前提

保证在 ipv4_source.txt 以及 ipv6_source.txt 中, IP 段都是有序递增的

  • 保证 ip_source.txt 中每一行的结束 IP 地址,转换为 uint32 或者 uint128 之后,数字加 1,就是下一行 IP 段的开始IP 当前测试发现,两个 IP 版本都是符合这个要求的,后续 ip_source.txt 在新增编辑的时候也要保证这个
192.168.2.1|192.168.2.20|0|0|内网IP|办公室A
192.168.2.21|192.168.2.30|0|0|内网IP|办公室A
192.168.2.31|192.168.2.60|0|0|内网IP|办公室B

2001:2::|2001:2:0:ffff:ffff:ffff:ffff:ffff|美国|加利福尼亚州|洛杉矶|专线用户
2001:2:1::|2001:2:ffff:ffff:ffff:ffff:ffff:ffff|瑞士|弗里堡州||专线用户
2001:3::|2001:3:ffff:ffff:ffff:ffff:ffff:ffff|美国|加利福尼亚州|洛杉矶|专线用户
2001:4::|2001:4:111:ffff:ffff:ffff:ffff:ffff|瑞士|弗里堡州||专线用户
  • 如果不能保证 ip_source.txt 的 结束IP 与下一段 IP 范围的连续性,则需要在生成 xdb 文件的时候,把该段空白未标明 region 的 IP 段配置为一个默认值,以此来实现在 xdb 中的 IP 段连续性