Цель: Научиться применять шардирование для улучшения производительности Mongo.
Смысл. От производительности БД во многом зависит производительность всего приложения.
Материалы
Документация по MongoDB
Перед выполнением лабораторной работы:
Необходимо убедиться, что на машине установлен:
docker
Это можно сделать с помощью комнад
docker --version
Если docker или docker-compose отсуствуют, то их необходимо установить.
Проверьте наличие образа mongo с помощью команды:
docker images
Если образ отсуствует, то его необходимо скачать с помощью команды:
sudo docker pull mongo:latest
В реальной ситуации не рекомендуется использовать метку latest, вметсто нее следует использовать конкретную версию, но для учебных целей latest достаточно.
Запустите docker контейнер с mongo
sudo docker run mongo:latest
Запустите CLI для работы с mongo внутри контейнера командой:
sudo docker exec -it mongodb bash
Вобщее use переключает контекст с одной базы данных на другую, но как и многие другие команды, в слчучае, если такая БД не существует, то она будет создана.
Создать коллекцию movies с помощьюе команды
db.createCollection("movie")
Взять набор данных и вставить в коллекцию Movies весь набор данных.
Выполнение работы
sudo mkdir /home/mongo && sudo mkdir /home/mongo/{dbc1,dbc2,dbc3} && sudo chmod 777 /home/mongo/{dbc1,dbc2,dbc3} mongod --configsvr --dbpath /home/mongo/dbc1 --port 27001 --replSet RScfg --fork --logpath /home/mongo/dbc1/dbc1.log --pidfilepath /home/mongo/dbc1/dbc1.pid
mongod --configsvr --dbpath /home/mongo/dbc2 --port 27002 --replSet RScfg --fork --logpath /home/mongo/dbc2/dbc2.log --pidfilepath /home/mongo/dbc2/dbc2.pid
mongod --configsvr --dbpath /home/mongo/dbc3 --port 27003 --replSet RScfg --fork --logpath /home/mongo/dbc3/dbc3.log --pidfilepath /home/mongo/dbc3/dbc3.pid
Инициализируем шарды.
rs.initiate({"_id" : "RScfg", configsvr: true, members : [{"_id" : 0, priority :3, host : "127.0.0.1:27001"},{"_id" : 1, host : "127.0.0.1:27002"},{"_id" : 2, host : "127.0.0.1:27003"}]});
Создаем шардированный кластер, используя клиент Mongo
sh.addShard("RS1/127.0.0.1:27011,127.0.0.1:27012,127.0.0.1:27013") sh.status()
Создаем БД «test»
sh.enableSharding("test")
Включаем шардирование
sh.enableSharding("test")
Устанавливаем размер чанка в 1Мб
use config db.settings.save({ _id:"chunksize", value: 1})
Cоздаем коллекцию movies с помощьюе команды
db.createCollection("movie")
Взять набор данных и вставить в коллекцию Movies весь набор данных.
Создать индекс по ключу
db.movie.createIndex({year: "hashed"})
Убедиться, что все прошло успешно
db.movie.stats()
Выполняем шардирование коллекции
sh.shardCollection("test.movie",{year: "hashed"})
Проверяем статус
sh.status()
Выполняем балансировку
sh.balancerCollectionStatus("test.movie")
Выполняем поиск
sh.splitFind( "test.movie", { "year": "1903" } )