问题在于您在Web应用程序中执行的各种操作的整个设计方法,以便如果您在Twitter上关注数百万人,并且当您检查最新的20条推文时,您会在最短的时间内找到它并放置对资源的负担最小。这是一个关于整个堆栈的开放式设计问题。
我的答案不完整(因为我无法完全回答)
由于我们正在谈论数百万用户,因此根据用户的地理位置,我们必须对数据库进行分片。这个答案不被接受,因为在Twitter中你真的不跟踪同一位置的人。 有什么更好的方法可以实现这一目标?
由于大多数最新的20条推文都是最重要的,因此每位用户都会根据收到的时间维护一个缓存(链表),其中包含最新的推文。 这也不被接受。
总的来说,我在这些设计问题上很弱,想知道你会如何解决它们?
答案 0 :(得分:0)
追随数百万人的用户无疑是一种非常特殊的用户,可能不会太多。我认为对于这些用户来说,一个合情合理的设计是每次发布推文时都会在缓存中更新时间线数据,并存档非常旧的数据。因此,每当您请求时间线时,它会立即返回缓存。
以上只是使系统适合您的最简单直接的方法。实际上,在设计中必须考虑更多的措施,例如有多少用户关注数百万人,这些用户刷新的频率等等。