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

Architecture 基于位置的社交网络细分,architecture,geolocation,social-networking,feed,Architecture,Geolocation,Social Networking,Feed,我正在构建一个基于位置的社交网络应用程序(移动应用程序前端,Django/Python后端),关注点非常狭窄(不尝试重新创建FB)。我正在使用GooglePlacesAPI进行位置搜索。一旦用户通过GooglePlaces找到一个位置,我允许他们对该位置执行操作,然后保存到我们的服务器上 到目前为止,我已经成功地实现了搜索、用户操作和位置存储。我还实现了一个新闻提要。我希望新闻提要中包含与用户地理位置相近的故事/动作,注意用户的位置可以随着应用程序的每次使用而改变(但可能会留在同一个城市)。我正

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

到目前为止,我已经成功地实现了搜索、用户操作和位置存储。我还实现了一个新闻提要。我希望新闻提要中包含与用户地理位置相近的故事/动作,注意用户的位置可以随着应用程序的每次使用而改变(但可能会留在同一个城市)。我正在寻求帮助,根据位置动态划分我的社交网络。以下是我到目前为止的想法:

  • 这样做的一个明显但非常昂贵的方法是,根据用户的当前位置对全局新闻提要中的所有新闻进行排序,然后从顶部删除最近的新闻

  • 或者创建区域并在区域增长时分割区域(更多操作、用户、活动位置)如何。然后,当用户轮询新闻提要时,他们会得到他们最接近的地区的提要。区域的拆分可以通过cron作业在计划的基础上进行,并且只有在某个区域足够活跃以便分离时才会发生。如果每次分割区域时都必须更改每个动作/位置/故事的区域引用,那么分割也可能会很昂贵

  • 数字1的一个附带功能是根据用户的当前坐标对相关位置进行排序,然后缓存订单。这样,下一次用户在与这些坐标保持合理距离的情况下想要生成提要时,成本要低得多

  • 保持简单:只需定义硬区域,并允许用户选择和更改该区域。例如,允许用户选择伊利诺伊州芝加哥作为一个区域,并且只查看该区域内的操作/故事。我在这里担心的是,他们会错过他们所在地区以外的相关报道(例如,加里)


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

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

  • 使用此功能,您可以在用户每次登录或使用您的应用程序时找到您的用户所在地。您可以获取他所在的地区或城市,然后您可以为他提供属于同一地区或城市的源,您需要为每个源在数据库中保存城市
  • 每次在数据库中插入新的新闻提要时,都使用反向地理编码并保存位置。您可以按位置对这些新闻提要进行分组,并使用时间按升序排序,然后获取
  • 所以在这个场景中,保存地区或城市,然后向用户检查当前城市是一个很好的方法

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

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

  • 他们优化了最近的表格布局,并将较旧的数据归档出来
  • 他们不使用集中式数据库,至于全局查询,他们使用memcache(在您的情况下,您还可以缓存最新的源,并删除超过24小时的源)
  • 他们不使用sql连接
  • 为了进一步了解,您可以使用这些来源

    一,

    二,


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

    感谢您抽出时间回答我的问题。在我的问题中,你的答案似乎最接近1。不过,我一直在寻找一种方法,使这一过程成本更低。每次用户请求提要时进行排序似乎都会变得缓慢,因为用户和提要中的数据都在增加。您好,我已经链接了一些来源,希望它能帮助您