首页 > 解决方案 > CosmosDB 存储 IP 地址范围并按 IP 搜索

问题描述

我正在调查在 cosmosDB 中存储 IP 范围,例如,我有数百万个条目,包括 65.55.243.0 到 65.55.243.255 之类的范围,这些范围与其他无关紧要的数据相关联。任何人都可以建议如何将其存储在 cosmos 中,假设我将在 100% 的时间内通过 IP 地址进行搜索以到达它所属的范围?在 SQL 中我已经这样做了,但我想知道这是否可以在 CosmosDB 中有效地完成。谢谢!#cosmosdb

标签: azure-cosmosdb

解决方案


在不看数据的情况下,我认为您应该能够利用 Cosmos 从多个方面获得有效的查询。值得一读Cosmos 如何进行索引,其中包括 IP 地址等字符串的自动范围索引。这意味着您可以使用包括 STARTSWITH 或 CONTAINS 在内的本机字符串函数有效地查询这些值。

除了查询本身之外,您如何构建数据也会影响性能。最重要的是选择一个分区键来分割数据。在您的情况下,使用 IP 地址作为分区键的基础听起来是一个不错的选择,假设您将知道哪个 IP 以及因此要提前查询哪个分区。经验法则是设计数据,使您永远不会有跨分区查询。

除此之外,您可以在要查询的其他属性中添加地址数据的变体,例如 {subnet: 65.55.243.0/24}。在这种情况下,了解子网可以让您通过精确匹配有效地查询所有记录,这通常似乎是最有效的查询类型。

一般来说,我发现:

  • 最简单的查询性能最好,更复杂意味着更高的成本
  • 设计数据形状以方便简单查询
  • 选择从查询时可用信息派生的分区键始终以单个分区为目标

推荐阅读