2 comments

[ 1.8 ms ] story [ 16.1 ms ] thread
step 7 would be a lot nicer with message estamates.

Even a poor estimate will reduce the amount of data you have to shuffle around a lot. Just a simple moving average of the last 5 posts would give great results.

something like

  for(Channel c : channels)
  {
    messages = c.requestLastNMessages(estimateForChannel(c))
    c.messagesPerHour = requestsPerHour(messages)
    totalMessagesPerHour += c.messagesPerHour
  }

  for(Channel c : channels)
  {
    updateEstimate(c, Math.max(5,c.messagesPerHour/totalMessagesPerHour))
  }
I think you want to keep the moving average in case something bad happens. a buddy might update once a week, but after an accident or something, might update very quickly. you'll want to track that.
I think the solution is to build caching into the "home server" - it keeps a copy / can quickly retrieve messages from a remote server.