什么会工作更快,一个带有地理数据的大型ZSET,我将使用GEORADIUS查询半径100m

要么

很多ZSET,每个ZSET负责覆盖整个世界的100m X 100m正方形?并以此100m正方形命名,例如:

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过多,访问它们时会影响性能吗?

最佳答案

只能通过基准测试来对这种方法进行精确比较,并且特定于您的数据集和配置。但是从结构上来讲,您的优缺点是:

  • BIG ZSET :执行更少的带宽和更少的操作(CPU周期),边界没有问题(可能有很多ZSET重复),可以通过分片获得吞吐量;
  • 很多ZSETS :其他操作的等待时间更少(当ZSET大时,其他命令正在等待),可以通过分片获得吞吐量,而通过集群可以得到等待时间。

  • 至于底线问题,我没有看到实现代码,但是集合名称应该与您使用的任何其他键相同。这是Redis FAQ关于密钥数量的说明:



    更新:

    查看Redis文档对GEORADIUS的评价:



    这意味着查询之外的项目会对查询产生O(log(M))影响。因此,1000万个项目的17个跃点或1b项目的21个跃点是相当实惠的。剩下的问题是您将在节点之间进行分区吗?

    关于data-structures - 具有一个ZSET的Redis GEORADIUS与大量特定大小的ZSET,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50374815/

    10-12 14:24