@SET1

Как делать шардинг такой базы данных?

Допустим есть сайт, на котором пользователи регистрируются и пишут статьи в свой блог. Каждую статью можно оценить лайком и написать комментарий. Один инстанс MySQL хранит все статьи, лайки и комментарии к статьям 50 000 пользователей. Меня настигла мысль, что если блог заведет какая-то очень известная личность, и она напишет 500 статей, каждая их которых соберет 500 000 лайков, то в таблице будет 250 000 000 записей. А если он продолжит писать статьи, то рано или поздно наступит момент Х, когда сервер будет не справляться. Можете подсказать решение данной проблемы? Надо как-то сделать так, чтобы можно было просто подключать дополнительные инстансы и приложение автоматически знало где искать нужную информацию. Я прекрасно понимаю что решение этой задачи невозможно быстро расписать на этом проекте, но я потратил на поиск решения этой проблемы около недели, но так ничего и не придумал. Буду благодарен за любые подсказки.
  • Вопрос задан
  • 853 просмотра
Пригласить эксперта
Ответы на вопрос 5
FanatPHP
@FanatPHP
Чебуратор тега РНР
Надо тег сделать, "влажные эротические фантазии".

Сайта у нас ещё нет.
Базы данных нет.
Статей нет.
Известной личности нет.
Офигиллиарда лайков нет.

Но зато полные штаны беспокойства, А ВДРУГ БАЗА НЕ СПРАВИЦА!!!

В порядке конструктива.
Купи себе пару хороших книжек, а лучше пойди на нормальные курсы, которые от Авито, не помню, как они называются. Потом пойди поработать в нормальную контору, где можно на практике разобраться, что такое база данных и с какого конца к ней подходят. Не в смысле нагрузки, а чтобы и мысли не возникало про дичь типа таблиц вида likes_for_userid_847192.
И годков через 5 можешь начинать задумываться о вопросе, "что будет если в базе будет 1 000 000 000 0000 00000 000000!!!111адинадин записей".
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
5ee3e55fbb7e2976333625.jpeg

тут и на то, что ты еще не спросил
Ответ написан
Комментировать
2ord
@2ord
Вряд ли есть какое-то чудо-решение в масштабируемости системы. Из довольно банальных советов: правильно спроектировать БД под большие нагрузки, добавив необходимые индексы. Но все равно наступит момент, когда нагрузка будет слишком большой и тогда будут исчерпаны доступные соединения к СУБД, появятся какие блокировки, таймауты, крэши и прочая радость. Что даже dev ops не спасут от "сервер временно недоступен".
В облаках можно в некоторой степени автоматически масштабировать вычислительные ресурсы, но так можно внезапно разориться из-за атаки какого-то бота.
Ответ написан
Комментировать
@rPman
Во первых, с чего вы взяли что сервер не будет справляться?
Во вторых шардинг дает только линейную оптимизацию нагрузки, т.е. позволяет распределить нагрузку на несколько серверов.

Скорее всего вы просто пишите код, который делает бессмысленные вычисления на каждый чих, вместо сохранения результата. Например вместо подсчета лайков с помощью count на каждый показ странички, считайте лайки увеличивая и уменьшая значение поля у поста.

Сложную аналитику же проводите оффлайн сторонними средствами, ибо sql базы для этого не подходят.
Ответ написан
tsklab
@tsklab
Здесь отвечаю на вопросы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы