[Документация Yandex Cloud](../../index.md) > [Yandex StoreDoc](../index.md) > [Концепции](index.md) > Шардирование

# Шардирование в Yandex StoreDoc

[_Шардирование_](../../glossary/sharding.md) — стратегия горизонтального масштабирования данных, при которой части коллекций Yandex StoreDoc размещаются на разных хостах кластера. Шард (набор хостов) связывается с набором данных с помощью _ключа шардирования_. Yandex StoreDoc поддерживает шардирование для работы с большими объемами данных и для увеличения пропускной способности СУБД. Шардирование особенно полезно, когда вертикальное масштабирование (увеличение мощности сервера) нерентабельно или невозможно.

Yandex StoreDoc поддерживает основные стратегии шардирования данных:
 
 * по хешу (ключ шардирования на базе хеша);
 * по диапазону значений (ranged sharding).


## Преимущества шардирования {#advantages}

Шардирование позволяет распределить нагрузку по хостам базы данных и обычно используется в следующих случаях:
- Ожидаются высокая частота запросов к базе данных и быстрый рост количества данных.
- Приложение требует все больше и больше ресурсов, но наращивать вычислительную мощность хостов кластера (дисков, памяти и процессоров) уже невозможно.

Горизонтальное масштабирование подразумевает распределение набора данных и нагрузки по нескольким узлам. Также для увеличения дисковой емкости могут добавляться серверы. Емкость одной машины или ее скорость могут быть невысокими, но в горизонтально масштабируемом кластере каждая машина обрабатывает лишь часть общей нагрузки и хранит лишь часть общих данных. Это делает систему потенциально эффективнее, чем единственный сервер с большой емкостью и быстрыми дисками.

Шардирование помогает:
- Преодолевать технические ограничения. {#restrictions}

  Потребность работать с большими наборами данных может привести к тому, что инфраструктура хранения данных упрется в предел возможностей оборудования, доступного на рынке (например, IOPS дисковой подсистемы).

  Если приложения работают близко к лимитам производительности, имеет смысл разбить информацию на шарды и распределить операции чтения.  

- Создавать геораспределенные системы. {#geo-distribution}

  Распределение шардов кластера по различным регионам может помочь:
  - улучшить доступность для региональных пользователей;
  - соблюсти местные законы, например, требование о хранении данных на территории определенной страны или региона.

- Повышать скорость выполнения запросов. {#processing-speed} 

  Скорость запросов может снижаться из-за конкуренции за ресурсы. Обычно это происходит при росте количества операций чтения или затрат процессорного времени на их обработку.

  Шарды выполняют запросы к одной и той же коллекции параллельно. Это исключает конкуренцию за общие ресурсы (процессор, дисковая подсистема) и сокращает время обработки запросов.


## Использование шардирования {#uses}

Чтобы распределить данные по шардам:
1. [Включите шардирование](../operations/shards.md#enable) на уровне кластера Yandex StoreDoc.
1. [Добавьте](../operations/shards.md#add-shard) нужное количество шардов.
1. [Включите шардирование](../tutorials/sharding.md#enable) для нужных коллекций. 

Смотрите также [пример шардирования](../tutorials/sharding.md#example).


## Особенности управления шардированием в Yandex StoreDoc {#shard-management}

Yandex StoreDoc управляет шардами следующим образом:

- Из-за ограниченных ресурсов кластер с хостами классов **b1.medium** и **b2.medium** не шардируется.

- Кластер можно [создать шардированным](../operations/cluster-create.md#creating-a-sharded-cluster) либо [включить шардирование](../operations/shards.md#enable) позже.

- За управление шардированием в Yandex StoreDoc отвечают хосты с ролями `MONGOS` (маршрутизация запросов пользователей) и `MONGOCFG` (хранение конфигурации шардов). Подробнее читайте в разделе [Типы хостов](host-roles.md).

- В Yandex StoreDoc можно включить шардирование двух типов:
  - **Стандартное** — экономичный тип шардирования для кластеров, в которых нет особых требований к хостам, управляющим шардированием.
  
    В кластер будут добавлены хосты `MONGOINFRA`, сочетающие в себе роли `MONGOS` и `MONGOCFG`. Минимальное количество таких хостов — три.
    
  - **Расширенное** — гибкий тип шардирования для кластеров, в которых требуется определенное количество хостов каждой роли.
  
    В кластер будут добавлены выделенные сервера `MONGOS` и `MONGOCFG`. Минимальное количество хостов `MONGOS` — два, хостов `MONGOCFG` — три.
    
- В кластере с включенным шардированием:
  - Все запросы к Yandex StoreDoc должны направляться к хостам `MONGOS` или `MONGOINFRA` вместо `MONGOD`.
  - Нельзя отключить шардирование или полностью удалить хосты, которые поддерживают работу шардирования: в кластере всегда будет поддерживаться минимальное количество хостов `MONGOS` и `MONGOCFG` или `MONGOINFRA`.

Подробнее читайте в разделе [Типы хостов](host-roles.md).

## Примеры использования {#examples}

* [Миграция коллекций из MongoDB в Yandex StoreDoc](../tutorials/storedoc-migration-with-data-transfer.md)
* [Миграция кластера Yandex StoreDoc с версии 4.4 на 6.0 c помощью Yandex Data Transfer](../tutorials/storedoc-versions.md)
* [Шардирование коллекций Yandex StoreDoc](../tutorials/sharding.md)