MongoDB Шардинг: Урок стъпка по стъпка с пример

⚡ Умно обобщение

MongoDB Шардингът разделя големи набори от данни на по-малки подмножества, разпределени в множество MongoDB инстанции, намалявайки натоварването на процесора на всеки отделен сървър. Шардираният клъстер комбинира шардове, конфигурационен сървър и рутер, за да мащабира хоризонтално съхранението и пропускателната способност на заявките.

  • 🧩 Основна концепция: Шардингът разделя една логическа колекция на много шардове, но заявките все още третират данните като една колекция.
  • 🏗️ Cluster Компоненти: Един шардиран клъстер се нуждае от шарди за данни, конфигурационен сървър за метаданни и рутер за насочване на клиентски команди.
  • Процес на внедряване: Стартирайте конфигурационния сървър, стартирайте рутера Mongos, добавете shards и след това активирайте sharding-а на базата данни и колекцията.
  • 🔑 Ключ за фрагмент: Ключът shard определя как се разпределят документите, така че високата кардиналност и дори моделите на достъп са от съществено значение.
  • 📈 Основно предимство: Шардингът осигурява хоризонтална мащабируемост, разпределяйки съхранението и натоварването, вместо да се надгражда един единствен сървър.

MongoDB Шардинг: Урок стъпка по стъпка с пример

В какво е Sharding MongoDB?

Шардингът е концепция в MongoDB, който разделя големи набори от данни на малки набори от данни в множество MongoDB инстанции.

Понякога данните в MongoDB ще бъде толкова голям, че заявките към такива големи набори от данни могат да доведат до голямо натоварване на процесора на сървъра. За да се справим с тази ситуация, MongoDB има концепция за Sharding, което е основно разделяне на набори от данни на множество MongoDB инстанции.

Колекцията, която може да е голяма по размер, всъщност е разделена на множество колекции, или Шардове, както ги наричат. Логично, всички шардове работят като една колекция.

Предимства на шардинга в MongoDB

Преди да внедрите шардиран клъстер, е полезно да разберете защо екипите възприемат шардиране. Основните предимства са:

  • Хоризонтална мащабируемост: Данните се разпределят между множество масови сървъри, вместо да се принуждава една машина да расте все повече.
  • По-висока производителност: Операциите за четене и запис се изпълняват паралелно в шардовете, така че клъстерът обработва повече заявки в секунда.
  • По-голям капацитет за съхранение: Комбинираният диск на всички шардове може да съхранява набори от данни, много по-големи от тези, които един сървър може да съхрани.
  • Висока наличност: Когато всеки шард е разположен като набор от реплики, повредата на един единствен възел не води до изключване на клъстера.
  • Балансирано натоварване: - MongoDB balancer преразпределя автоматично парчетата данни, за да предотврати превръщането на даден шард в гореща точка.

Заедно тези предимства правят шардинга стандартния подход за мащабиране. MongoDB отвъд границите на един сървър.

Как да внедрите шардинг

Шардовете се реализират с помощта на клъстери, които не са нищо друго освен група от MongoDB инстанции.

Компонентите на Shard включват:

  1. Shard – Това е основното нещо и това не е нищо друго освен a MongoDB екземпляр, който съдържа подмножеството от данни. В производствени среди всички фрагменти трябва да бъдат част от комплекти реплики.
  2. Конфигурационен сървър - Това е MongoDB екземпляр, който съдържа метаданни за клъстера, основно информация за различните MongoDB екземпляри, които ще съдържат данните за шардовете.
  3. Рутер - Това е 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 Първични и вторични членове

Накратко, шардингът отговаря на нуждата от мащабиране, докато репликацията отговаря на нуждата от наличност, а стабилното внедряване комбинира и двете.

Въпроси и Отговори

Да. Инструментите с изкуствен интелект могат да анализират модели на заявки и кардиналност на полетата, за да предложат кандидати за shard ключове и да предупреждават за монотонни полета. Тъй като ключът е труден за промяна по-късно, валидирайте всяка препоръка спрямо реални натоварвания, преди да я приложите.

Да. Мониторингът, базиран на изкуствен интелект, може tracрастеж на данните, натоварване на процесора и латентност на заявките, за да се прогнозира кога един сървър ще бъде претоварен. Това сигнализира за подходящия момент за шардиране, въпреки че инженерите трябва да потвърдят плановете за капацитет, преди да действат.

Разпределеното шардинг разделя данните на съседни диапазони от стойности, което е подходящо за заявки за диапазони, но крие риск от неравномерни парчета. Хешираното шардинг хешира ключа за равномерно разпределение на записите между шардовете, подобрявайки разпределението на записите за сметка на ефективно сканиране на диапазони.

Да. Активирайте шардинга на базата данни, уверете се, че съществува индекс на избрания ключ на шарда, след което изпълнете sh.shardCollection() върху пространството от имена. MongoDB започва автоматично да разпределя съществуващите документи на части между наличните шардове.

Обобщете тази публикация с: