Kako ravnati z napredno obdelavo podatkov z zbirnim okvirom MongoDB

MongoDB je prišel daleč. Čeprav obstaja veliko podatkovnih baz NoSQL, je MongoDB prva baza podatkov, ki mi pride na misel, ko govorimo o podatkovnih bazah NoSQL.

Čeprav je bilo med ljudmi, ki imajo radi SQL, in ljudmi, ki imajo raje NoSQL, vedno nekaj vročine, resnica je, da baze podatkov, kot je MongoDB, rešujejo drugačen problem.

In so lahko zelo priročni pri predaji nestrukturiranih podatkov, kjer je hitro in učinkovito upravljanje podatkov (in njihovo spreminjanje v ustrezno znanje) bolj koristno kot trdna zmogljivost, ki jo nudijo stare šolske baze podatkov SQL.

MongoDB ima zmogljiv okvir za to - to je manipuliranje s podatki neposredno na strežniku: Aggregation Framework. Pojdimo vanjo in poiščimo nekaj hitrih točk o tem, kaj je in zakaj je pomembno.

Kaj je agregacijski okvir?

Okvir združevanja je le način za poizvedovanje po dokumentih v zbirki v MongoDB. Ta okvir obstaja, ker ko začnete delati s podatki in manipulirati z njimi, morate pogosto zbirati zbirke, jih spreminjati, izvleči polja, preimenovati polja, jih združevati, razvrščati dokumente po polju, eksplodirati niz polj v različnih dokumentih itd. .

Tega ne more storiti tradicionalni sistem poizvedovanja, s katerim je MongoDB (to je poizvedba za iskanje ali posodobitev ali katera koli druga poizvedba, ki ste jo morda uporabili).

Preprosta poizvedba, nastavljena v MongoDB, omogoča samo pridobivanje celotnih ali delov posameznih dokumentov. V resnici ne omogočajo manipulacije z dokumenti na strežniku in nato vrnitve v aplikacijo.

Tu vstopi ogrodje združevanja iz MongoDB. To ni nič zunanjega, saj prihaja združevanje v MongoDB. S tem brezplačnim seznamom predvajanja v YouTubu, ki sem ga naredil, se lahko naučite delati z ogrodjem za združevanje MongoDB.

Cevovod

Okvir združevanja temelji na konceptu plinovoda. Poglejmo sliko, ki to bolje razloži:

Kot vidite, tukaj poberemo zbirko in jo prenesemo po cevovodu. Ta cevovod je sestavljen iz določenih faz, v katerih določeni operaterji spreminjajo dokumente v zbirki z različnimi tehnikami. Na koncu se izhod vrne v aplikacijo, ki pokliče poizvedbo.

Primerjajte ga s preprosto poizvedbo, kot je find. Seveda deluje v večini načinov, vendar ni zares uporabno, če želite med pridobivanjem podatkov spremeniti tudi podatke.

Bodisi boste morali vzeti dokumente in jih ustrezno spremeniti v aplikaciji na strežniku, ali še huje, poslali jih boste odjemalcu in pustili, da ga koda vmesnika spremeni za vas.

V obeh primerih zapravljate vire in pasovno širino. Tako agregacijski okvir lepo obravnava to težavo. Poglejmo, kako to počne pri operaterjih.

Operatorji cevovodov

V MongoDB je cevovod niz, sestavljen iz različnih operaterjev, ki sprejmejo kup dokumentov in izpljunejo spremenjene dokumente v skladu s pravili, ki jih določi programer. Naslednji operater sprejme dokumente, ki jih je izpljunil prejšnji operater, zato se imenuje cevovod.

V cevovodu je lahko veliko operaterjev, ki jih je mogoče tudi ponoviti, za razliko od običajnih poizvedb MongoDB.

Oglejmo si nekaj pogostih operaterjev cevovodov v MongoDB.

$ group

Ta operater vam omogoča združevanje kopice dokumentov na podlagi določenega polja v dokumentih. Uporablja se lahko tudi za združevanje različnih polj v dokumentih.

Veliko verjamem v rek, da je slika vredna 1000 besed. Video je vreden 1000 slik (no, tehnično veliko več slik, ampak v redu), zato si oglejmo hiter video o tem:

$ match

Operator cevovoda za ujemanje deluje zelo podobno kot običajni operator za iskanje. Dobra stvar pri tem pa je, da ga je mogoče večkrat uporabiti, ker ste v cevovodnem okolju! Zaradi tega je močan.

Poglejmo, kako se uporablja v zbirki:

Omejitev $

Operater cevovoda $ skip preskoči prvih N dokumentov, ostale dokumente pa posreduje naslednjemu operaterju. Poglejmo hiter primer:

$ preskoči

Operater cevovoda $ skip preskoči prvih N dokumentov in preostale dokumente posreduje naslednjemu operaterju. Poglejmo hiter primer:

$ odviti

Ta operater je osebno moj najljubši. $ Unind zavzame polje polja in ga razširi v več N pod-dokumentov, pri čemer i-ti dokument vsebuje i-to določeno vrednost polja kot vrednost imena polja.

V kombinaciji z drugimi operaterji, kot sta $ group in $ match, to postane zelo zmogljivo za obdelavo podatkov. Zveni zmedeno? Oglejmo si preprost primer:

$ projekt

Projektni operater vam omogoča, da iz vsakega dokumenta izvlečete kopico polj, ostalo pa zavržete. Ne samo to, lahko tudi preimenujete oskubljena polja, concat nize, odstranite podniz in še veliko več!

Poglejmo, kako to deluje na kratko:

Najboljše prakse za uporabo agregacijskega okvira

Z veliko močjo prihaja velika odgovornost. Zbirno ogrodje lahko enostavno izkoristite tudi za preproste poizvedbe, zato je pomembno, da zagotovite, da ne pišete slabih poizvedb v zbirki podatkov.

Za začetek upoštevajte naslednje:

  1. MongoDB bo zavrnil vsakega operaterja, ki zasede več kot 100 MB RAM-a, in bo povzročil napako. Poskrbite, da boste podatke čim prej zmanjšali, saj en sam operater ne sme zasesti več kot 100 MB pomnilnika.
  2. Red je pomemben! Če na prvo mesto postavite $ match, boste zmanjšali število dokumentov, poslanih v preostali del cevovoda. Če na naslednji način postavite $ project, boste nato še zmanjšali velikost posameznega dokumenta, tako da se znebite polj.
  3. Nazadnje se prepričajte, da opravite vse delo, ki zahteva uporabo indeksiranih polj (razvrščanje, ujemanje itd.), Preden začnete uporabljati operaterje, kot sta $ project ali $ unsind. To je zato, ker ti operaterji ustvarijo nove dokumente, ki nimajo indeksov iz prvotnega dokumenta.

Zaključek

MongoDB je odlično orodje za zbirke podatkov in je lahko zelo koristno za majhna zagonska podjetja in podjetja, ki želijo hitro ponoviti. To je deloma posledica ohlapnih omejitev in odpuščanja.

Sam uporabljam MongoDB pri codedamn - platformi za razvijalce, kot ste vi, kjer se vsi učijo in povezujejo!

Mir!