XDB 二分段索引 结束IP 字段的缩减优化
Author: gongzhengyangCreated Oct 13, 2025Updated Jul 5, 2026
Labelsenhancement
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 段连续性
Source: lionsoul2014/ip2region