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 _parent
mező 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 ahas_child
lekérdezéssel, amelynekscore_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.