我有一个将 Ip 范围链接到另一个表中的位置 ID 的数据库。它是如此之大,我们正在尝试使用 aerospike 制作一个新的解决方案。
我们想出的解决方案是使用间隔。像这样的东西:
键:1000000(IP 地址的 int64) Bin1:默认值:1(给定块开始的位置 ID)
Bin2: 1234567:2 (位置 ID 更改的块中的第一个 ip):(locationID)
Bin3: 1345678:3 (block 中的第二个 ip 位置 id 发生变化):(locationID)
ETC
使用这种方法,我们可以在数学上从 ip 获取位置 id,同时仍然减少行的数量和服务器处理时间的数量。
我想对我的想法做一些测试,但我在转换我们当前的系统时遇到了问题。
我们有一个数据库,其范围(例如 0-160000)具有关联的位置 ID。
范围表有 9,297,631 行。
我制作的一个 c# 脚本执行这个 sql:
SELECT * FROM dbo.GeoIPRanges
where (startIpNum BETWEEN 300000000 AND 300000100)
OR (endIpNum BETWEEN 300000000 AND 300000100)
OR (startIpNum <= 300000000 AND endIpNum >= 300000100)
每次通话大约需要 4 秒。上面的数字是示例数字。您可以看到它们以 100 个为单位。最大 ip 数量为 4,294,967,295。以 100 个块为单位执行此操作,我得到了 42,949,672 个调用,每个调用大约 4 秒。这需要很长时间。将信息格式化为我想要的 aerospike 样式所需的处理时间可以忽略不计。
了解所有这些信息后,是否有任何关于如何加快速度的想法。