Интересует такой момент.
Как работают таблицы с более > 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.
Как быть в такой ситуации?
Ответ
Вам нужен шардинг - сегментация БД по некоторым признакам. Самое сложное здесь, определиться с тем, как именно делить данные, т.к. методика сильно зависит от того, насколько данные зависимы друг от друга. В качестве простого и показательного примера можно разбить всех пользователей по диапазонам ников. Для простоты будем учитывать только первую букву ника и считать, что все ники записаны в нижнем регистре с использованием только лишь латиницы. Далее прикидываем каково распределение пользователей по первым буквам ников. В простейшем случае на каждую букву выделяем свой сервер. Это конечно же расточительно. Поэтому группируем пользователей по первым буквам таким образом, чтобы в каждом диапозоне оказалось примерно одинаковое кол-во пользователей (т.е. чтобы распределение было примерно равномерным). Теперь при чтении/записи мы всегда знаем, на какой сервер нам нужно пойти с запросом, при условии, что у нас есть первая буква ника. Понятно, что такая схема разделения данных не бесплатна. Распределение данных по шардам может измениться. В таком случае нужно перераспределять данные.
Комментариев нет:
Отправить комментарий