Что вам нужно учитывать, так это концептуально отделить технологию хранения данных от вашей структуры данных. MySQL можно масштабировать, масштабировать и еще больше масштабировать, если вы знаете, как это сделать, поскольку это старая и проверенная платформа. Хотя у него, вероятно, нет такой блестящей новой привлекательности, как у NoSQL, у него очень хороший послужной список, и это часто имеет значение.
Существует несколько способов настроить MySQL для более быстрой работы. Встроенные функции кластеризации и репликации означают, что вы можете очень легко масштабировать до нескольких экземпляров, а использование более простого и быстрого механизма баз данных, такого как MyISAM, может обеспечить прирост производительности на порядок при некоторых обстоятельствах.
MongoDB - очень интересный эксперимент, но до сих пор он не заработал свои полосы. Если это что-то похожее на другие благородные проекты NoSQL, такие как Cassandra, ему все равно потребуются годы работы, чтобы быть по-настоящему «веб-масштабируемым».
В вашем конкретном случае, скажем, вы хотите найти список подписчиков пользователя. Вы, вероятно, делаете что-то вроде этого:
SELECT followers.id, followers.name FROM user_followers
LEFT JOIN users AS followers ON followers.id=user_followers.follower_id
WHERE user_followers.user_id=?
Вы правы, предполагая, что JOIN
здесь вызовет проблемы в будущем. Что вы упускаете из виду, так это то, что вы можете легко удалить объединение, используя тот же скромный прием, который необходим для масштабирования приложения: денормализация важной информации.
Что если вы копируете имя подписчика в таблицу user_followers
каждый раз, когда добавляете в него запись:
SELECT follower_id, follower_name FROM user_followers
WHERE user_id=?
Теперь нет никаких соединений. Единственный улов заключается в том, что, когда вы начинаете денормализовать вещи, вы должны реализовать метод, чтобы привести копии обратно в синхронизацию с мастером, если что-то испортилось, и вы должны быть осторожны, чтобы гарантировать, что изменение в мастер-значении должно распространиться на Копии так целесообразно, как требуется.
Простое массовое обновление может быть таким же простым, как:
UPDATE users,user_followers
SET user_followers.follower_name=users.name
WHERE user_followers.follower_id=users.id
Если пользователи не могут изменить свои имена, вам даже не нужно беспокоиться. Иногда ограничения могут помочь вам в этом отношении.