Performance in Parent-Child Relationships in Elasticsearch

For this post, we will be using hosted Elasticsearch on Qbox.io. voit rekisteröityä tai käynnistää klusterin täällä, tai klikkaa “Aloita” otsikon navigointi. Jos tarvitset apua perustamiseen, katso ” Provisioning a Qbox Elasticsearch Cluster.”

vanhemman ja lapsen edut sisäkkäisiin esineisiin nähden ovat seuraavat:

  • vanhempaindokumenttia voidaan päivittää ilman, että lapsia tutkitaan uudelleen.
  • lapsiasiakirjoja voidaan lisätä, muuttaa tai poistaa vaikuttamatta vanhempaan tai muihin lapsiin. Tämä on erityisen hyödyllistä silloin, kun lapsiasiakirjoja on paljon ja niitä on lisättävä tai muutettava usein.
  • Lapsiasiakirjat voi palauttaa hakupyynnön tuloksina.

vanhemman ja lapsen suhde on luonteeltaan samanlainen kuin sisäkkäinen malli:molemmat mahdollistavat yhden olion liittämisen toiseen. Erona on, että sisäkkäisillä esineillä kaikki entiteetit elävät saman asiakirjan sisällä, kun taas vanhemman ja lapsen kohdalla vanhempi ja lapset ovat täysin erillisiä dokumentteja. Se on kuitenkin myös sidottu joihinkin rajoituksiin:

vanhemman ja lapsen väliset rajoitukset

  • vanhemman ja lapsen tyyppien on oltava erilaisia tai vanhemman ja lapsen välisiä suhteita ei voida vahvistaa samantyyppisten asiakirjojen välillä.
  • _parent.type asetus voi viitata vain tyyppiin, jota ei ole vielä olemassa. Tämä tarkoittaa sitä, että tyypistä ei voi tulla kantatyyppiä sen jälkeen, kun se on luotu.
  • vanhempien ja lasten asiakirjat on indeksoitava samaan sirpaleeseen. Vanhemman tunnistetta käytetään lapsen reititysarvona sen varmistamiseksi, että lapsi on indeksoitu samaan sirpaleeseen kuin vanhempi. Tämä tarkoittaa, että sama vanhemman arvo on annettava, kun lapsiasiakirja haetaan, poistetaan tai päivitetään.

tärkeimmät erot vanhemman ja lapsen välisten suhteiden ja sisäkkäisten suhteiden välillä voidaan tiivistää seuraavasti:

sisäkkäinen kohde vanhempi-lapsi
1. Sisäkkäiset esineet tallennetaan samaan asiakirjaan. vanhemman ja lapsen esineet tallennetaan erikseen eri asiakirjoihin.
2. Lapsiobjektilla voi olla useita vanhemman objekteja. lapsiobjektilla ei voi olla useita vanhemman olioita.
3. Kyselyt ovat suhteellisen nopeita. kyseleminen on hidasta, koska lapsi ja vanhempi tallennetaan erikseen.
4. Voi helposti ylläpitää useita sisäkkäisiä tasoja. vaikea ylläpitää useita sisäkkäisiä tasoja.
5. Sisäkkäinen tason kysely on hyvin määritelty ja helppo käyttää minkä tahansa määrän sisäkkäisiä esineitä. Myös kyselymerkkijonoa voidaan käyttää sisäkkäisten kohteiden kyselyyn. kyselyt vaikeutuvat, kun vanhempien ja lasten välisiä suhteita on useita.
6. Voi hakea kaikki tiedot, koska ne asuvat samassa objektissa. ei voi hakea sekä lapsen että vanhemman asiakirjoja yhdellä kyselyllä.
7. Sisäkkäinen objekti saa monistaa kunkin vanhemman objektin. tietojen päällekkäisyyttä ei tarvita, koska suhde normalisoituu.
8. Jos sisäkkäinen objekti muuttuu, Kaikki emoobjektit on indeksoitava uudelleen. emoyhtiötä ei tarvitse indeksoida uudelleen, koska niiden välillä säilyy vain yhteys.

sisäkkäisiä esineitä voidaan pitää parempina kuin vanhemman ja lapsen yhdistyksiä käsiteltäessä seuraavista syistä:

  • kun tietokantamallit sisältävät useita sisäkkäisiä assosiaatioita useilla tasoilla. Siksi niitä voidaan käsitellä helposti sisäkkäisen objektin lähestymistavalla.
  • vanhemman ja lapsen lähestymistavassa lapsi-Objektilla ei voi olla useita vanhemman objekteja.
  • sisäkkäiset kyselyt on helpompi suorittaa sisäkkäisessä objekti-lähestymistavassa.
  • ei voi hakea sekä lasten että vanhempien kenttiä yhdellä kyselyllä.

