【问题标题】:Location-Based Segmentation of a Social Network基于位置的社交网络分割
【发布时间】:2015-04-15 20:04:46
【问题描述】:

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

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

  1. 显而易见但非常昂贵的方法是根据用户的当前位置对全球新闻提要中的所有故事进行排序,然后从顶部删除最近的故事。

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

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

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

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

【问题讨论】:

    标签: architecture geolocation social-networking feed


    【解决方案1】:

    您的应用正在检查用户位置并获取与其当前位置相关的供稿。这是我提出的解决方案

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

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

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

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

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

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

    1.How to optimize queries

    2.Facebook architecture video by Aditya Agarwal

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

    【讨论】:

    • 感谢您抽出宝贵时间回答我的问题。在我的问题中,您的答案似乎最接近方法#1。我一直在寻找一种方法来降低这个过程的成本。每次用户请求提要时进行排序似乎会随着用户和提要中数据的增加而开始变慢。
    • 您好,我已按要求链接了更多资源,希望对您有所帮助
    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2014-03-24
    相关资源
    最近更新 更多