Push vs. Pull Comparison
Choosing Between
[[copy_property]]and[[link_resources]]
rescile provides two distinct mechanisms for moving data between resources. Understanding the difference is key to
writing clear, maintainable models.
| Feature | [[copy_property]] |
[[link_resources]] (with copy_properties) |
|---|---|---|
| Operation | Push: Pushes data from the origin_resource to a connected node. |
Pull / lookup with origin-first fallback: The engine first tries to copy the named property from the origin_resource to the with resource; if the origin does not have the property, it falls back to copying from the with resource to the origin. |
| Requirement | An existing, direct connection must be present between the source and destination. | No existing connection required. It finds the remote node via a join condition or filter. |
| Analogy | Property Assignment / Inheritance: connected_object.property = self.property |
Database JOIN / Lookup: generally self.property = lookup_object(condition).property, but falls back to pushing from self when self already owns the property. |
| Use Case | Propagating context along an existing relationship graph (e.g., an application pushing its environment to its server). |
Enriching a resource with data from a central “lookup” source (e.g., a server looking up its location from a datacenter resource). |
| Can create new relations? | No — operates on already-connected nodes only. | Yes — create_relation creates a new relationship as part of the pull operation. |
| Conditional filtering | match_on filters the destination (to) resource. |
match_on filters the origin_resource; match_with filters the with resource. |
When to Use [[copy_property]]
Use [[copy_property]] when your graph already has a connection between two resource types and you want to propagate
properties downstream. A classic example is pushing an application’s environment tag down to all its connected
servers so that servers inherit the environment context without each server needing to define it independently.
See the full reference: [[copy_property]] Reference
When to Use [[link_resources]]
Use [[link_resources]] when you need to discover the target resource first — i.e., when no direct relationship
exists yet, or when you want to find a matching resource by a shared key or expression. This is the “lookup table”
or “JOIN” pattern.
See the full reference: [[link_resources]] Reference