Kā izmantot MongoDB apkopošanas cauruļvadu

Kā izmantot MongoDB apkopošanas cauruļvadu
Tādi lasītāji kā jūs palīdz atbalstīt MUO. Veicot pirkumu, izmantojot saites mūsu vietnē, mēs varam nopelnīt filiāles komisiju. Lasīt vairāk.

Apkopošanas cauruļvads ir ieteicamais veids, kā palaist sarežģītus vaicājumus MongoDB. Ja esat izmantojis MongoDB MapReduce, labāk pārslēdzieties uz apkopošanas konveijeru, lai veiktu efektīvākus aprēķinus.





MUO dienas video RITINĀT, LAI TURPINĀTU AR SATURU

Kas ir apkopošana MongoDB un kā tā darbojas?

  Apkopošanas konveijera procesa skice

Apkopošanas konveijera ir daudzpakāpju process palaišanai uzlabotas vaicājumi MongoDB . Tas apstrādā datus dažādos posmos, ko sauc par cauruļvadu. Varat izmantot vienā līmenī ģenerētos rezultātus kā darbības veidni citā.





Piemēram, varat nodot atbilstības darbības rezultātu uz citu posmu, lai kārtotu šādā secībā, līdz iegūstat vēlamo rezultātu.





Katrā apkopošanas konveijera posmā ir MongoDB operators un tiek ģenerēts viens vai vairāki pārveidoti dokumenti. Atkarībā no jūsu vaicājuma līmenis konveijerā var parādīties vairākas reizes. Piemēram, jums var būt nepieciešams izmantot $count vai $šķirt operatora posmus vairāk nekā vienu reizi pāri apkopošanas cauruļvadam.

Apkopošanas cauruļvada posmi

Apkopošanas cauruļvads vienā vaicājumā nodod datus vairākos posmos. Ir vairāki posmi, un sīkāku informāciju par tiem varat atrast MongoDB dokumentācija .



Tālāk definēsim dažus no visbiežāk izmantotajiem.

$match posms

Šis posms palīdz definēt konkrētus filtrēšanas nosacījumus pirms citu apkopošanas posmu sākšanas. Varat to izmantot, lai atlasītu atbilstošos datus, kurus vēlaties iekļaut apkopošanas konveijerā.





$grupas posms

Grupas posmā dati tiek sadalīti dažādās grupās, pamatojoties uz konkrētiem kritērijiem, izmantojot atslēgu un vērtību pārus. Katra grupa apzīmē atslēgu izvades dokumentā.

Piemēram, apsveriet tālāk minēto pārdošanu datu paraugi:





  Piemēram, datu paraugi

Izmantojot apkopošanas konveijeru, varat aprēķināt kopējo pārdošanas apjomu un lielāko pārdošanas apjomu katrai produkta sadaļai.

 { 
$group: {
    _id: $Section,
    total_sales_count: {$sum : $Sold},
    top_sales: {$max: $Amount},
  }
}

The _id: $Sadaļa pārī sagrupē izvaddokumentu, pamatojoties uz sadaļām. Norādot top_sales_count un top_sales laukus, MongoDB izveido jaunas atslēgas, pamatojoties uz agregatora definēto darbību; tas var būt $ summa , $ min , Maks. $ , vai $vid .

$skip posms

Jūs varat izmantot $izlaist posmā, lai izvadā izlaistu noteiktu skaitu dokumentu. Parasti tas notiek pēc grupu posma. Piemēram, ja sagaidāt divus izvaddokumentus, bet izlaižat vienu, apkopošana izvadīs tikai otro dokumentu.

Lai pievienotu izlaišanas posmu, ievietojiet $izlaist darbība apkopošanas cauruļvadā:

 ..., 
{
    $skip: 1
  },

$šķirošanas posms

Kārtošanas posms ļauj sakārtot datus dilstošā vai augošā secībā. Piemēram, mēs varam tālāk kārtot datus iepriekšējā vaicājuma piemērā dilstošā secībā, lai noteiktu, kurā sadaļā ir lielākais pārdošanas apjoms.

Pievienojiet $šķirt operators uz iepriekšējo vaicājumu:

 ..., 
{
    $sort: {top_sales: -1}
  },

$ limita posms

Ierobežojuma darbība palīdz samazināt izvaddokumentu skaitu, kurus vēlaties rādīt apkopošanas konveijeram. Piemēram, izmantojiet $ limits operators, lai iegūtu sadaļu ar augstākajiem pārdošanas apjomiem, kas atgriezti iepriekšējā posmā:

kopēt failus no virtualbox uz resursdatoru
 ..., 
{
    $sort: {top_sales: -1}
  },

{"$limit": 1}

Iepriekš minētais atgriež tikai pirmo dokumentu; šī ir sadaļa ar vislielāko pārdošanas apjomu, kā tas ir redzams sakārtotās produkcijas augšdaļā.

$projekta posms

The $projekts posms ļauj veidot izvaddokumentu, kā vēlaties. Izmantojot $projekts operatoru, varat norādīt, kuru lauku iekļaut izvadē, un pielāgot tā atslēgas nosaukumu.

