neo4j – labels vs eigenschappen vs relatie + knoop

Vuistregels voor het gebruik van label versus knooppunteigenschap versus relatie + knooppunt.

Laten we een voorbeeld nemen, stel dat ik een winkel heb en mijn producten in neo4j wil plaatsen. Hun identificatie is de product-sku, en ik wil er ook een categorisatie op hebben, zoals deze voor kleding, eten, elektronica, en je snapt het idee. Ik heb een gratis zoekopdracht in mijn grafiek, alsof de gebruiker alles kan zoeken, en ik zou alle dingen teruggeven die verband houden met die zoekreeks.

Is het beter om te gebruiken:

  1. Ik heb een knooppunt met sku 001en ik zal het labelen met het label Food.
  2. Ik heb een node met sku 001en heb een eigenschap op deze node genaamd category:"Food"
  3. Ik heb een knooppunt met sku 001, en ik zal een ander knooppunt maken voor de Food, en zal een relatie van “category” om ze te relateren.

Ik heb gelezen dat als je een eigenschap zoekt, het beter af is als een relatie + knooppunt, omdat het doorlopen veel sneller gaat dan het opzoeken van eigenschappen van een knooppunt.

TIA


Antwoord 1, autoriteit 100%

Of u een eigenschap, een label of een knooppunt voor de categorie moet gebruiken, hangt af van hoe u de gegevens gaat opvragen.

(Ik ga er hier vanuit dat je een vrij kleine, redelijk vaste reeks categorieën hebt.)

Gebruik een eigenschapals u niet per categorie zoekt, maar alleen de categorie wilt retourneren van een knooppunt dat op een andere manier is gevonden. (Bijvoorbeeld: wat is de categorie van het item met sku 001?)

Gebruik een labelals u op categorie moet zoeken. (Bijvoorbeeld: wat zijn alle voedingsmiddelen die minder dan $ 10 kosten?)

Gebruik een knooppuntals u de categorie moet doorlopen zonder te weten wat het is. (Bijvoorbeeld: wat zijn de tien meest populaire items in dezelfde categorie als een die de gebruiker heeft gekozen?)


Antwoord 2, autoriteit 17%

Dit blogberichtkan ook nuttig zijn vanwege de benchmark die het bevat .

Ik heb de ‘relatie’ op 4 verschillende manieren gemodelleerd…

  • Een specifiek relatietype gebruiken (node)-[:HAS_ADDRESS]->(address)
  • Een generiek relatietype gebruiken en vervolgens filteren op eindknooppuntlabel (node)-[:HAS]->(address:Address)
  • Een generiek relatietype gebruiken en vervolgens filteren op relatie-eigenschap (node)-[:HAS {type:“address”}]->(address)
  • Een generiek relatietype gebruiken en vervolgens filteren op eindknooppunteigenschap (node)-[:HAS]->(address {type: “address”})

<…>

Dus samenvattend…specifieke relaties #ftw!

Other episodes