<br><div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">You have M users and each user follows an average of N other users. To<br>


render a user's timeline, you need to present the latest 20 tweets<br>
(twoorls in the new terminology :) ) from all his friends. The naive<br>
way to do it is to fetch N*20 messages, sort them, then take the first<br>
20. This is expensive to do when N is big. Another problem is that<br>
because of the frequent updates from typical users, caching this<br>
calculation doesn't give you much because the cache gets frequently<br>
invalidated between page loads.<br>
<br>
The only solution I see is to keep a "latest twoorls" store for each<br>
user. When a friend sends a new twoorl, it (or a pointer to it) is<br>
copied to the twoorl store for all his friends. This trades space for<br>
speed, and it limits the paging you can do to see your twoorl history,<br>
but it's the only way you can scale this kind of service when N is<br>
big.<br></blockquote><div><br>It seems the solution will look similar to emails and mailing lists, which both are quite scalable.  <br><br>Except in this case every account is also a broadcast mailing list.  <br><br>Cheers,<br>
yc<br><br></div></div>