【问题标题】:Find 20 latest tweets from million people you are following on twitter查找您在 Twitter 上关注的数百万人的 20 条最新推文
【发布时间】:2012-07-12 09:52:49
【问题描述】:

问题是通过您将在您的网络应用程序中执行的各种操作的整个设计方法,以便如果您在 twitter 上关注数百万人,并且当您检查最新的 20 条推文时,您可以在最短的时间内找到它并投入资源负载最小。这是一个关于整个堆栈的开放式设计问题。

我的答案不完整(因为我无法完全回答这个问题)

  1. 既然我们谈论的是数百万用户,那么我们必须根据用户的地理位置对数据库进行分片,这个答案不被接受,因为在 twitter 中你真的不关注同一位置的人。 有什么更好的方法可以实现这一目标?

  2. 由于大多数情况下 20 条最新推文是最重要的,因此每个用户维护一个缓存(链表),其中包含根据它们到达时间的最新推文。 这也不被接受。

总的来说,我在这类设计问题上比较薄弱,想知道你会如何解决它们?

【问题讨论】:

  • 只是让你知道。我认为缓存是实现这一目标的最佳方式之一。由于您已经关注了数百万人,因此为单个用户缓存而保存的额外数据是微不足道的。而且缓存速度更快,因为当有人发推文时,一条推文必须在每个人的缓存中仅容纳一次,而不是每次您请求最新的 20 条推文时。

标签: algorithm scalability bigdata


【解决方案1】:

Twitter 已经发展了几年,我相信它是设计最复杂的数据系统之一。在这样一个复杂的系统中,可能已经针对不同类型的用户进行了许多优化(取决于他们的推文频率、关注者数量和关注者数量)。

关注数百万人的用户无疑是一种很特殊的人,可能不会太多。我认为对于这些用户来说,一个明智的设计是在您的关注者每次发布推文时更新缓存中的时间线数据,并将非常旧的数据存档。因此,每次您请求时间线时,它都会立即返回缓存。

以上只是使系统为您工作的最简单直接的方法。实际上,设计中要考虑更多的衡量标准,比如有多少用户关注了数百万人,这些用户的刷新频率等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2013-11-15
    • 1970-01-01
    • 2021-11-04
    • 2014-06-11
    相关资源
    最近更新 更多