Berserk Docs

Data Model

How Berserk stores and organizes data within datasets

Within each dataset, Berserk organizes data into records and segments.

Records

Each record is a structured event with:

  • $time — the event timestamp, used for time-range filtering and ordering
  • Named columns — typed fields extracted from the original telemetry (e.g., level, service, duration)
  • $raw — the full original record stored as a dynamic (JSON-like) value, enabling queries over fields that aren't part of a fixed schema

Segments

Under the hood, Berserk stores data in segments — immutable, event files ordered by time. You don't interact with segments directly, but they determine query performance:

  • Queries with time filters (where $time > ago(1h)) skip segments outside the range
  • The janitor service periodically merges small segments into larger, more efficient ones
  • Each segment covers a contiguous time range within a dataset

On this page