Recipes, not loops!
Deephaven works fundamentally differently from traditional data processing. Understanding this difference early will save you countless hours of frustration and help you write better, faster code.
The fundamental paradigm shift: recipes, not loops
Traditional approach
In traditional programming, you tell the computer exactly how to process each row:
This loop processes one element at a time. You're giving step-by-step instructions for how to process the data.
The Deephaven way
In Deephaven, you specify what you want, not how to compute it. You write a recipe that describes the transformation, and the engine figures out the optimal way to execute it:
Notice:
- No loops — you describe the relationship (
XSquared = X * X) and the engine applies it to every row. - You specify what to compute, not how to iterate.
- The engine applies this recipe to all rows automatically.
Why this matters: real-time data
This is the critical difference. Loops execute once and stop. Recipes update automatically.
Watch what happens:
- The table keeps updating — new rows appear every second.
- Your recipe runs automatically on every new row.
- You wrote it once, but it executes forever.
With a loop approach, you'd need to build your own subscription and recomputation logic. With recipes, it's automatic.
The recipe paradigm explained
Recipes are specifications, not instructions
When you write:
You're not saying:
- "Start at row 0"
- "Read X from row 0"
- "Multiply by 2"
- "Store in Y at row 0"
- "Repeat..."
You're saying:
- "For every row, Y should equal X times 2"
The engine decides:
- How to chunk the data for optimal performance.
- Whether to parallelize the operation.
- How to handle updates efficiently.
- What rows need recomputation when data changes.
The engine is smart about updates
- Tracks dependencies — It knows that
Ydepends onX. - Computes incrementally — Only new or changed rows are processed.
- Updates automatically — Results update without you doing anything.
When loops ARE appropriate
There are valid uses for loops in Deephaven:
✅ Extracting data from Deephaven
✅ Control flow in your Groovy code
❌ Transforming table columns
Common patterns: Wrong vs Right
Pattern: Create a column from another column
❌ Wrong (loop approach):
✅ Right (recipe approach):
Pattern: Conditional logic
✅ Right (recipe with ternary operator):
Pattern: Running calculations
✅ Right (use updateBy):
Next steps
- Read Think like a ninja for more examples.
- Learn about table operations to see recipes in action.
- Understand the query engine for technical details.
- See updateBy operations for powerful recipes.