azure-cosmosdb - CosmosDB 存储 IP 地址范围并按 IP 搜索
问题描述
我正在调查在 cosmosDB 中存储 IP 范围,例如,我有数百万个条目,包括 65.55.243.0 到 65.55.243.255 之类的范围,这些范围与其他无关紧要的数据相关联。任何人都可以建议如何将其存储在 cosmos 中,假设我将在 100% 的时间内通过 IP 地址进行搜索以到达它所属的范围?在 SQL 中我已经这样做了,但我想知道这是否可以在 CosmosDB 中有效地完成。谢谢!#cosmosdb
解决方案
在不看数据的情况下,我认为您应该能够利用 Cosmos 从多个方面获得有效的查询。值得一读Cosmos 如何进行索引,其中包括 IP 地址等字符串的自动范围索引。这意味着您可以使用包括 STARTSWITH 或 CONTAINS 在内的本机字符串函数有效地查询这些值。
除了查询本身之外,您如何构建数据也会影响性能。最重要的是选择一个分区键来分割数据。在您的情况下,使用 IP 地址作为分区键的基础听起来是一个不错的选择,假设您将知道哪个 IP 以及因此要提前查询哪个分区。经验法则是设计数据,使您永远不会有跨分区查询。
除此之外,您可以在要查询的其他属性中添加地址数据的变体,例如 {subnet: 65.55.243.0/24}。在这种情况下,了解子网可以让您通过精确匹配有效地查询所有记录,这通常似乎是最有效的查询类型。
一般来说,我发现:
- 最简单的查询性能最好,更复杂意味着更高的成本
- 设计数据形状以方便简单查询
- 选择从查询时可用信息派生的分区键始终以单个分区为目标
推荐阅读
- android - 如何为测试人员正确构建 apk?
- pyspark - 如何检查数据是否缓存在数据框中或由于 Pyspark 中的延迟执行而尚未缓存?
- amazon-web-services - 使用层进行本地 AWS Lambda 调试
- php - 创建 PostFinance 付款请求
- botframework - Composer 机器人的开发生命周期
- javascript - 将二进制值分配给 dom.value
- xamarin.forms - 如何从我的应用程序(Xamarin.Forms)打开另一个应用程序
- python - 为什么在某些 python 模块上使用 `import as` 而在其他模块上不使用?
- pandas - Python Pandas:从注释之间获取列名
- maven - 无法使用maven下载prime faces jar