Performance Considerations: Global Ordinals

Global ordinals on fielddata ja doc values päällä oleva tietorakenne, joka ylläpitää kunkin yksittäisen termin inkrementaalista numerointia leksikografisessa järjestyksessä. Jokaisella termillä on yksilöllinen numero, ja termin a määrä on pienempi kuin termin B määrä. Globaaleja ordinaaleja tuetaan vain teksti-ja avainsanakentillä.

Fielddata-ja doc-arvoilla on myös ordinaalit, joka on yksilöllinen numerointi kaikille tietyn segmentin ja kentän termeille. Globaalit ordinaalit vain rakentuvat tämän päälle, tarjoamalla kartoituksen segmentin ordinaalien ja globaalin ordinaalien välillä, joista jälkimmäinen on ainutlaatuinen koko sirpaleessa.

globaaleja ordinaaleja käytetään ominaisuuksissa, joissa käytetään segmentin ordinaaleja, kuten lajittelua ja termien yhdistämistä, suoritusajan parantamiseksi. Termien aggregointi perustuu puhtaasti globaalien ordinaalien aggregoinnin suorittamiseen sirpaletasolla, minkä jälkeen muuntaa globaalit ordinaalit reaalitermiksi vasta viimeisessä redusointivaiheessa, joka yhdistää eri sirpaleista saadut tulokset.

Kiinnostaako Kubernetes? Tutustu yrityksemme Kubernetes-tukeen

vanhempi-lapsi käyttää globaaleja ordinaaleja nopeuttaakseen liittymistä. Globaalit ordinaalit on rakennettava uudelleen sirpaleiksi muuttumisen jälkeen. Mitä enemmän vanhemman id-arvoja on tallennettu sirpaleeseen, sitä kauemmin globaalien ordinaalien uudelleenrakentaminen _parent – kenttää varten kestää.

globaalit ordinaalit rakennetaan oletusarvoisesti innokkaasti: jos indeksi on muuttunut, _parent kentän globaalit ordinaalit rakennetaan uudelleen osana refresh. Tämä voi lisätä merkittävästi aikaa päivittää. Useimmiten tämä on kuitenkin oikea vaihtokauppa, muuten globaalit ordinaalit rakennetaan uudelleen, kun käytetään ensimmäistä vanhemman ja lapsen kyselyä tai aggregaatiota. Tämä voi tuoda merkittävän latenssipiikin käyttäjillesi ja yleensä tämä on huonompi, koska useita globaaleja ordinaaleja _parent – kentälle voidaan yrittää rakentaa uudelleen yhden päivitysvälin aikana, kun useita kirjoituksia esiintyy.

kun vanhempaa / lasta käytetään harvoin ja kirjoituksia esiintyy usein, saattaa olla järkevää poistaa innokas lataus käytöstä:

globaalien ordinaalien käyttämän kasan määrä voidaan tarkistaa seuraavasti:

johtopäätös

kyky liittyä useampaan sukupolveen (kuten Grandparents and Grandchildren) kuulostaa houkuttelevalta, kunnes ajatellaan siihen liittyviä kustannuksia:

  • mitä enemmän Seuraa on, sitä huonompi suoritus on.
  • jokaisen vanhemman sukupolven on tallennettava muistiin merkkijononsa _id kentät, jotka voivat kuluttaa paljon RAM-muistia.

kun pohdit suhdesuunnitelmiasi ja sitä, sopiiko vanhempi-lapsi sinulle, ota huomioon tämä vanhemman ja lapsen suhdetta koskeva neuvo:

  • käytä vanhemman ja lapsen suhteita säästeliäästi, ja vain silloin, kun lapsia on paljon enemmän kuin vanhempia.
  • Vältä useamman vanhemman ja lapsen välisen yhteyden käyttöä yhdessä kyselyssä.
  • Vältä pisteytystä käyttämällä has_child – suodatinta tai has_child – kyselyä, jossa score_mode ei ole.
  • pidä emotunnukset lyhyinä, jotta ne pakkautuvat doc-arvoissa paremmin ja käyttävät vähemmän muistia, kun ne ladataan ohimenevästi.

Give it a Whirl!

on helppo pyörittää standardi isännöi Elasticsearch cluster tahansa 47 Rackspace, Softlayer, tai Amazon datakeskukset. Ja voit nyt tarjota omia AWS krediittejä Qbox Private Hosted Elasticsearch.

kysymyksiä? Jätä viesti, niin saat nopean vastauksen.

ei vielä nauti isännöidyn ELK-stack enterprise-haun eduista qboxissa? Kutsumme sinut luomaan tilin tänään ja selvittää, kuinka helppoa on hallita ja skaalata Elasticsearch ympäristö pilvipalvelussamme.

Vastaa

Sähköpostiosoitettasi ei julkaista.