indexing - 使用 Redis 和 Sinatra 为 Facebook 应用程序建立地理空间索引

标签 indexing geolocation geospatial redis sunspot

我正在重建 Lovers on Facebook使用 Sinatra 和 Redis,我想要:

  • 设置操作以管理用户之间的请求和关系
  • 地理空间索引以显示附近的应用用户

当前的 Redis 实现

每个用户有两个存储 uid 的 Redis 有序集(reqSent & reqRecv)。我们对请求进行排序的 SCORE 是发出请求的 time(UNIX 时间戳)。我使用有序集而不是列表,因为用户可能只会将请求类型 (rid) 编码为数字并添加到 uid 前面。 (rid|uid) 例如,对于 uid=100 的用户,我们可能有:

100:reqSent => ["1|123", "2|123", "2|134"]  # format: ["rid|tid"]
100:reqRecv => ["3|343", "5|142", "4|2224"] # format: ["rid|uid"]

MongoDB supports geospatial indexing native ,所以我正在考虑切换到那个。

否则,我应该如何使用 Redis 实现地理空间索引?我应该用 Sunspot 来做吗? (本地解决方案)?显然,你可以使用 Sunspot with Redis .

最佳答案

我喜欢避免使用多个平台,并使用 redis 实现了类似的东西。地理空间索引与在 Redis 中索引任何其他内容并没有什么不同。您只需要一个函数将纬度/经度转换为覆盖适当区域的单个数字,然后使用数字作为包含该区域中所有用户的集合的键。如果您选择了正确的区域,检索该集合以及可能的它的一些邻居应该会让您获得适当数量的用户来运行实际距离计算以进行最终过滤/排序。

地理空间查询的一般情况很难实现,但您不需要它,而且 Redis 无论如何都不是临时查询的错误平台。

关于indexing - 使用 Redis 和 Sinatra 为 Facebook 应用程序建立地理空间索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4637031/

相关文章:

mongodb - 使用 Solr 索引嵌入式 mongoDB 文档(在数组中)

安卓适配器 "java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4"

r - 获取 R 向量中的所有最大值索引

javascript - NodeJS 通过纬度/经度查找国家/地区

python - 高效(空间)网络邻居?

indexing - Postgres : How to create index concurrently using liquibase

javascript - PHP - RSS - 地理定位

java - Fragment webView无法检测到Google map (您的位置)

android - 没有 WiFi 和移动网络的 phonegap 地理定位

r - 尝试安装 rgeos R 时找不到 -lgeos