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

  1. Tracks dependencies — It knows that Y depends on X.
  2. Computes incrementally — Only new or changed rows are processed.
  3. 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