如何查找附近的人?

如何查找附近的人?

夜深人静的时候,小明寂寞难耐,拿起手机,熟练地点开了微信,找到了发现-附近的人,点击进入,3秒钟过后,微信为他找出了附近的300个妹子,然后小明又熟练地点击了打招呼、添加好友,于是这一夜就这样过去了…

那么问题就来了,微信是如何做到3秒种就把附近的妹子找出来并推送给小明的呢?也许你的答案是这样的,微信掌握了很多妹子的位置坐标,当小明要寻找附近的妹子时,将小明的位置坐标与这些妹子的坐标一一比较,如果二者的距离在1km之内,那么就算命中了一个妹子。这样做当然是可行的,但是我告诉你微信目前已经有8亿用户了,如果你要一个个地和这8亿用户做比较,那估计不知道要哪个猴年马月才能完整的比较一次。

面对大量用户的位置匹配,我们必然要考虑效率的问题。结合一下我们的生活经验,如果警察叔叔要查小明附近的人,那么他的流程是先确定小明在北京市昌平区回龙观DS小区,然后在整个全球数据库里面先找到中国、然后顺着北京市、昌平区、回龙观、DS小区这个逐渐缩小的尺度,将这个小区里所有人的档案都调出来,筛选出其中女性朋友,再推送给小明。这里其实就是运用了逐级f分层分区的方法,对每一个坐标打上一个可以逐级查找的地址标签,这就是GeoHash。

因为地球上的每一个点,并不一定都有一个传统意义的地理名字,而计算机系统在处理坐标时要面对全球坐标系上的每一个点。因此在生产GeoHash时,我们要做的第一件事情,就是拿出世界地图,对全球坐标进行逐级分层分区。分区的方法很简单,就是对一个区域对半分,然后再分别标记为0和1,分出来的那一小块,它的GeoHash值就是它父亲的GeoHash加上新的标记0或者1,同时也表示它的层次再低了一层。

如何查找附近的人?

按照这种对半切蛋糕的方式分区,你会发现,切的次数越多,每个小区的GeoHash就会越长,同时这个小区的范围就会越小。那么当这个小区的大小正好满足我们查找附近的人的距离时,那么小区的划分就没有必要再对半切隔了。这时,只要在这个小区里的人,他们的GeoHash都相同。

当我们再次要寻找附近的人时,只要搜索GeoHash相同的人即可。如果要放大一些范围,那么只需要匹配GeoHash前缀相同的即可。就像下图,每个小区GeoHash都不一样,但是它们都属于9q8这个较大的区域内。

所以说,小明能在3s内找到附近的妹子,全靠GeoHash了。

来源:给产品经理讲技术,本文观点不代表自营销立场,网址:https://www.zyxiao.com/p/102928

发表评论

电子邮件地址不会被公开。 必填项已用*标注

技术服务
技术服务
关注抖音
关注抖音
侵权联系
返回顶部