[geohash] 一些问题

  1. Geohash sharding请问是具体怎么实现的呀?
    我理解是可以 mod, 可以range比如说首字母类似([a]ccccc). 如过mod感觉查的时候不方便, 如果Range可能容易出现热点问题. 不知道还要什么其他的好方法?

  2. 上课我记得有提到用s2搜索可以选搜索框的大小,我理解是如果应用最小的geohash是6位(比如 [a]ccccc), 我理解是搜索框的大小应该最多是6位(可以是6位,5位,4位,3位,2位,1位), 不能再小了.

  3. 地理位置sharding 怎么防止出现热点问题?比如new york city,或者san francisco这种比较密的?

  4. 请问Tinder这个geohash怎么生成的, 我感觉大小都不太一样呀


    我理解这就是手工划分 比如有大致50个不规则图形, 就标注1 - 50. 尽量让编号相近的在一起?

  5. 我想问一下 关于uer geohash的redis sorted set? 我理解就是

  1. ZADD accccc(geohash) driver1 2019-05-21 02:02:30.435371
  2. ZADD accccc(geohash) driver2 2019-05-21 02:02:31.435371
  3. ZADD accccc(geohash) driver3 2019-05-21 02:02:32.435371
  4. ZADD accccc(geohash) driver3 2019-05-21 02:02:33.435371
  • 如果找30s内找有效的driverIds 就用 ZRANGEBYSCORE accccc(geohash) time.now -30s, time.now. 这个应该是o(log(n)) + o(m)的时间复杂度,n是全部记录的条数, m是最近30s内的条数
  • 如果需要删除 ZREMRANGEBYSCORE geohash 0, time.now - 30s. 这个应该是o(log(n)) + o(m)的时间复杂度,n是全部记录的条数, m是超过30s外的条数

问题有点碎 谢谢

  1. Geohash sharding 我的理解是手动分配的,Tinder 的文章里有特别之处他们跑了一些 analysis,找到哪些 geohash 放在一起比较好。不使用算法来分,而是手动分。
  2. 是的。如果需要更细的定位,那么需要更多位 geohash.
  3. 同4
  4. 不需要一样大小,人多的地方 geohash 面积小.
  1. 就是这个意思,完全对。