Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Таблица с большим количеством строк

#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



Вам нужен шардинг - сегментация БД по некоторым признакам. Самое сложное здесь, определиться с тем, как именно делить данные, т.к. методика сильно зависит от того, насколько данные зависимы друг от друга. В качестве простого и показательного примера можно разбить всех пользователей по диапазонам ников. Для простоты будем учитывать только первую букву ника и считать, что все ники записаны в нижнем регистре с использованием только лишь латиницы. Далее прикидываем каково распределение пользователей по первым буквам ников. В простейшем случае на каждую букву выделяем свой сервер. Это конечно же расточительно. Поэтому группируем пользователей по первым буквам таким образом, чтобы в каждом диапозоне оказалось примерно одинаковое кол-во пользователей (т.е. чтобы распределение было примерно равномерным). Теперь при чтении/записи мы всегда знаем, на какой сервер нам нужно пойти с запросом, при условии, что у нас есть первая буква ника. Понятно, что такая схема разделения данных не бесплатна. Распределение данных по шардам может измениться. В таком случае нужно перераспределять данные.

Комментариев нет:

Отправить комментарий