MongoDB Jakaminen: Vaiheittainen opetusohjelma esimerkin kanssa

โšก ร„lykรคs yhteenveto

MongoDB Sharding jakaa suuret tietojoukot pienempiin osajoukkoihin, jotka on jaettu useille eri alueille. MongoDB instansseja, mikรค vรคhentรครค yksittรคisen palvelimen suorittimen kuormitusta. Sirpaleklusteri yhdistรครค sirpaleet, mรครคrityspalvelimen ja reitittimen skaalatakseen tallennustilaa ja kyselyjen lรคpimenoa horisontaalisesti.

  • ๐Ÿงฉ Ydinkonsepti: Sharding osioi yhden loogisen kokoelman useille sirpaleille, mutta kyselyt kรคsittelevรคt tietoja edelleen yhtenรค kokoelmana.
  • ๐Ÿ—๏ธ Cluster Komponentit: Sirpaloitu klusteri tarvitsee sirpaleita dataa varten, mรครคrityspalvelimen metadataa varten ja reitittimen asiakaskomentojen ohjaamiseksi.
  • โš™๏ธ Toteutusprosessi: Kรคynnistรค mรครคrityspalvelin, kรคynnistรค mongos-reititin, lisรครค sirpaleita ja ota sitten kรคyttรถรถn sirpalointi tietokannassa ja kokoelmassa.
  • ๐Ÿ”‘ Shard-avain: Sirpaleavain mรครคrittรครค, miten dokumentit jakautuvat, joten korkea kardinaliteetti ja jopa kรคyttรถoikeusmallit ovat olennaisia.
  • ๐Ÿ“ˆ Ensisijainen hyรถty: Sharding tarjoaa horisontaalista skaalautuvuutta, hajauttamalla tallennustilaa ja tyรถkuormaa yhden palvelimen pรคivittรคmisen sijaan.

MongoDB Jakaminen: Vaiheittainen opetusohjelma esimerkin kanssa

Mikรค on Sharding in MongoDB?

Jakaminen on kรคsite MongoDB, joka jakaa suuret tietojoukot pieniksi tietojoukoiksi useille MongoDB tapauksissa.

Joskus tiedot sisรคllรค MongoDB on niin valtava, ettรค kyselyt tรคllaisiin suuriin tietojoukkoihin voivat aiheuttaa paljon prosessorin kรคyttรถastetta palvelimella. Tรคmรคn tilanteen ratkaisemiseksi MongoDB on kรคsite Sharding, joka on pohjimmiltaan tietojoukkojen jakamista useisiin MongoDB tapauksissa.

Kokoelma, joka voi olla kooltaan suuri, on itse asiassa jaettu useisiin kokoelmiin eli sirpaleisiin (Shard), kuten niitรค kutsutaan. Loogisesti ajatellen kaikki sirpaleet toimivat yhtenรค kokoelmana.

Shardingin edut MongoDB

Ennen sirpaloidun klusterin kรคyttรถรถnottoa on hyรถdyllistรค ymmรคrtรครค, miksi tiimit ottavat sirpaloinnin kรคyttรถรถn. Tรคrkeimmรคt hyรถdyt ovat:

  • Vaakasuuntainen skaalautuvuus: Dataa hajautetaan useille hyรถdykepalvelimille sen sijaan, ettรค yksi kone pakotettaisiin kasvamaan yhรค suuremmaksi.
  • Suurempi lรคpivirtaus: Luku- ja kirjoitustoiminnot suoritetaan rinnakkain sirpaleiden vรคlillรค, joten klusteri kรคsittelee enemmรคn pyyntรถjรค sekunnissa.
  • Suurempi tallennuskapasiteetti: Kaikkien sirpaleiden yhdistetty levy voi tallentaa paljon suurempia tietojoukkoja kuin yksi palvelin pystyisi tallentamaan.
  • Korkea saatavuus: Kun jokainen sirpale otetaan kรคyttรถรถn replikajoukkona, yhden solmun vikaantuminen ei kaada klusteria.
  • Tasapainotettu kuorma: MongoDB Balancer jakaa datapalat automaattisesti uudelleen estรครคkseen yhdenkรครคn sirpaleen muuttumisen hotspotiksi.

