Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk útmutatást nyújt olyan GQL-lekérdezések írásához, amelyek kiszámíthatóan és hatékonyan működnek a gráfokkal a Microsoft Fabric platformján. A javaslatok a platform aktuális viselkedésén és a dokumentált korlátozásokon alapulnak.
A gráfméretre, az eredményméretre és a lekérdezés időtúllépésére vonatkozó korlátozásokat az Aktuális korlátozások című témakörben talál. A cikkben szereplő számos javaslat a gráfséma tervezésére is vonatkozik. További információ: Gráfséma tervezése.
Korai szűrés a mintákban
Helyezze a szűrőket a gráfmintákba a későbbi utasítások helyett. A mintaszintű WHERE záradékok csökkentik a köztes eredmények számát az illesztések és az azt követő utasítások futtatása előtt, ami csökkenti a teljes végrehajtási költséget.
Ajánlott: Szűrés a mintaegyezés során.
-- Pattern-level WHERE reduces intermediate results
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.id > 1000)
RETURN p.firstName, p.lastName, c.name
Elkerülni: Késői szűrés külön FILTER utasítással.
-- Statement-level filter runs after all pattern matches are produced
MATCH (p:Person)-[:workAt]->(c:Company)
FILTER p.birthday < 19940101 AND c.id > 1000
RETURN p.firstName, p.lastName, c.name
Mindkét lekérdezés ugyanazt az eredményt adja vissza, de az első verzió lehetővé teszi, hogy a lekérdezési motor a kiértékelési folyamat korábbi sorait metsse ki.
Jótanács
A mintaszintet WHERE az SQL-feltételhez JOIN ... ON hasonlónak tekinti. A teljes eredményhalmaz utólagos szűrése helyett a kiértékelési ponton korlátozza az egyezéseket.
Csak a szükséges tulajdonságokat adja vissza
Csak a forgatókönyv által igényelt csomópont- és éltulajdonságokat adja vissza. Kerülje a teljes csomópontok visszaadását vagy használatát RETURN * , ha csak a tulajdonságok egy részhalmazára van szüksége.
A gráfban a OneLake visszatábláz egy csomóponttulajdonságokat. A szükségtelen tulajdonságok kiválasztása növeli az adatok olvasási, szerializálási költségeit és válaszméretét. A gráfmodellezés során manuálisan válasszon ki oszlopokat a forrástáblából, amelyet csomóponttípus-tulajdonságokként szeretne hozzáadni.
Ajánlott: Keskeny kivetítés.
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name
Elkerülni: Teljes csomópontok visszaadása.
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN *
Megjegyzés:
Csak akkor adjon hozzá csomóponttípus-tulajdonságokat a gráfmodellezés során, ha lekérdezésekhez vagy elemzéshez van rájuk szükség. Csomópontonként kevesebb tulajdonság csökkenti a storage és a lekérdezések terhelését.
Az eredményhalmaz méretének korlátozása
Olyan csomópontok vagy kapcsolatok lekérdezésekor alkalmazhat LIMIT vagy egyéb határoló feltételeket, amelyek nagy számossággal rendelkezhetnek. A kötetlen gráf egyezések nagyon nagy eredményhalmazokat hozhatnak létre, amelyek megközelítik a platform korlátait.
Ajánlott: Korlátozott eredmények.
MATCH (p:Person)-[:knows]->(friend:Person)
RETURN p.firstName, friend.firstName
LIMIT 1000
Elkerülni: Kötetlen, magas számosságú egyezés.
MATCH (p:Person)-[:knows]->(friend:Person)
RETURN p.firstName, friend.firstName
Fontos
A gráf csonkolja a 64 MB-nál nagyobb válaszokat, és az összesítési teljesítmény instabil lehet, ha az eredmények túllépik a 128 MB-ot. Használja a FILTER, LIMIT és GROUP BY elemeket, hogy az eredményeket ezeken a határok között tartsa. További információ: Aktuális korlátozások.
A bejárások sekélyek és célzottak maradnak
Kerülje a mélyen beágyazott vagy rendkívül összetett gráfmintákat. Használjon egyszerű, célzott bejárásokat, amelyek közvetlenül válaszolnak egy adott kérdésre. A változó hosszúságú mintázat minden extra ugrása exponenciálisan növelheti a motor által kiértékelt útvonalak számát, különösen sűrűn csatlakoztatott grafikonokon.
Ajánlott: Szűk határok.
-- Use the narrowest hop range that answers your question
MATCH (p:Person)-[:knows]->{1,3}(friend:Person)
RETURN p.firstName, friend.firstName
LIMIT 1000
Elkerülni: Maximális mélységű bejárás egyértelmű igény nélkül.
-- Exploring the full 8-hop limit on a dense graph is expensive
MATCH (p:Person)-[:knows]->{1,8}(friend:Person)
RETURN *
Fontos
A Graph legfeljebb nyolc ugrást támogat változó hosszúságú mintákban. Ennek ellenére használja a forgatókönyv által lehetővé tetsző legszorosabb korlátokat. A példában a {1,3} minta jelentősen olcsóbb, mint {1,8} ugyanazon a grafikonon.
Redundáns bejárások megakadályozása a TRAIL használatával
TRAIL elérési út mód használatával megakadályozhatja, hogy a lekérdezési motor ugyanazt az élt ismételje. Sűrű gráfokban a ciklusok exponenciális útvonalrobbanást okozhatnak.
TRAIL biztosítja, hogy az egyes élek minden útvonalon legfeljebb egyszer legyenek meglátogatva, ami javítja a helyességet és a teljesítményt.
-- TRAIL prevents revisiting the same :knows edge
MATCH TRAIL (src:Person)-[:knows]->{1,4}(dst:Person)
WHERE src.firstName = 'Alice' AND dst.firstName = 'Bob'
RETURN count(*) AS numPaths
A ciklikus gráfon végzett ugyanazon lekérdezés TRAIL nélkül sokkal nagyobb (és gyakran redundáns) eredményhalmazt hozhat létre.
Megosztott változók használata a hatékony illesztéshez
Ha egy lekérdezéshez több kapcsolat adataira van szükség, használjon megosztott változót ugyanazon entitás mintáinak összekapcsolásához. Megosztott változó nélkül a minták egy cartesian terméket hozhatnak létre - mindkét mintából származó egyezések minden kombinációját -, ami sokkal nagyobb eredményhalmazhoz vezet.
Ajánlott: A megosztott változó p összekapcsolja a mintákat.
-- Single shared variable ensures an efficient join
MATCH (p:Person)-[:workAt]->(c:Company),
(p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, c.name AS company, city.name AS city
LIMIT 1000
Elkerülni: Független minták megosztott változó nélkül.
-- Without a shared variable, this produces a cartesian product
MATCH (p1:Person)-[:workAt]->(c:Company),
(p2:Person)-[:isLocatedIn]->(city:City)
RETURN p1.firstName, c.name, p2.firstName, city.name
A descartes-i szorzat minden egy mintából származó eredményt a másikból származó összes eredménnyel párosít. Ha Person-workAt->Company 1000 sor és Person-isLocatedIn->City 500 sor egyezik, a lekérdezés 1000 × 500 = 500 000 sort ad vissza. Megosztott változó hozzáadása korlátozza az illesztéseket, így csak egyező párok lesznek visszaadva.
Kulcskorlátozások definiálása csomópontokon
Csomópontkulcs-korlátozások definiálása a gráftípusban. A kulcskorlátozások lehetővé teszik, hogy a rendszer optimalizálja azokat a lekérdezéseket, amelyek meghatározott csomópontokat keresnek a kulcstulajdonságuk alapján, hasonlóan a relációs adatbázisok elsődleges kulcsindexeihez.
Például, ha a gráftípus úgy van definiálva, hogy a id csomópontok kulcsa Person legyen:
CONSTRAINT person_pk
FOR (n:Person) REQUIRE n.id IS KEY
Ezután a szűrést id végző lekérdezések használhatják ezt a kulcsot a közvetlen kereséshez:
-- Fast: the engine can look up person 12345 directly using the key
MATCH (p:Person WHERE p.id = 12345)-[:workAt]->(c:Company)
RETURN p.firstName, c.name
A kulcstulajdonság szűrője nélkül a motornak minden Person csomópontot át kell vizsgálnia:
-- Slower: scans all Person nodes before traversing
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName, c.name
Jótanács
Ha egy adott csomópontra van szüksége, szűrjön a mintában lévő kulcstulajdonságra, MATCH hogy kihasználhassa a megadott korlátozást.
Válassza ki a megfelelő adattípusokat
Válassza ki az egyes tulajdonságok legspecifikusabb adattípusát a gráfmodellezés során. A megfelelő típusok kiválasztása fontos a storage hatékonyság és a lekérdezési teljesítmény szempontjából is. A tulajdonságok numerikus INT összehasonlításai például gyorsabbak, mint az egyenértékű STRING értékek sztring-összehasonlításai.
A támogatott adattípusokról az aktuális korlátozások – Adattípusok és támogatott tulajdonságtípusok című témakörben olvashat.
Kapcsolódó bejárások egyesítése egyetlen lekérdezésben
Ahol lehetséges, kérje le a kapcsolódó entitásokat egyetlen gráfmintában ahelyett, hogy külön lekérdezéseket bocsátanak ki, amelyek egymástól függetlenül haladnak át ugyanazon éleken. A bejárások kombinálása elkerüli a redundáns mintaegyezést, és megakadályozza az N+1 lekérdezési problémát, ahol egy kezdeti lekérdezés minden eredménysorhoz külön lekérdezést indít el.
Ajánlott: Egyetlen kombinált minta.
MATCH (c:Customer)-[:purchased]->(o:Order)-[:contains]->(product:Product)
RETURN c.id, o.id, product.name
LIMIT 1000
Elkerülni: Két különálló lekérdezés, amelyek ugyanazon Customer → Order a peremen haladnak.
-- Query 1: fetch 100 orders
MATCH (c:Customer)-[:purchased]->(o:Order)
RETURN c.id, o.id
-- Query 2: run once per order to get products (N+1 problem)
MATCH (o:Order)-[:contains]->(product:Product)
RETURN o.id, product.name
Lekérdezések tesztelése reális adatkötetek ellen
Előfordulhat, hogy a kis adathalmazokon jól teljesítő lekérdezések nem skálázhatók lineárisan. Tesztelje a lekérdezéseket olyan adatkötetekkel, amelyek a várt éles számítási feladatot képviselik.
- Előnyben részesítse a szűrőket és korlátokat tartalmazó konzervatív lekérdezési alakzatokat.
- Kerülje el a feltáró lekérdezések végrehajtását, amelyek "mindent visszaadnak" nagy gráfok esetén.
- A lekérdezés időtartamának monitorozása a 20 perces időtúllépési korláthoz képest.