Вопрос проверяет понимание стратегий шардирования баз данных для горизонтального масштабирования.
Шардирование — это техника горизонтального масштабирования баз данных, при которой большая таблица разбивается на более мелкие части (шарды), каждая из которых хранится на отдельном сервере. Основная цель — распределить нагрузку и объем данных, чтобы система могла обрабатывать больше запросов и хранить больше информации, чем один сервер.
Выбор стратегии зависит от того, как приложение обращается к данным. Основные подходы:
shard_id = hash(user_id) % N. Это обеспечивает равномерное распределение данных, но делает запросы по диапазону неэффективными, так как данные разбросаны по всем шардам.function getShardId(userId, totalShards) {
const hash = hashCode(userId.toString());
return Math.abs(hash) % totalShards;
}
// Пример использования
const userId = 12345;
const shardCount = 4;
const shardId = getShardId(userId, shardCount);
console.log(`User ${userId} goes to shard ${shardId}`);В этом примере функция getShardId вычисляет хеш от строкового представления ID пользователя и возвращает номер шарда. Это простой способ равномерно распределить пользователей по шардам.
Шардирование применяется в высоконагруженных системах, когда одна база данных не справляется с объемом данных или запросов. Выбор стратегии зависит от паттернов доступа: диапазонное шардирование подходит для запросов по диапазону, хеш-шардирование — для равномерного распределения, а географическое — для снижения задержек. Важно также продумать механизм решардинга на случай изменения нагрузки.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию