MongoDB Шардинг: Урок стъпка по стъпка с пример
⚡ Умно обобщение
MongoDB Шардингът разделя големи набори от данни на по-малки подмножества, разпределени в множество MongoDB инстанции, намалявайки натоварването на процесора на всеки отделен сървър. Шардираният клъстер комбинира шардове, конфигурационен сървър и рутер, за да мащабира хоризонтално съхранението и пропускателната способност на заявките.
В какво е Sharding MongoDB?
Шардингът е концепция в MongoDB, който разделя големи набори от данни на малки набори от данни в множество MongoDB инстанции.
Понякога данните в MongoDB ще бъде толкова голям, че заявките към такива големи набори от данни могат да доведат до голямо натоварване на процесора на сървъра. За да се справим с тази ситуация, MongoDB има концепция за Sharding, което е основно разделяне на набори от данни на множество MongoDB инстанции.
Колекцията, която може да е голяма по размер, всъщност е разделена на множество колекции, или Шардове, както ги наричат. Логично, всички шардове работят като една колекция.
Предимства на шардинга в MongoDB
Преди да внедрите шардиран клъстер, е полезно да разберете защо екипите възприемат шардиране. Основните предимства са:
- Хоризонтална мащабируемост: Данните се разпределят между множество масови сървъри, вместо да се принуждава една машина да расте все повече.
- По-висока производителност: Операциите за четене и запис се изпълняват паралелно в шардовете, така че клъстерът обработва повече заявки в секунда.
- По-голям капацитет за съхранение: Комбинираният диск на всички шардове може да съхранява набори от данни, много по-големи от тези, които един сървър може да съхрани.
- Висока наличност: Когато всеки шард е разположен като набор от реплики, повредата на един единствен възел не води до изключване на клъстера.
- Балансирано натоварване: - MongoDB balancer преразпределя автоматично парчетата данни, за да предотврати превръщането на даден шард в гореща точка.
Заедно тези предимства правят шардинга стандартния подход за мащабиране. MongoDB отвъд границите на един сървър.
Как да внедрите шардинг
Шардовете се реализират с помощта на клъстери, които не са нищо друго освен група от MongoDB инстанции.
Компонентите на Shard включват:
- Shard – Това е основното нещо и това не е нищо друго освен a MongoDB екземпляр, който съдържа подмножеството от данни. В производствени среди всички фрагменти трябва да бъдат част от комплекти реплики.
- Конфигурационен сървър - Това е MongoDB екземпляр, който съдържа метаданни за клъстера, основно информация за различните MongoDB екземпляри, които ще съдържат данните за шардовете.
- Рутер - Това е MongoDB екземпляр, който е основно отговорен за пренасочването на командите, изпратени от клиента, към правилните сървъри.
Шардинг стъпка по стъпка Cluster Пример
Стъпка 1) Създайте отделна база данни за конфигурационния сървър.
mkdir /data/configdb
Стъпка 2) Стартирайте MongoDB екземпляр в режим на конфигурация. Да предположим, че имаме сървър с име Server D, който би бил нашият конфигурационен сървър. Ще трябва да изпълним командата по-долу, за да конфигурираме сървъра като конфигурационен сървър.
mongod --configdb ServerD:27019
Стъпка 3) Стартирайте инстанцията на mongos, като посочите конфигурационния сървър.
mongos --configdb ServerD:27019
Стъпка 4) От обвивката на Mongo се свържете с инстанцията Mongos.
mongo --host ServerD --port 27017
Стъпка 5) Ако имате сървър A и сървър B, които трябва да бъдат добавени към клъстера, издайте командите по-долу.
sh.addShard("ServerA:27017") sh.addShard("ServerB:27017")
Стъпка 6) Активирайте шардинга за базата данни. Така че, ако трябва да шардираме базата данни Employedb, издайте командата по-долу.
sh.enableSharding("Employeedb")
Стъпка 7) Активирайте шардинга за колекцията. Така че, ако трябва да шардираме колекцията Employee, издайте командата по-долу.
sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })
Как да изберете Shard Key в MongoDB
Ключът shard е индексираното поле или набор от полета, които MongoDB използва, за да реши кой шард (shard) съхранява всеки документ. Тъй като ключът управлява разпределението на данните, добрият му избор е най-важното решение при шардиране. Лошият ключ концентрира данните и трафика върху един шард, обезсмисляйки предимствата на шардирането.
Силният shard ключ обикновено има следните характеристики:
- Висока кардиналност: Полето трябва да има много възможни стойности, така че данните да могат да бъдат разделени на много фини парчета.
- Ниска честота: Нито една стойност не трябва да доминира, в противен случай документите, споделящи тази стойност, се натрупват върху един фрагмент.
- Немонотонна промяна: Ключовете, които винаги се увеличават, като например времеви марки, изпращат всеки нов запис към един и същ шард, създавайки гореща точка.
MongoDB Поддържа две стратегии за шардинг, базирани на ключа. Диапазонното шардинг разделя данните на съседни диапазони и е подходящо за заявки по диапазон, докато хешираното шардинг прилага хеш функция, за да разпредели записите равномерно между шардовете. Екипите често започват с хеширано шардинг, когато записите са много, и преминават към диапазонно шардинг, когато доминират четенията, базирани на диапазон. Която и стратегия да изберете, тествайте ключа спрямо реалистични модели на заявки, преди да извършите коммит, защото ключът на шарда не може да бъде лесно променен след зареждане на данните.
Шардинг срещу репликация в MongoDB
Шардингът и репликацията са допълващи се, но различни функции. Таблицата по-долу подчертава разликите, за да можете да приложите всяка от тях правилно, а на практика производствените клъстери използват и двете заедно.
| Аспект | Sharding | копиране |
|---|---|---|
| Цел | Хоризонтално мащабиране чрез разделяне на данни | Защитете данните и ги дръжте на разположение |
| Данни за всеки възел | Подмножество (един шард) от данните | Пълно копие на данните |
| Основна полза | Повече място за съхранение и пропускателна способност | Толерантност към грешки и мащабиране на четене |
| Основни компоненти | Шардове, конфигурационен сървър, рутер Mongos | Първични и вторични членове |
Накратко, шардингът отговаря на нуждата от мащабиране, докато репликацията отговаря на нуждата от наличност, а стабилното внедряване комбинира и двете.

