Any rule of thumb on where to use label vs node property vs relationship + node.
Let's have an example, say I have a store and I want to put my products in neo4j. Their identifier is the product sku, and I also want to have a categorization on them like this one is for clothes, food, electronics, and you get the idea. I'll be having a free search on my graph, like the user can search anything, and I'd return all the things related to that search string.
Would it be better to use:
sku 001
, and I'll tag it a label of Food
.sku 001
, and have property on this node called category:"Food"
sku 001
, and I'll create another node for the Food
, and will create a relationship of "category
" to relate them.I have read that if you'll be looking up a property, it's better off as a relationship + node, as traversing is much faster than looking up properties of node.
TIA
Label associates a common name to a set of nodes or relationships. A node or relationship can contain one or more labels. We can create new labels to existing nodes or relationships. We can remove the existing labels from the existing nodes or relationships.
Neo4j recently introduced the concept of labels and their sidekick, schema indexes. Labels are a way of attaching one or more simple types to nodes (and relationships), while schema indexes allow to automatically index labelled nodes by one or more of their properties.
The Neo4j property graph database model consists of: Nodes describe entities (discrete objects) of a domain. Nodes can have zero or more labels to define (classify) what kind of nodes they are. Relationships describes a connection between a source node and a target node.
The graphs in the Neo4j Graph Data Science Library support properties for relationships. We provide multiple operations to work with the stored relationship-properties in projected graphs. Relationship properties are either added during the graph projection or when using the mutate mode of our graph algorithms.
Whether you should use a property, a label or a node for the category depends on how you will be querying the data.
(I'll assume here that you have a fairly small, fairly fixed set of categories.)
Use a property if you won't be querying by category, but just need to return the category of a node that has been found by other means. (For example: what is the category of the item with sku 001
?)
Use a label if you need to query by category. (For example: what are all the foods costing less than $10?)
Use a node if you need to traverse the category without knowing what it is. (For example: what are the ten most popular items in the same category as one that the user has chosen?)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With