【问题标题】:Key-Value Store For IP RangesIP 范围的键值存储
【发布时间】:2021-09-17 02:34:08
【问题描述】:

我有一个看起来像这样的大型数据集:

这些列是:IP 开始、IP 结束、位置。 它本质上是指开始和结束ip之间的所有IP。

希望将其存储在键值存储 (Cloudflare Workers KV) 中,但没有查询功能。我只能做一个get(key)

有没有一种方法可以构建这些数据(每个 ip 没有一行),我可以轻松地为任何给定的 ip 获取正确的行?

【问题讨论】:

    标签: javascript cloudflare key-value-store cloudflare-workers


    【解决方案1】:

    一些想法:

    • The list() methodlimit: 1 将返回列表范围中的第一项,这可以更容易“扫描”表格。 list() 只返回键,不返回值,但它也返回元数据;如果您的值适合元数据,您可以在那里输入,list() 将返回它。不幸的是,list() 不允许您指定范围,只能指定前缀,因此制定查询可能有点棘手。此外,list() 操作在计费和性能方面都比 get() 更昂贵。

    • 另一种可能的设计可能是按子网对数据进行批处理,例如为每个/24 存储一个键,其中值包含/24 下的所有范围(我以/24 为例,但根据数据集,更大的大小可能更有意义)。然后,您只需查找特定 IP 地址,查找其周围的子网。作为额外的优化,如果经常看到比单个/24 大得多的 IP 范围,例如,您可以将它们存储为 /16s,然后在每次查找时都需要检查 @ 987654334@ 和 /16 键。或者,也许没有足够的“大”范围,您可以将它们直接嵌入到您的 Worker 脚本中,而无需进行查找。作为一个额外的好处,如果您正在查找客户端的 IP,这种方法可能会更好地利用缓存。同一个子网中的客户端往往位于同一个位置并访问同一个 Cloudflare colo,因此如果它们都映射到您的 KV 命名空间中的同一个键,那么数据在该 colo 的缓存中往往是温暖的。

    【讨论】:

    • 肯顿的回答很好,感谢您的帮助。创造性地解决问题。我想我会在某种程度上按子网划分。我需要查看范围并确定最佳方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 2014-03-20
    • 1970-01-01
    • 2018-05-05
    • 2018-01-04
    • 2018-09-27
    相关资源
    最近更新 更多