Conventional stack
- Current application state in an operational database
- Metrics in a separate flattened model
- Relationships removed during export
- Schema drift discovered after a pipeline fails
- Root-cause joins rebuilt by hand
Solution · Operational analytics
Query counts, groupings, value distributions, relationship patterns, entity timelines, and evolving schema without first flattening current operational data into a second model.
RushDB operational analytics runs relationship-aware and schema-aware queries on the same current context used by applications and agents; it complements rather than replaces a mature analytical warehouse.
When events, entities, incidents, and application state are copied into separate analytical models, a metric and its operational cause drift apart. Teams rebuild the relationship during every investigation.
Implementation walkthroughs
The requests are concrete and copyable. Result values are intentionally not simulated: inspect the records, metrics, generated queries, warnings, and scores returned by your configured project.
KPI
Pure metrics use select keys for self-grouping and order by a selected metric so aggregation happens before pagination.
const kpis = await db.records.find({
labels: ['EVENT'],
where: { featureId: 'checkout', type: 'conversion' },
select: {
conversions: { $count: '*' },
revenue: { $sum: '$record.value' },
avgOrder: { $avg: '$record.value', $precision: 2 },
},
groupBy: ['conversions', 'revenue', 'avgOrder'],
orderBy: { conversions: 'asc' },
})What to notice
Breakdown
Dimensional groupBy uses the record-field reference and returns that field name beside each metric row.
const byChannel = await db.records.find({
labels: ['EVENT'],
where: { featureId: 'checkout', type: 'conversion' },
select: {
conversions: { $count: '*' },
revenue: { $sum: '$record.value' },
},
groupBy: ['$record.channel'],
orderBy: { conversions: 'desc' },
})What to notice
Time series
The selected time-bucket key is also the group key and ordering key, producing a response ready for a chart.
const daily = await db.records.find({
labels: ['EVENT'],
where: { featureId: 'checkout', type: 'conversion' },
select: {
day: { $timeBucket: { field: '$record.timestamp', unit: 'day' } },
conversions: { $count: '*' },
},
groupBy: ['day'],
orderBy: { day: 'asc' },
})What to notice
Evidence drill-down
A dashboard can follow a metric interaction with a relationship-aware record query. Keeping the responses separate avoids implying that an aggregate proved causality.
const evidence = await db.records.find({
labels: ['INCIDENT'],
where: {
status: 'open',
FEATURE: { featureId: 'checkout' },
},
orderBy: { openedAt: 'desc' },
limit: 20,
})What to notice
Shared primitives
These capabilities operate on the same records, relationships, schema, values, and semantic representations used elsewhere in the platform.
01
Calculate operational metrics with select, grouping, and time-aware query shapes.
02
Inspect how entities, events, incidents, and outcomes connect.
03
Explore actual property domains, ranges, and missing values.
04
Inspect the live shape of evolving records and identify newly introduced fields.
05
Keep customer, process, or investigation history connected to current state.
06
Let software inspect available labels, fields, values, and paths before generating a query.
Example systems
Connect interactions, events, subscriptions, incidents, and outcomes around one entity.
Move from a metric or alert to the records and relationship paths that explain it.
Inspect value domains, missingness, and evolving fields while the data remains in use.
Use RushDB when current records, relationship paths, live schema, and application-facing queries belong in the same operational loop. Keep Snowflake, BigQuery, ClickHouse, or another warehouse for large-scale historical processing, specialized columnar workloads, or established enterprise BI models.