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.
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:
- 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.
- Konfigurointipalvelin - Tรคmรค on MongoDB instanssi, joka sisรคltรครค klusterin metatietoja, pohjimmiltaan tietoa eri MongoDB instanssit, jotka sรคilyttรคvรคt sirpaleiden tietoja.
- 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.

