Шардинг: что это такое и как используется

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

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

Разбиваем базу на 3 основных шарда, каждый из которых будет отвечать за клиентов с определенными идентификаторами:

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

Далее, при поступлении запроса на получение данных о клиенте, система определяет, в каком шарде находится данный клиент, и направляет запрос на соответствующий сервер.

Ниже приведен пример кода на Python с использованием библиотеки PyMongo для работы с MongoDB, который демонстрирует, как осуществляется шардинг в данной СУБД:

python
from pymongo import MongoClient
# Подключение к координатору (mongos)
client = MongoClient('mongodb://localhost:27017')
# Получение коллекции
db = client['test_db']
collection = db['clients']
# Настройка шардинга
shard_key = [('client_id', 1)]
client.admin.command('shardCollection', 'test_db.clients', key=shard_key)
# Добавление клиентов
clients = [
  {'client_id': 1, 'name': 'John', 'email': 'john@gmail.com'},
  {'client_id': 2, 'name': 'Kate', 'email': 'kate@gmail.com'},
  {'client_id': 3, 'name': 'Bob', 'email': 'bob@gmail.com'},
  ...
]
result = collection.insert_many(clients)
# Получение клиента по ID
client_id = 2
client_query = {'client_id': client_id}
shard_query = {'$query': client_query, '$readPreference': {'mode': 'primary'}}
client_data = collection.find_one(shard_query)
print(client_data)

Здесь видно, что при добавлении новых клиентов мы указываем класс поля 'client_id' как ключ для шардинга. Далее мы отправляем команду настройки шардинга на координатор (mongos).

При запросе на получение клиента по ID мы передаем запрос на чтение всем шардам (задается параметр readPreference), но фильтруем по полю 'client_id'. Монгос на свою очередь направляет запрос только на один шард в зависимости от значения этого поля.

Похожие вопросы на: "шардинг "

SetTimeout: простой способ управления задержками в JavaScript
Шаблоны на тему "С"
Что такое 413 и как его использовать?
Dropdown Menu: A Guide to Designing a Seamless Navigation System
DDS в PNG – бесплатный конвертер изображений онлайн
Timus Online Judge - площадка для программирования и решения задач
Обновление Composer: инструмент для управления зависимостями в PHP
Играй и выигрывай в казино Sloot!
Как объединить массивы в PHP: примеры и объяснения
Диапазон чисел типа long long