Geo*_*scu 5 javascript c# ip mongodb
我正在开发一个 IP 身份验证服务,并且正在寻找一种在 mongoDB 中存储 ip 范围的正确方法,以便稍后检查 ip 是否在某个范围内。基本上我有3个想法:
{from;to},然后创建一个js函数来执行ip检查,然后在find中使用它;是否还有其他解决方案比我提到的解决方案性能更高?
因为这个问题还没有完整的答案,所以我决定在这里发布。
\n将范围的起始和结束 IP 地址存储为整数,并在查询时使用$lte和$gteMongoDB 运算符来查找匹配项。此外,在start和end字段上创建索引,这样即使需要搜索大量文档,性能也很好。
让我们用一个以 开头2.0.0.0和结尾的IP 范围来执行一个示例8.255.255.255。将测试两个 IP 地址: a)\xc2\xa0 4.5.6.7、 b) 60.70.80.90:
您需要将所有 IP 转换为整数。
\n2.0.0.0=335544328.255.255.255=1509949434.5.6.7=6743808760.70.80.90=1011241050为了将 IP 范围存储在数据库中,您可以创建一个 MongoDB 文档,如本段下面的文档。如果您只想登记一个 IP,则start和end字段都需要具有相同的值。
{ "start": 33554432, "end": 150994943 }\nRun Code Online (Sandbox Code Playgroud)\n$lte然后使用和运算符执行查找查询$gte ,这将获取要测试的 IP 的整数值。
// this will result in one match because 67438087 = 4.5.6.7\ndb.collection.find({\n start: { $lte: 67438087 },\n end: { $gte: 67438087 },\n})\nRun Code Online (Sandbox Code Playgroud)\n// this will end up with no result because 1011241050 = 60.70.80.90\ndb.collection.find({\n start: { $lte: 1011241050 },\n end: { $gte: 1011241050 },\n})\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1853 次 |
| 最近记录: |