Piemēram, izvades paraugs bez $projekts posms izskatās šādi:

  Nekārtotu datu paraugs apkopošanas konveijeram

Apskatīsim, kā tas izskatās ar $projekts posms. Lai pievienotu $projekts uz cauruļvadu:

 ..., 

{
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }

Tā kā mēs iepriekš esam grupējuši datus, pamatojoties uz produktu sadaļām, iepriekš norādītajā izvades dokumentā ir iekļauta katra produkta sadaļa. Tas arī nodrošina apkopoto pārdošanas apjomu un populārāko pārdošanas apjomu funkciju izlaidē kā TotalSold un TopSale .

Galīgais rezultāts ir daudz tīrāks salīdzinājumā ar iepriekšējo:

  Izvades paraugs apkopošanas konveijera posmiem

$ unwind Stage

The $atpūsties posms sadala masīvu dokumentā atsevišķos dokumentos. Veikt sekojošo Pasūtījumi dati, piemēram:

  Pasūtījumu datu paraugi

Izmantojiet $atpūsties posms, lai dekonstruētu preces masīvs pirms citu apkopošanas posmu piemērošanas. Piemēram, atritinot preces masīvam ir jēga, ja vēlaties aprēķināt kopējos ieņēmumus katram produktam:

 db.Orders.aggregate( 
[
  {
    "$unwind": "$items"
  },
  {
    "$group": {
      "_id": "$items.product",
      "total_revenue": { "$sum": { "$multiply": ["$items.quantity", "$items.price"] } }
    }
  },
  {
    "$sort": { "total_revenue": -1 }
  },

  {
        "$project": {
            "_id": 0,
            "Product": "$_id",
            "TotalRevenue": "$total_revenue",

        }
    }
])

Šis ir iepriekš minētā apkopošanas vaicājuma rezultāts:

  Rezultāta paraugs atritināšanas posmam

Kā izveidot apkopošanas cauruļvadu MongoDB

Lai gan apkopošanas konveijerā ir iekļautas vairākas darbības, iepriekš piedāvātie posmi sniedz priekšstatu par to, kā tās lietot konveijerā, tostarp katras darbības pamatvaicājumu.

Izmantojot iepriekšējo pārdošanu datu paraugs, apskatīsim dažus no iepriekš apspriestajiem posmiem vienā gabalā, lai iegūtu plašāku priekšstatu par apkopošanas konveijeru:

 db.sales.aggregate([ 

    {
        "$match": {
            "Sold": { "$gte": 5 }
            }
    },

        {

        "$group": {
            "_id": "$Section",
            "total_sales_count": { "$sum": "$Sold" },
            "top_sales": { "$max": "$Amount" },
            
        }

    },

    {
        "$sort": { "top_sales": -1 }
    },

    {"$skip": 0},

    {
        "$project": {
            "_id": 0,
            "Section": "$_id",
            "TotalSold": "$total_sales_count",
            "TopSale": "$top_sales",

        }
    }
    
])

Galīgais rezultāts izskatās kā kaut kas, ko esat redzējis iepriekš:

  Izvades paraugs apkopošanas konveijera posmiem

Apkopošanas cauruļvads un MapReduce

Līdz novecošanai, sākot no MongoDB 5.0, parastais veids, kā apkopot datus MongoDB, bija MapReduce. Lai gan MapReduce ir plašākas lietojumprogrammas pārsniedzot MongoDB, tas ir mazāk efektīvs nekā apkopošanas konveijers, tāpēc ir nepieciešams trešās puses skripts, lai atsevišķi uzrakstītu karti un samazinātu funkcijas.

No otras puses, apkopošanas cauruļvads ir raksturīgs tikai MongoDB. Taču tas nodrošina tīrāku un efektīvāku veidu, kā izpildīt sarežģītus vaicājumus. Papildus vienkāršībai un vaicājuma mērogojamībai piedāvātie konveijera posmi padara izvadi daudz pielāgojamāku.

Ir daudz vairāk atšķirības starp apkopošanas cauruļvadu un MapReduce . Jūs tos redzēsit, pārejot no MapReduce uz apkopošanas konveijeru.

Padariet lielo datu vaicājumus efektīvus MongoDB

Jūsu vaicājumam ir jābūt pēc iespējas efektīvākam, ja vēlaties veikt padziļinātus aprēķinus ar sarežģītiem datiem MongoDB. Apkopošanas konveijera ir ideāli piemērota uzlabotai vaicāšanai. Tā vietā, lai manipulētu ar datiem atsevišķās darbībās, kas bieži vien samazina veiktspēju, apkopošana ļauj tos visus ievietot vienā veiktspējas konveijerā un izpildīt vienreiz.

Lai gan apkopošanas konveijera ir efektīvāka nekā MapReduce, varat padarīt apkopošanu ātrāku un efektīvāku, indeksējot savus datus. Tas ierobežo datu apjomu, kas MongoDB jāskenē katrā apkopošanas posmā.