什么会更快,一个带有地理数据的大型ZSET,我将用GEORADIUS查询100米半径
OR
很多ZSET,其中每个ZSET负责覆盖全世界的100米X 100平方米?并以这个100米的方块命名,如:
left_corner1_49_2440000_28_5010000
left_corner2_49_2450000_28_5010000
.......
并且在集合中的右侧和底部都有100米。 因此,当搜索最近的点时,我只会省略gps中的冗余数字,如:49.2440408,28.5011694将成为 49.2440000,28.5010000所以这样我就会知道ZSETS的名字,只需要100米精度即可获得所有精确值。
或以一般形式对其进行质疑:如何在redis中存储和访问ZSET的名称?如果我有太多的ZSETS会影响访问它们的性能吗?
答案 0 :(得分:1)
这种方法的精确比较只能通过基准测试来完成,它将特定于您的数据集和配置。但从架构上讲,你的利弊是:
至于底线问题,我没有看到实现代码,但是设置名称应该与您使用的任何其他密钥相同。这是Redis FAQ关于密钥数量的说法:
单个Redis实例可容纳的最大密钥数是多少? < ...> 强>
Redis最多可以处理2 ^ 32个密钥,并且在实践中经过测试可以处理 每个实例至少有2.5亿个密钥。
<强>更新强>
看看Redis博士对GEORADIUS的评价:
时间复杂度:O(N + log(M))其中N是内部元素的数量 圆形区域的边界框由中心和半径分隔 M是索引中的项目数。
这意味着查询之外的项目会对查询产生O(log(M))影响。因此,对于10米物品来说是17跳,对于1b物品是21跳,这是相当实惠的。剩下的问题是你会在节点之间进行分区吗?