teljesítmény a szülő-gyermek kapcsolatokban az Elasticsearch alkalmazásban

ehhez a bejegyzéshez a házigazdát fogjuk használni Elasticsearch tovább Qbox.io. itt regisztrálhat vagy elindíthatja a klasztert, vagy kattintson a fejléc navigációjában az “első lépések” gombra. Ha segítségre van szüksége a beállításhoz, olvassa el a “Qbox Elasticsearch fürt létrehozása.”

a szülő-gyermek előnyei a beágyazott objektumokkal szemben a következők:

  • a szülő dokumentum frissíthető a gyermekek újraindexelése nélkül.
  • Gyermekdokumentumok hozzáadhatók, módosíthatók vagy törölhetők anélkül, hogy ez befolyásolná a szülőt vagy más gyermekeket. Ez különösen akkor hasznos, ha a gyermekdokumentumok nagy számban vannak, és gyakran hozzá kell adni vagy módosítani kell őket.
  • a Gyermekdokumentumokat keresési kérelem eredményeként lehet visszaküldeni.

a szülő-gyermek kapcsolat természetében hasonló a beágyazott modellhez: mindkettő lehetővé teszi számunkra, hogy egy entitást társítsunk egy másikhoz. A különbség az, hogy a beágyazott objektumoknál minden entitás ugyanabban a dokumentumban él, míg a szülő-gyermek esetében a szülő és a gyermek teljesen különálló dokumentumok. Ugyanakkor bizonyos korlátozásokhoz is kötődik:

szülő – gyermek korlátozások

  • a szülő és a gyermek típusoknak különbözőnek kell lenniük, vagy az azonos típusú dokumentumok között nem hozható létre szülő-gyermek kapcsolat.
  • a _parent.type beállítás csak olyan típusra mutathat, amely még nem létezik. Ez azt jelenti, hogy egy Típus nem válhat szülőtípussá a létrehozása után.
  • a szülő-és gyermekdokumentumokat ugyanazon a szilánkon kell indexelni. A szülőazonosítót használják a gyermek útválasztási értékeként annak biztosítására, hogy a gyermek ugyanazon a szilánkon legyen indexelve, mint a szülő. Ez azt jelenti, hogy ugyanazt a szülőértéket kell megadni egy gyermekdokumentum megszerzésekor, törlésekor vagy frissítésekor.

a szülő-gyermek és a beágyazott kapcsolatok közötti főbb különbségek a következőképpen foglalhatók össze:

beágyazott objektum szülő-gyermek
1. A beágyazott objektumok ugyanabba a dokumentumba kerülnek. a szülő-és gyermekobjektumok külön kerülnek mentésre a különböző dokumentumokban.
2. Egy gyermekobjektumnak több szülőobjektuma is lehet. egy gyermekobjektumnak nem lehet több szülőobjektuma.
3. A lekérdezés viszonylag gyors. a lekérdezés lassú, mert a gyermek és a szülő külön van tárolva.
4. Könnyen fenntartani több beágyazott szinten. nehéz fenntartani több beágyazott szinten.
5. A beágyazott szintű lekérdezés jól definiált és egyszerűen használható tetszőleges számú beágyazott objektumhoz. A lekérdezési karakterlánc is használható a beágyazott objektumok lekérdezésére. a lekérdezés bonyolulttá válik, ha több szülő-gyermek kapcsolat van jelen.
6. Lekérheti az összes adatot, mivel ugyanabban az objektumban tartózkodnak. nem lehet egyszerre lekérdezni a gyermek-és a szülődokumentumokat.
7. A beágyazott objektum minden szülő objektumhoz duplikálódik. Nincs adat duplikáció, mivel a kapcsolat normalizálódik.
8. Ha egy beágyazott objektum megváltozik, az összes szülő objektumot újra indexelni kell. nem kell újra indexelni a szülőt, mert csak egy kapcsolat van közöttük.

a beágyazott objektumok előnyben részesíthetők a szülő-gyermek helyett az asszociációk kezelése érdekében a következő okok miatt:

  • amikor az adatbázis-modellek több beágyazott társítást tartalmaznak több szinten. Ezért könnyen kezelhetők a beágyazott objektum megközelítéssel.
  • a szülő-gyermek megközelítésben egy gyermekobjektumnak nem lehet több szülőobjektuma.
  • a beágyazott lekérdezések könnyebben végrehajthatók a beágyazott objektum megközelítésben.
  • nem sikerült lekérni mind a gyermek, mind a szülő mezőket egyetlen lekérdezésben.

