I'm hoping people might share their thoughts and experience on scale-out architectures in MySQL. I've seen the MySQL webinars and read the articles, but there are a lot of unanswered questions in my mind on the right way to scale out and out and out some more.

From what I understand, when reads get to be a bottleneck, standard practice is to spread reads over replicated slaves. When writing gets to be a bottleneck, you would partition data out horizontally (some records on one server, some on another server).

While the partitioning seems to be a good strategy for writes, I can only see that working for records that will never be in a query together - how would you join across database servers? Is the FEDERATED engine good for this, or is it naive to think that joining across two servers would perform well?

What are some strategies for pulling this off successfully? One argument I've heard is to split data so that records being joined with other records are in the same server. However, in what cases would you ever know this in advance (i.e. when you're partitioning) - is this strategy only good in theory?

Which leads to the question, can writes only be scaled so far? Is there an upper limit? How do the eBays of the world that use MySQL do it?

Your thoughts?