Обикновено данните се разделят на фрагменти по начин, който позволява изобщо да се избегнат междусървърните JOINS. Защото тази операция е трудна и скъпа. Ако вашият пример е хипотетичен, бих препоръчал да разделите всички данни по поле user_id или user_group_id.
Например сегмент A ще съдържа всички таблици с информация от потребители, чийто user_id % 3 =0, сегмент B - кой user_id % 3 =1, сегмент C - кой user_id % 3 =2. Така че повечето от необходимите JOINS ще бъдат вътре в един шард. За някои сложни междусървърни заявки може да имате общо NO-SQL хранилище като memcached или Redis, което ще има копия на необходимите данни от всички шардове (разбира се, това не е пълно копие на всички таблици). Такива хранилища могат лесно да се копират на толкова сървъри, колкото са ви необходими. Ето как работят високонатоварените проекти.