社交网络的基于位置的细分

Location-Based Segmentation of a Social Network

我正在构建一个基于位置的社交网络应用程序(移动应用程序前端,Django/Python 后端),重点非常狭窄(不试图重新创建 FB)。我正在使用 Google Places API 进行位置搜索。一旦用户通过 Google Places 找到位置,我允许他们对该位置执行操作,然后保存到我们的服务器。

到目前为止,我已经成功地实现了搜索、用户操作和位置存储。我还实施了新闻提要。我希望该新闻提要用地理上最接近用户的 stories/actions 填充,并指出用户的位置可以随着每次使用该应用程序而改变(但可能会留在同一个城市)。我正在寻求帮助,根据位置对我的社交网络进行动态细分。到目前为止,这是我的想法 of/come:

  1. 执行此操作的明显但非常昂贵的方法是根据用户的当前位置对全球新闻提要中的所有故事进行排序,然后将最近的故事从顶部移开。

  2. 或者随着区域的增长(更多操作、用户、活跃位置)创建区域并拆分区域如何?然后,当用户轮询新闻提要时,他们将获得离他们最近的地区的提要。区域的拆分可能会通过 cron 作业按计划发生,并且只有在区域足够活跃以至于可以分离时才会发生。如果每次拆分区域时我们都必须更改每个 action/location/story 的区域引用,则拆分也可能很昂贵。

  3. 1 号的衍生产品将根据用户的当前坐标对相关位置进行排序,然后缓存订单。这样,下一次在这些相同坐标的合理距离内的用户想要生成提要时,其过程的成本要低得多。

  4. 保持简单:只需定义硬区域并允许用户 select 并更改该区域。因此,例如允许用户将 Select 伊利诺伊州芝加哥作为一个区域,并且只能在该区域内看到 actions/stories。我担心的是他们会错过他们所在地区以外的相关报道(即印第安纳州加里)

Secret 或 Whisper 甚至 Facebook 等应用程序如何解决这个问题?对于那些有构建位置感知社交应用程序经验的人,您采用了哪些方法?请随时 link 所有相关或有用的答案。

好吧,您的应用程序正在检查用户位置并获取与其当前位置相关的提要。这是我提出的解决方案

  1. Reverse geocoding 使用这个你可以在他每次登录或使用你的应用程序时找到你的用户所在地你可以获取他所在的地区或城市然后你可以向他提供属于同一地区或您需要在数据库中为每个 Feed 保存城市。
  2. 每次在您的数据库中插入新的新闻提要时,您都使用反向地理编码并保存位置。您可以按位置对这些新闻提要进行分组,并使用时间按升序对它们进行排序,然后获取。

因此在这种情况下,保存位置或城市然后将其检查给用户当前城市是一个很好的方法。

对于当地以外的相关新闻,您可以通过在趋势页面(如果是移动设备)上给他们提供趋势信息来告诉他们趋势信息,或者您可以使用 ajax 并嵌入一个趋势信息页面(适用于台式机和笔记本电脑)您可以为此目的使用内存缓存,因为趋势提要将被频繁访问,因此缓存它们会很好。

至于 facebook 如何解决这个优化问题,他们做的事情很少

  1. 他们在那里优化 table 新近度布局并将旧数据归档。
  2. 他们不使用集中式数据库,至于全局查询,他们使用内存缓存。(在您的情况下,您还可以缓存最新的提要并删除超过 24 小时的提要)
  3. 他们不使用 sql 连接。

要进一步了解,您可以使用这些资源

1.How to optimize queries

2.Facebook architecture video by Aditya Agarwal

扩展 Sql 有其局限性,但所有大公司都试图通过架构(例如 master slave architecure)和缓存来克服这些限制,他们识别数据的性质,然后使用有效的架构和缓存解决可扩展性问题的方案。