Kathrin, самое главное не сказал - на работу то взяли?
странно, что Дима не ответил на этот вопрос и фиксер маловато добавил...
ну, уйдя из оффтопа: что касается шардинга, то шардить можно по нескольким принципам. Фиксер предлагает шардить по равномерно увеличивающемуся user_id. Одна-ко, можно использовать подход равномерного шардирования: можно user_id формировать случайным образом, а user_id выбирать как
user_id % n, гда n - количество шард. Тут возникает проблема расширения, по этому формируем user_id в пределах одной части hashring: напримерн первые 16M. Далее, если нужно расширить, то дабавляем новые сервера, изменяем функцию определения шарды уже на следующие 16М
PHP:
if ( $iser_id < HASHRING_1) $shard_id = $user_id % $n[0];
else if ( $iser_id < HASHRING_2) $shard_id = $user_id % $n[1];
/// ....
// где $n = массив количества шард для констант HASHRING_1 = 16M и HASHRING_2 = 32M;
Ну и как дополнение, количество шард не обязательно должно совпадать с количеством серверов, на одном физическом сервере, нпапример может находится от 32 и более логических шарды.
Данный подход имеет преимущества: равномерное заполнение шард, зная фактическое заполнение - можемманипулировать константами hashring и число серверов. Все это разруливается на уровне конфига.
Ну, если конкретно ответить на вопрос, то встроенного шардинга в MySQL нет, есть небольшая возможность в проксях. Портицирование - это кастрированный шардинг по диапазонам.
По этому, пишется небольшая прослойка на клиенте, в ввиде простенького класса на РНР, занимающего 35 строк.
PS. спасибо fixxxer за первоночальные знания и опыт про шардинг & fisher за разные консультации