基于位置的社交网络分割

时间:2015-02-15 02:00:56

标签: architecture geolocation social-networking news-feed

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

到目前为止,我已成功实施了搜索,用户操作和位置存储。我还实施了新闻Feed。我希望新闻源可以填充地理上与用户接近的故事/动作,并注意到每次使用应用程序时用户的位置都可以改变(但可能会保持在同一个城市内)。我正在寻找帮助根据位置动态分割我的社交网络。这是我到目前为止所想到/遇到的:

  1. 这样做的显而易见但非常昂贵的方法是根据用户的当前位置对全球新闻Feed中的所有故事进行排序,然后将最近的故事排在最前面。

    < / LI>
  2. 或者如何创建区域并在区域增长时拆分区域(更多操作,用户,活动位置)。然后,当用户轮询新闻源时,他们获得他们最接近的区域的馈送。区域的分裂可能是通过cron作业按计划进行的,只有在区域活跃到足以分离时才会发生。如果我们必须在每次分割区域时更改每个操作/位置/故事的区域参考,拆分也可能很昂贵。

  3. 数字1的分拆将基于用户的当前坐标对相关位置进行排序,但随后缓存该顺序。这样,下一次在相同坐标的合理距离内的用户想要生成饲料时,这是一个便宜得多的过程。

  4. 保持简单:只需定义硬区域并允许用户选择和更改该区域。因此,例如,允许用户选择芝加哥,IL作为区域,并且仅查看该区域内的操作/故事。我担心的是他们会错过他们所在地区以外的相关故事(即加里,IN)

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

1 个答案:

答案 0 :(得分:3)

您的应用正在检查用户位置并获取与其当前位置相关的Feed。这是一个提议的解决方案

  1. Reverse geocoding使用此功能,您可以在每次登录或使用您的应用时找到您的用户所在地,您可以获取他所在的地区或城市,然后您可以向他提供属于同一地区或城市的供稿需要在每个Feed的数据库中保存城市。
  2. 每次在数据库中插入新的新闻Feed时,您都会使用反向地理编码并保存位置。您可以按位置对这些新闻Feed进行分组,然后使用时间按升序对它们进行排序,然后获取。
  3. 因此,在这种情况下,保存地点或城市,然后将其检查给用户当前城市是一个很好的方法。

    对于本地以外的相关新闻,您可以通过在趋势页面(如果是移动设备)上提供趋势Feed来告诉他们趋势Feed,或者您可以使用ajax并嵌入热门小页面(对于台式机和笔记本电脑),您可以使用memcache进行此操作目的,因为趋势访问将经常访问,因此缓存他们将是好的。

    至于facebook如何解决这个优化问题,他们很少喜欢

    1. 他们针对新近度优化表格布局并将旧数据存档。
    2. 他们不使用集中式数据库,而对于全局查询,他们使用memcache。(在您的情况下,您也可以缓存最新的Feed并删除超过24小时的Feed)
    3. 他们不使用sql连接。
    4. 为了进一步了解,您可以使用这些来源

      1。How to optimize queries

      2. Facebook architecture video by Aditya Agarwal

      Scaling Sql有其局限性,但所有大公司都试图通过架构来超过这些限制(例如master slave architecure)并缓存它们识别其数据的性质,然后使用有效的架构和缓存方案来解决scalabiltiy。 / p>