我正在建设一个ips 4/ips 6 geo ip MongoDB数据库,我将拥有数百万ips (100+)。
数据库的结构将是
[
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , ip: '34.53.63.25', ip_hex: '0x22353f19' , type: "ipv4", data : [
{
country : "CA",
region : "region1"
city : "city1",
blacklisted : "no"
on_date : ISODate("2022-05-05T00:00:00Z")
},
{
country : "CA",
region : "region1"
city : "city1",
blacklisted : "yes"
on_date : ISODate("2022-06-05T00:00:00Z")
},
{
country : "US",
region : "region2"
city : "city2",
blacklisted : "no"
on_date : ISODate("2022-05-05T00:00:00Z")
},
...
]},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , ip: '1.2.3.4', ip_hex: '0x1020304', type: "ipv4", data : [
{
country : "CA",
region : "region1"
city : "city1",
blacklisted : "no"
on_date : ISODate("2022-06-05T00:00:00Z")
},
]},
{ _id: 58fdbf5c0ef8a50b4cdd9a8e , ip: '2345:0425:2CA1:0000:0000:0567:5673:23b5', ip_hex: '0x234504252ca1000000000567567323b5', type: "ipv6", data : [
{
country : "FR",
region : "region1"
city : "city1",
blacklisted : "no"
on_date : ISODate("2022-06-05T00:00:00Z")
},
{
country : "FR",
region : "region1"
city : "city1",
blacklisted : "yes"
on_date : ISODate("2022-07-05T00:00:00Z")
},
...
]},
] 我正在将所有IP字符串数据转换为HEX:
1.1.1.1 -> 0x1010101
1.2.3.4 -> 0x1020304
34.53.63.25 -> 0x22353f19
255.255.255.255 -> 0xffffffff
0001:0001:0001:0001:0001:0001:0001:0001 -> 0x10001000100010001000100010001
1111:1111:1111:1111:1111:1111:1111:1111 -> 0x11111111111111111111111111111111
2345:0425:2CA1:0000:0000:0567:5673:23b5 -> 0x234504252ca1000000000567567323b5
2345:0425:2CA1::0567:5673:23b5 -> 0x234504252ca1000000000567567323b5
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff -> 0xffffffffffffffffffffffffffffffff会有大量的IP搜索,每天都会为每个IP添加/删除/更新新的数据。
我将搜索范围的ips,排序,更新,删除。
在"ip_hex“列上推荐什么索引?我在想在HEX上搜索B树而不是STR。
我想要一个高效的数据库。我还应该考虑哪些其他优化?
谢谢。
发布于 2022-07-09 09:30:29
您应该用前导"0“填充十六进制字符串,否则排序和范围将无法正常工作。
注意IPv6地址的不同格式。以下地址都是同一IP的有效表示形式
2345:0425:2CA1:0000:0000:0567:5673:23b5 2345:0425:2CA1:0567:5673:23b5 2345:0425:2ca1:0:0:0567:5673:23b5 2345:0425:2CA1:0000:0000:567:5673:23b5
确保格式一致,否则查询将很困难。
当你谈到IP范围时,你指的是典型的IP子网。为了计算子网,您需要像and or not xor这样的布尔函数。它们在MongoDB聚合框架中不可用(请参阅https://jira.mongodb.org/browse/SERVER-55386?filter=-2),您需要在外部处理它们。
https://stackoverflow.com/questions/72914790
复制相似问题