Yhdessรค nรคmรค edut tekevรคt sirpaloinnista skaalauksen vakiomenetelmรคn. MongoDB yhden palvelimen rajojen ulkopuolella.

Jakamisen toteuttaminen

Shardit toteutetaan klustereiden avulla, jotka ovat vain joukko MongoDB tapauksissa.

Shardin komponentteihin kuuluvat:

  1. Sirpale โ€“ Tรคmรค on perusasia, eikรค tรคmรค ole muuta kuin a MongoDB ilmentymรค, joka sisรคltรครค datan osajoukon. Tuotantoympรคristรถissรค kaikkien sirpaleiden on oltava osa replikasarjoja.
  2. Konfigurointipalvelin - Tรคmรค on MongoDB instanssi, joka sisรคltรครค klusterin metatietoja, pohjimmiltaan tietoa eri MongoDB instanssit, jotka sรคilyttรคvรคt sirpaleiden tietoja.
  3. Reititin - Tรคmรค on MongoDB instanssi, joka on pohjimmiltaan vastuussa asiakkaan lรคhettรคmien komentojen uudelleenohjaamisesta oikeille palvelimille.

Jakaminen askel askeleelta Cluster esimerkki

Vaihe 1) Luo erillinen tietokanta konfigurointipalvelimelle.

mkdir /data/configdb

Vaihe 2) Aloita MongoDB instanssi mรครคritystilassa. Oletetaan, ettรค meillรค on palvelin nimeltรค Palvelin D, joka olisi mรครคrityspalvelimemme. Meidรคn on suoritettava alla oleva komento palvelimen mรครคrittรคmiseksi mรครคrityspalvelimeksi.

mongod --configdb ServerD:27019

Vaihe 3) Kรคynnistรค mongos-instanssi mรครคrittรคmรคllรค kokoonpanopalvelin.

mongos --configdb ServerD:27019

Vaihe 4) Yhdistรค mongo-komennosta mongos-instanssiin.

mongo --host ServerD --port 27017

Vaihe 5) Jos klusteriin on lisรคttรคvรค palvelin A ja palvelin B, anna seuraavat komennot.

sh.addShard("ServerA:27017")
sh.addShard("ServerB:27017")

Vaihe 6) Ota tietokannan sirpaleiksi jakaminen kรคyttรถรถn. Jos siis meidรคn on sirpaloitava Employeedb-tietokanta, anna alla oleva komento.

sh.enableSharding("Employeedb")

Vaihe 7) Ota kokoelman sirpaleiksi jakaminen kรคyttรถรถn. Jos siis meidรคn on siroteltava Employee-kokoelma, anna alla oleva komento.

sh.shardCollection("Employeedb.Employee", { "Employeeid": 1, "EmployeeName": 1 })

Kuinka valita Sharp Key -avain MongoDB

Sirpaleavain on indeksoitu kenttรค tai kenttรคjoukko, joka MongoDB kรคyttรครค sitรค pรครคttรครคkseen, mihin sirpaleeseen mikรคkin dokumentti tallennetaan. Koska avain ohjaa datan jakelua, sen hyvรค valinta on tรคrkein yksittรคinen pรครคtรถs sirpaleisessa kรคyttรถรถnotossa. Huono avain keskittรครค datan ja liikenteen yhteen sirpaleeseen, mikรค mitรคtรถi sirpaleen hyรถdyt.

Vahvalla sirpaleavaimella on yleensรค seuraavat ominaisuudet:

  • Korkea kardinaliteetti: Kentรคllรค tulisi olla useita mahdollisia arvoja, jotta tiedot voidaan jakaa useisiin hienojakoisiin osiin.
  • Matala taajuus: Mikรครคn yksittรคinen arvo ei saisi olla hallitseva, muuten kyseisen arvon jakavat dokumentit kasaantuvat yhdeksi sirpaleeksi.
  • Ei-monotoninen muutos: Avaimet, jotka aina kasvavat, kuten aikaleimat, lรคhettรคvรคt jokaisen uuden kirjoituksen samaan sirpaleeseen, luoden hotspotin.

