#highload #mysql
Интересует такой момент. Как работают таблицы с более > 10 000 000 000 строк? Допустим, у меня есть мощный сервер + MySQL. Ну PHP там и прочее.. Как разбиваются таблицы? Как добавляются новые поля в разбитые таблицы? Как производится быстрая выборка из этих таблиц? Допустим, у меня есть модуль пользователей - две таблицы: users и users_fields. В таблице users_fields хранится информация пользователя (о себе, статус, номер телефона, ссылки на страницу в соц. сетях и прочее). То есть, вся не системная информация. Эта таблица сделана для того, чтобы можно было легко добавлять новые поля. Каждая строка в таблице это информация какого либо поля пользователя. uid | field | value 1 | status | тест 1 | vk | id1 2 | status | 2 | vk | id2 Допустим, у меня есть 100 полей. При регистрации автоматически в таблице полей создаются пустые поля. Проблема в том, что если у меня зарегистрируются 100 000 000 пользователей, то количество строк в таблице с информацией полей будет 1 000 000 000. Как быть в такой ситуации?
Ответы
Ответ 1
Вам нужен шардинг - сегментация БД по некоторым признакам. Самое сложное здесь, определиться с тем, как именно делить данные, т.к. методика сильно зависит от того, насколько данные зависимы друг от друга. В качестве простого и показательного примера можно разбить всех пользователей по диапазонам ников. Для простоты будем учитывать только первую букву ника и считать, что все ники записаны в нижнем регистре с использованием только лишь латиницы. Далее прикидываем каково распределение пользователей по первым буквам ников. В простейшем случае на каждую букву выделяем свой сервер. Это конечно же расточительно. Поэтому группируем пользователей по первым буквам таким образом, чтобы в каждом диапозоне оказалось примерно одинаковое кол-во пользователей (т.е. чтобы распределение было примерно равномерным). Теперь при чтении/записи мы всегда знаем, на какой сервер нам нужно пойти с запросом, при условии, что у нас есть первая буква ника. Понятно, что такая схема разделения данных не бесплатна. Распределение данных по шардам может измениться. В таком случае нужно перераспределять данные.
Комментариев нет:
Отправить комментарий