teljesítmény szempontok: globális rendszámok

a globális rendszámok a fielddata és doc values tetején lévő adatstruktúra, amely minden egyes egyedi kifejezéshez növekményes számozást tart fenn lexikográfiai sorrendben. Minden kifejezésnek egyedi száma van, és az a kifejezés száma alacsonyabb, mint a B kifejezés száma. A globális sorszámok csak szöveg-és kulcsszómezőkön támogatottak.

a Fielddata és a doc értékek sorszámmal is rendelkeznek, ami egy adott szegmens és mező összes kifejezésének egyedi számozása. A globális ordinálok csak erre épülnek, azáltal, hogy feltérképezik a szegmens ordinálokat és a globális ordinálokat, az utóbbi egyedülálló az egész szilánkban.

a globális sorrendeket olyan funkciókhoz használják, amelyek szegmens sorrendeket használnak, például a rendezést és az összesítés kifejezéseket, hogy javítsák a végrehajtási időt. A kifejezések összesítése pusztán a globális sorrendekre támaszkodik, hogy az összesítést szilánk szinten hajtsa végre, majd a globális sorrendeket csak a végső redukciós fázisra konvertálja valós kifejezéssé, amely egyesíti a különböző szilánkok eredményeit.

érdekli a Kubernetes? Tekintse meg Vállalati Kubernetes támogatásunkat

a szülő-gyermek globális rendszámokat használ a csatlakozások felgyorsításához. A globális rendeket újra kell építeni, miután bármilyen szilánkot megváltoztattak. Minél több szülőazonosító értéket tárol egy szilánk, annál tovább tart a _parent mező globális sorszámainak újjáépítése.

a globális rendszámok alapértelmezés szerint lelkesen épülnek fel: ha az index megváltozott, a _parentmező globális rendjei a refresh részeként kerülnek újjáépítésre. Ez jelentős időt adhat a frissítéshez. A legtöbb esetben azonban ez a megfelelő kompromisszum, különben a globális sorrendeket újjáépítik, amikor az első szülő-gyermek lekérdezést vagy összesítést használják. Ez jelentős késleltetési csúcsot eredményezhet a felhasználók számára, és ez általában rosszabb, mivel a _parent mező több globális rendszámát is megkísérelheti újjáépíteni egyetlen frissítési intervallumon belül, amikor sok írás történik.

ha a szülőt / gyermeket ritkán használják, és az írások gyakran előfordulnak, akkor érdemes letiltani a lelkes betöltést:

a globális rendszámok által használt halom mennyisége a következőképpen ellenőrizhető:

következtetés

a több generációhoz való csatlakozás képessége (például Grandparents and Grandchildren) vonzónak tűnik, amíg nem gondolja a kapcsolódó költségeket:

  • minél több csatlakozás van, annál rosszabb lesz a teljesítmény.
  • a szülők minden generációjának rendelkeznie kell a memóriában tárolt _id karakterlánc-mezőkkel, amelyek sok RAM-ot fogyaszthatnak.

ha figyelembe veszi a kapcsolati sémáit, és azt, hogy a szülő-gyermek megfelelő-e az Ön számára, fontolja meg ezt a tanácsot a szülő-gyermek kapcsolatokról:

  • használja a szülő-gyermek kapcsolatokat takarékosan, és csak akkor, ha sokkal több gyermek van, mint a szülők.
  • kerülje a több szülő-gyermek kapcsolat használatát egyetlen lekérdezésben.
  • Kerülje el a pontozást a has_child szűrő használatával, vagy a has_child lekérdezéssel, amelynek score_mode értéke nincs.
  • tartsa rövidre a szülőazonosítókat, hogy jobban tömörítsék a doc értékeket, és átmenetileg kevesebb memóriát használjanak.

Adj egy örvény!

könnyű felpörgetni egy szabványos házigazdát Elasticsearch klaszter bármelyik 47 Rackspace, Softlayer vagy Amazon adatközpontunkban. Most pedig saját AWS-krediteket biztosíthat a Qbox Private Hosted Elasticsearch-en.

kérdések? Írj nekünk egy megjegyzést, és gyors választ kapunk.

még nem élvezi a hosztolt ELK-stack vállalati keresés előnyeit a Qbox – on? Meghívjuk Önt, hogy hozzon létre egy fiókot még ma, és fedezze fel, milyen egyszerű kezelni és méretezni az Elasticsearch környezetet a felhő hosting szolgáltatásunkban.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.