MongoDB tukee kahta avaimeen perustuvaa sirpalointistrategiaa. Ranged sharding jakaa datan yhtenรคisiin alueisiin ja sopii aluekyselyihin, kun taas hash sharding kรคyttรครค hash-funktiota jakaakseen kirjoitukset tasaisesti sirpaleiden kesken. Tiimit aloittavat usein hash shardingilla, kun kirjoitusmรครคrรค on suuri, ja siirtyvรคt range shardingiin, kun aluepohjaiset lukutehtรคvรคt ovat vallitsevia. Valitsetpa minkรค tahansa strategian, testaa avain realistisia kyselymalleja vasten ennen committia, koska sirpalointiavainta ei voida muuttaa helposti datan lataamisen jรคlkeen.

Sharding vs. replikointi MongoDB

Sharding ja replikointi ovat toisiaan tรคydentรคviรค mutta erillisiรค ominaisuuksia. Alla oleva taulukko korostaa eroja, jotta voit soveltaa kumpaakin oikein ja kรคytรคnnรถssรค tuotantoklusterit kรคyttรคvรคt molempia yhdessรค.

Aspect Sharding replikointi
Tarkoitus Skaalaa vaakasuunnassa jakamalla tiedot Suojaa tiedot ja pidรค ne saatavilla
Tiedot jokaisesta solmusta Osajoukko (yksi sirpale) tiedoista Tรคydellinen kopio tiedoista
Ensisijainen hyรถty Enemmรคn tallennustilaa ja suorituskykyรค Vikasietoisuus ja lukuskaala
Tรคrkeimmรคt komponentit Shardit, mรครคrityspalvelin, mongos-reititin Ensisijaiset ja toissijaiset jรคsenet

Lyhyesti sanottuna sirpaletekniikka vastaa skaalautuvuuden tarpeeseen, kun taas replikointi vastaa saatavuustarpeeseen, ja vankka kรคyttรถรถnotto yhdistรครค molemmat.

UKK

Kyllรค. Tekoรคlytyรถkalut voivat analysoida kyselymalleja ja kenttien kardinaliteettia ehdottaakseen sopivia sirpaleavaimia ja varoittaakseen monotonisista kentistรค. Koska avainta on vaikea muuttaa myรถhemmin, validoi kaikki suositukset todellisia tyรถkuormia vasten ennen niiden soveltamista.

Kyllรค. Tekoรคlyyn perustuva valvonta voi track datan kasvua, suorittimen kuormitusta ja kyselyviivettรค ennustaakseen, milloin yksittรคinen palvelin on ylikuormittunut. Se merkitsee oikean hetken sirpaloinnille, vaikka insinรถรถrien tulisi vahvistaa kapasiteettisuunnitelmat ennen toimimista.

Alueellinen sirpalointi jakaa datan yhtenรคisiin arvoalueisiin, mikรค sopii aluekyselyihin, mutta voi aiheuttaa epรคtasaisten palojen riskin. Hajautettu sirpalointi tiivistee avainta, joka jakaa kirjoitukset tasaisesti sirpaleiden kesken, mikรค parantaa kirjoitusjakaumaa tehokkaiden alueskannausten kustannuksella.

Kyllรค. Ota kรคyttรถรถn sirpalekรคsittely tietokannassa, varmista, ettรค valitulla sirpaleavaimella on indeksi, ja suorita sitten sh.shardCollection() nimiavaruudessa. MongoDB alkaa automaattisesti jakaa olemassa olevia dokumentteja osiin kรคytettรคvissรค olevien sirpaleiden kesken.

Tiivistรค tรคmรค viesti seuraavasti: