Security Data Works

Capability Matrix · Component criteria

Nine components. Each scored on criteria.

Each of the nine components carries its own scoring criteria, with elimination math driven by which criterion choices the environment makes. The criteria are evidence-anchored against production deployments, benchmark numbers, and governance constraints; not vendor positioning. The detail below is what the engagement deliverable runs against.

F0 — Platform pattern (isolation)

Where the security data infrastructure lives. The first cascade.

This is the foundational isolation gate, F0 in the decision framework rather than a scored component, so it precedes the components and sets the ceiling on every one of them. The platform pattern question (isolated dedicated, shared corporate, or multi-tenant MSSP) is scored on:

  • RLS overhead (0% isolated, 15–50% shared, 5–30% MSSP)
  • Catalog requirement (OSS catalogs viable for isolated; Unity Catalog mandatory for shared and MSSP)
  • TCO impact (low / high / model-justified)
  • Production references at the chosen pattern (Huntress, Okta for isolated security deployments, with Netflix validating the isolated-infrastructure pattern generally rather than for security data; Arctic Wolf, Expel, Red Canary for MSSP)

Most engagements arrive at this question with an unstated assumption ("we'll just colocate with corporate IT") that hasn't been priced against the RLS-overhead delta and the Unity Catalog cost. The framework forces it explicit.

Component 0 — Foundation pattern (composed vs. managed)

Composed or managed. The choice that bundles the rest.

The pre-component decision that gates several of the choices below. A composed foundation is specialized open components chosen per layer, the default MOAR pattern, with each component evaluated independently. A managed foundation is an integrated offering where several component decisions come bundled in exchange for operational simplicity. The thesis does not prescribe one over the other; both are MOAR-compliant if they preserve open formats and engine portability at the layers that matter to the client. Scored on:

The foundation choice cascades: selecting a managed foundation like Databricks pre-determines Component 1 (Delta Lake) and Component 2 (Unity Catalog), so the downstream cells stop being independent. Splunk's Machine Data Lake is the managed-foundation candidate to watch, but as of early 2026 it is alpha and not yet a viable foundation. The point of scoring this first is to make the bundle explicit before the component-by-component evaluation begins.

Component 1 — Lakehouse / storage format

The table format choice. 40–60% of vendors eliminated.

Iceberg, Delta Lake, Hudi, or proprietary. Scored on:

The convergence trajectory between Iceberg and Delta, covered as a deeper analysis, softens the format-as-bet framing that was central in 2023. The catalog choice (Component 2) is now where the bet actually gets placed, not the format.

Component 2 — Catalog / metadata

The actual lock-in surface. Scored carefully.

Unity Catalog, Polaris, Nessie, AWS Glue, Hive Metastore. Scored on:

  • Governance depth (RLS, column masking, attribute-based access control)
  • Multi-engine query support
  • Licensing and license-cost ($0 for Polaris/Nessie/Hive; roughly $10–50K/year minimum for Unity Catalog plus compute overhead, a modeled band from list pricing rather than a quote)
  • Operational maturity at production scale
  • Migration cost from current catalog (Hive Metastore → Polaris is automated; Unity Catalog → anything else is manual policy recreation)

Mapping by isolation pattern: isolated-dedicated with Iceberg favors Polaris (table-level RBAC, $0) or Nessie (Git workflows, $0); shared-corporate effectively requires Unity Catalog for fine-grained governance; MSSP multi-tenant requires Unity Catalog for tenant isolation. The catalog choice carries more lock-in surface than the format choice does.

Component 3 — Query engine

Latency, concurrency, ops complexity. Most architectures need more than one.

ClickHouse, Pinot, Trino, Starburst, StarRocks, Athena, Snowflake, Databricks SQL, DuckDB. This is a deliberately broader survey than the matrix's focused C3 candidate set — Pinot, Athena, Snowflake, and Databricks SQL are carried to map the full field a client might raise, not because all four reach the shortlist for a given workload. Scored on:

Latency profile (P95).

Sub-second engines: ClickHouse (a two-regime result on the published Zeek benchmark, reproducible methodology, single-node Tier B: ~47× the schema-on-read SIEM baseline on native MergeTree and ~10× on Iceberg as the five-query-average arm-pairings of the same 2026-06-14 draws, which land at ~10–11× foil-over-Iceberg on the scan-heavy hunting aggregations, the ~4.2–4.6× gap between the two arms being the open-format tax), Pinot (sub-second under high concurrency; LinkedIn's own engineering reports 100K+ QPS, a first-party operator-vendor figure, Tier C per A-15 until independently corroborated). Two-to-five-second engines: Trino, Starburst. Two-to-ten-second engines: Athena, Snowflake, Databricks SQL, where auto-scaling absorbs variance at the cost of consistent low-end latency. Half-to-three-second engines for single-user workloads: DuckDB.

Concurrency profile.

ClickHouse and Pinot handle 10–50 concurrent low-latency queries comfortably, and high-concurrency ad-hoc hunting at cluster scale (100+ analysts) leans on the distributed-coordination engines, Trino and Starburst, though that cluster regime is the gap SDW has not yet measured. What is measured sits at single-host scale, across two benches that answer different questions and should not be run together. The workload-interference bench (2026-06-14, Tier B) ran a scheduled load against an interactive probe and found the interactive p95 stays flat to a knee at roughly 32–64× the base scheduled rate, and that at that knee the failure shape differs by engine, with ClickHouse on native MergeTree the only arm classified graceful while ClickHouse-on-Iceberg and StarRocks both fail by scheduler saturation. The multi-user concurrency bench (2026-06-15, Tier B) asked the different question of how the engines behave as the analyst count rises, and there StarRocks was the best-behaved, carrying the highest QPS ceiling (6.79) and the tightest tail (p95/p50 ≈ 1.16 at N=16, against 1.30 for ClickHouse and 1.90 for Trino), which is why its concurrency cell now scores 4 at Archetypes A and B under MDR-0037. Both arms were OSS/community editions, so neither finding is claimed for the paid tiers that sell concurrency isolation. Single-user shops land on DuckDB. Mismatched concurrency profile is a frequent root cause of "the engine is fast in isolation but feels slow in production."

One caveat that's easy to conflate with the above: a materialized view or MV-like acceleration feature (a manual ClickHouse MV, for instance) makes a given query faster, but it buys noconcurrency-knee headroom on its own — the interference knee sits at the same point with or without materialization (the StarRocks-MV upper bound hit the same ~64× interference knee as base StarRocks, 2026-06-14 workload-interference bench). "Faster query" is not "helps under concurrent load," and a concurrency-sensitive architecture shouldn't expect materialized views to move this ceiling.

Operational complexity.

Self-managed ClickHouse and Pinot are high-ops; Trino is medium-ops; serverless engines (Athena, Snowflake, Databricks SQL) are very-low-ops; DuckDB is single-process and effectively zero-ops. The Q1 team-size question gates which complexity tier is operable.

Use-case fit.

Real-time SOC dashboards: low-latency engines. Ad-hoc threat hunting: high-concurrency engines. Compliance retention and batch reporting: serverless engines. Single-user laptop analysis: DuckDB. Most production stacks end up with two engines split by use case. A few end up with three. The framework handles the multi-engine case by scoring each engine for its strongest use case rather than forcing a single-engine recommendation.

Component 4 — Ingestion / route

Source count drives the requirement, not vendor preference.

Cribl, Tenzir, Vector, Logstash, Kafka Connect, native shippers. Scored on:

  • Connector breadth (counted as native, not "supported via custom code")
  • Schema evolution and OCSF normalization support
  • Throughput at scale (target: 1 GB/sec sustained per node, with reproducible benchmarks)
  • Operational complexity tier match against team capacity
  • Cost-to-serve ($/GB ingested net of reduction ratio; the downstream-cost effect, since aggressive reduction lowers every storage and query bill below it)

The OCSF-normalization criterion is scored on two levels in order, because the first binds before the second matters. Availability comes first, which asks whether the tool ships a usable mapping for the source at all, in the shape the client's actual shipper emits, and first-party pipeline-fidelity work (Tier B, single host, OCSF 1.8.0, version-bound; sdw-lab-benchmarks/pipeline-normalization-fidelity/FINDINGS-2026-06-14.md) found shipped-mapping availability, not per-field fidelity, to be the binding constraint across the open tools tested, with several common security sources having no usable shipped mapping at all, or one bound to a raw input shape (EVTX/XML) that pre-parsed EDR JSON doesn't match. Fidelity comes second, and the gap there is that a shipped mapping can get the OCSF class right and most field values right while still getting the activity classification wrong, so "maps to OCSF" is a coverage claim rather than a fidelity guarantee, and the part that fails is often the part detection content keys on.

The S3 source-count question maps directly to the recommendation tier.

Source countRecommendation tier
Below 10 sourcesnative shippers are sufficient
10–50 sourcesstandard ETL
50–100 sourcesrecommended Cribl or comparable
100–500 sourcesETL is mandatory
500+MSSP-scale

At 500+ sources, MSSP-scale, the integration tail dominates the cost and AI-generated parsers (Tenzir's MCP work, covered in the grounding essay) become a candidate solution if production-validated.

Component 5 — Graph / Visualization / Analyst UX

Where the analyst actually lives.

Splunk SH (federated mode), Grafana, Apache Superset, vendor SOC UIs (Elastic, Sentinel, Chronicle), custom React or similar. Scored on:

The visualization choice is often more constrained by what the analysts already use than the engagement framing initially admits. The framework documents the existing analyst surface explicitly to avoid recommending a stack that requires retraining the entire SOC.

Component 6 — Storage tier

Retention drives tiering. Tiering drives cost predictability.

S3 (Standard, Infrequent Access, Glacier), MinIO, Wasabi, NetApp, Dell ECS. Scored on:

  • Hot/warm/cold tiering support
  • Time-travel and point-in-time-restore semantics
  • Cost predictability and overage behavior
  • Compression compatibility (workload-dependent, first-party measured, Tier B, single host: ZSTD delivers ~8.5× on the flat Zeek benchmark, ~7.9× on an EDR/Sysmon-style corpus, and drops to ~2.6× on high-entropy payloads such as base64 blobs and hashes — a single flat multiplier understates the range)
  • Egress cost behavior for cross-region or cross-cloud access

The S4 retention horizon question maps directly to tiering shape. Below one year of retention, single-tier is acceptable. One to two years, hot/warm tiering is recommended. Two-plus years, hot/warm/cold becomes architecturally mandatory or compliance reporting becomes a multi-hour operation. The cost modeling lives in the engagement deliverable, not on this page; the tiering shape decision lives here.

Component 7 — Streaming pipeline (storage backbone + compute)

Connects ingestion to the lake. Where store-twice gets decided.

The streaming layer connects ingestion (Component 4) to lakehouse storage (Component 1) and powers real-time detection, and it splits into two tightly-interacting sub-categories. The storage backbone (Kafka, Apache Fluss as Iceberg-native streaming storage, Kafka-to-Iceberg bridges like Tableflow) and the compute (Apache Flink for stateful processing, Spark Structured Streaming when already on Spark, RisingWave for streaming SQL). Scored on:

The unresolved tension this component answers is the mismatch between Kafka's offset-based partitioning and Iceberg's analytical partitioning, which is what forces the store-twice pattern today. The most likely 2026–2028 resolution is a hybrid tiered architecture, a ClickHouse hot tier alongside an Iceberg long tier, with Fluss or Tableflow as the bridge that lets a single write serve both.

Component 8 — Agentic / authoring / interface

The deepest abstraction. Where ownability matters most.

The notebook and authoring foundation plus the agentic / MCP layer the analyst actually works through. This is the layer where the abstraction is deepest and the practitioner-ownability question is sharpest, because the agentic rush is pushing the default toward phone-home convenience. Scored on the practitioner-ownability axis applied to this layer:

  • Air-gappable + self-hostable + legible (a good MCP teaches the schema and the operations, runnable offline — the opposite of legibility-by-abstraction)
  • The two-axis MCP test: does a data-source vendor's MCP encode admin/infra practice and analyst/data practice
  • The Data-Source MCP Ownership Score (DSMOS), reconstructable from objective fields rather than asserted
  • Operational maturity (GA vs. preview — the agentic products skew preview / announced)
  • Cost-to-serve (self-host infrastructure $ vs. SaaS per-seat / per-query at volume)

The market has no independent force defining or scoring practitioner-ownability at this layer, since vendors could ship air-gappable, self-hostable, legible tooling but nothing makes them, which is exactly why scoring it is the fair-broker move, and why it is most valuable here where the abstraction is deepest. The per-vendor DSMOS scores are published with the matrix: of 31 data-source producers, the 15 A-grades are all open, on-prem tools; the best commercial-SaaS producer caps at B on the air-gap gate (CrowdStrike, 77); and the 3 Gartner NDR Leaders with no MCP at all score F (distribution: A 15 · B 6 · C 7 · F 3). The engagement applies the rubric to the client's own sources.

Each component carries its own elimination math.

The vendor-evidence page shows how these criteria get graded, tier by tier, across the thirteen scored candidate files. Decision records cover the meta-decisions about how the matrix itself is run.