Bitmap-Native Analytical SQL
Status: Working paper v0.2. Last updated: 2026-08-21
This paper is an engineering narrative for QuantaStream. It is not a
legal analysis or patent claim chart. Its job is to preserve the
architectural thesis and connect that thesis to the current validation
work.
Executive Summary
QuantaStream is built around a simple idea:
Bitmap-native analytical SQL.
The database should accept familiar SQL, but the physical execution
model should avoid treating SQL as an instruction to eagerly assemble
rows. Instead, queries are lowered into constraints over compressed
bitmap domains. Filters, joins, semi-joins, anti-joins, grouping inputs,
and same-row comparisons become set operations over row-number domains,
bit-sliced indexes, dictionaries, and relationship vectors. Rows are
rehydrated only after the candidate sets have already been narrowed.
This is the core distinction: QuantaStream is not a row engine with
bitmap indexes bolted on. It is a bitmap-domain execution engine with a
SQL front end.
QuantaStream uses native bitmap and bit-sliced indexes whose storage
and processing costs scale predictably with indexed cardinality and data
volume. This design is particularly effective for filtering,
aggregation, and set-oriented analysis common in streaming analytics.
Unlike architectures centered on row lookup, compaction, or repeated
column scans, QuantaStream can combine filters and relationships directly
through bitmap algebra, defer row materialization until results are
needed, and reuse the same indexed representation for ingestion and
interactive queries.
That thesis is now backed by a more complete first-release posture: a
single-node engine with a MySQL-compatible endpoint, descriptor-driven
schemas, views, derived tables, temporary tables, CTAS materialization,
prepared statement coverage, Workbench-friendly metadata, local
WAL/backup/restore tooling, support bundles, and repeatable TPC-H
validation at multiple scale factors.
Motivation
Traditional relational engines are extraordinarily capable, but their
physical operators often revolve around moving, hashing, sorting, and
materializing tuples. Modern column stores improve locality and
compression, but many still pay substantial costs once a query shape
requires joins, correlated membership, subqueries, grouped aggregates,
or repeated domain translation between fact and dimension tables.
QuantaStream takes a different route. It tries to keep the query in
compressed set form for as long as possible:
AND becomes bitmap intersection.
OR becomes bitmap union.
NOT, anti-join, and NOT IN become bitmap
difference.
- Equality and range predicates over numeric, time, and encoded string
domains produce candidate bitmaps.
- Join relationships are represented as vectors that translate
candidate sets between row-number domains.
- Aggregation operates after candidate reduction, materializing only
the fields required for grouping, ordering, aggregate inputs, residual
predicates, and final projection.
The result is an execution model where SQL becomes constraint
propagation over compressed bitmap domains.
Core Vocabulary
QuantaStream needs crisp terms because bitmap engines and relational
databases use similar words differently.
rownum : The tuple identifier within a table. This is
the relational row identity used by the query engine. It is not the same
as a bitmap "row id" in legacy naming.
bitmap : A compressed set of rownums, usually
represented with Roaring bitmaps. A bitmap answers the question "which
rows are currently candidates?"
standard bitmap : A bitmap attached to a discrete value.
Low-cardinality enum values and boolean states naturally fit here.
multiplicity : The column cardinality model.
scalar means one logical value per row. set
means a row may belong to multiple value bitmaps for the same
column.
BSI : A bit-sliced index. A BSI represents numeric,
timestamp, or encoded string values in a way that supports equality,
range, comparison, and aggregate-like operations without first
rehydrating all original values.
StringEnum : A dictionary-backed low-cardinality string
representation. Values map to stable dictionary ids, and each id can be
represented as a standard bitmap.
backing string : A high-cardinality string
representation where the bitmap/BSI path carries a compact comparable
value and the original value is available through KVStore when
rehydration is needed.
relationship vector : A BSI that maps rownums in one
table domain to rownums in another table domain. In practice this is the
engine's native representation for parent-child relationships.
seed bitmap : A first-class existence/candidate bitmap
for a table or shard. A seed answers "what rows exist?" without
synthesizing the answer through a large number of independent predicate
fragments.
Data Representation
The core representation model is intentionally pluggable, but the
primitives are few:
- Low-cardinality strings and booleans are represented as standard
bitmaps.
- Numeric values are represented as numeric BSIs.
- Timestamps are represented as timestamp BSIs with an explicit
granularity.
- High-cardinality strings can be represented through compact BSI/hash
lookup plus backing storage.
- Relationship columns are represented as vector BSIs.
- Existence can be represented as a table or shard seed bitmap.
The goal is to reduce one-off physical types. A schema should
describe the semantics of a column and the data representation choices:
cardinality, multiplicity, time granularity, numeric precision, prefix
length, max length, searchability, dictionary behavior, and rehydration
policy.
That lets the planner reason about a column in terms of
capabilities:
- Can this column produce an equality bitmap?
- Can it produce a range bitmap?
- Can it participate in prefix matching?
- Can it perform same-row BSI comparisons?
- Does it require dictionary lookup for original values?
- Does it need KVStore rehydration?
- Can it be used as a relationship vector?
The optimizer should make decisions from capabilities, not from
historical type names.
Selection Algebra
A single-table predicate lowers into a bitmap expression:
where age >= 30 and status in ('ACTIVE', 'TRIAL')
becomes:
INTERSECT(
BSI_RANGE(age, 30, +inf),
UNION(
BITMAP(status = 'ACTIVE'),
BITMAP(status = 'TRIAL')
)
)
The result is a candidate rownum bitmap. No rows need to exist yet.
The engine can also represent !=, NOT IN, and
anti-membership as differences from a seed:
DIFFERENCE(
SEED(customers),
BITMAP(status = 'DELETED')
)
This is important because absence and negation are not afterthoughts.
They are native set operations.
Boolean Algebra
Boolean predicate lowering should preserve SQL semantics while
favoring bitmap algebra:
A AND B -> INTERSECT(A, B)
A OR B -> UNION(A, B)
NOT A -> DIFFERENCE(seed, A)
A AND NOT B -> DIFFERENCE(A, B)
The planner must respect parentheses, three-valued SQL semantics
where applicable, and NULL behavior. The physical target, however,
remains simple: produce candidate bitmaps and combine them with set
algebra.
This gives the optimizer a useful freedom: it can order selective
bitmap reductions before expensive residual scans, and it can avoid
materializing columns that only exist to reduce candidate sets.
BSI Algebra
BSIs extend bitmap selection beyond discrete value membership.
For a single BSI column:
- Equality produces a bitmap of rows whose encoded value equals a
literal.
- Range produces a bitmap of rows inside a lower/upper bound.
- Greater-than and less-than variants produce directional candidate
bitmaps.
- Batch equality can combine many equality probes into one membership
result.
For two BSI columns in the same rownum domain:
where l_receiptdate > l_commitdate
should become:
BSI_COMPARE_GT(l_receiptdate, l_commitdate)
That returns a bitmap directly. The important point is that same-row
field comparison should not require materializing both values for every
candidate row and comparing them in Go. That is temporary implementation
scaffolding, not the desired algebra.
This is one reason the Roaring BSI work matters. APIs such as
BSI-to-BSI comparison let QuantaStream express query intent at the
correct physical level.
Join Algebra
The join model is the heart of QuantaStream.
In a conventional relational execution plan, a join often constructs
joined tuples or a hash structure over one side and probes from the
other. In QuantaStream, the preferred physical operation is
relationship-vector constraint propagation.
This is the direct architectural descendant of the bitmap-join patent
work. The patent is not merely background IP; it is the foundation for
treating joins as vector-based translation between bitmap rownum domains
rather than tuple assembly. QuantaStream's relationship-vector execution
model is the modern engineering expression of that idea.
For a parent-child relationship:
orders.o_orderkey -> lineitem.l_orderkey
QuantaStream can store a relationship vector BSI:
lineitem rownum -> orders rownum
This gives the planner two directions of movement:
- Parent-to-child: apply an orders candidate set to the lineitem
relationship vector and produce matching lineitem rownums.
- Child-to-parent: transpose or reduce a lineitem candidate set
through the relationship vector and produce matching orders
rownums.
That means join execution can be viewed as repeatedly tightening
candidate sets for each table role:
candidates(customer) -> relationship vector -> candidates(orders)
candidates(orders) -> relationship vector -> candidates(lineitem)
candidates(lineitem) -> relationship vector -> candidates(orders)
Each table role keeps its own rownum domain. The planner must know
when a set crosses rownum domains, and it must translate explicitly
through a relationship vector. A bitmap from one table is never casually
compared to a bitmap from another table.
Semi-Joins and Anti-Joins
Semi-joins and anti-joins fall naturally out of bitmap algebra.
EXISTS is membership:
outer candidates INTERSECT rows_with_matching_inner
NOT EXISTS is difference:
outer candidates DIFFERENCE rows_with_matching_inner
This is strategically important. SQL subqueries, IN,
NOT IN, EXISTS, NOT EXISTS, and
certain anti-join forms can all be routed toward the same small set of
bitmap primitives rather than building separate execution paths for
every SQL surface form.
Aggregation and Late
Materialization
Aggregation should happen after candidate reduction.
For a grouped aggregate:
select l_orderkey, sum(l_extendedprice)
from lineitem
where l_shipdate < date '1995-03-15'
group by l_orderkey
the physical path should be:
- Produce a candidate bitmap from the date predicate.
- Materialize only
l_orderkey and
l_extendedprice for those candidates.
- Accumulate grouped state.
- Materialize only final output fields.
The same model applies across joins. Relationship vectors reduce the
graph first; grouping fields, aggregate inputs, residual predicate
fields, and final projection fields are hydrated afterward.
That is the discipline: use bitmaps to decide which rows matter, then
hydrate only the values needed to answer the query.
Optimizer Direction
The optimizer's long-term job is to choose a reduction order over a
graph of bitmap domains.
For star and snowflake schemas, small dimension filters can produce
compact candidate sets. Relationship vectors can then push those sets
into the fact table domain before fact table materialization. In the
other direction, a selective time range or fact predicate can shrink the
fact table and then pull constraints back toward dimensions.
The optimizer should eventually reason about:
- Cardinality of each table role.
- Selectivity of predicates.
- Cost of relationship-vector projection.
- Cost of BSI range and comparison operations.
- Cost of materialization by representation type.
- Cost of residual predicates.
- Time-shard and node locality.
- Whether a seed bitmap is already cached.
- Whether a candidate set is cheap enough to pass to a node.
- Whether a broad node-side seed or shard-local filter is
cheaper.
This is where QuantaStream may become genuinely distinct. The
optimizer is not just choosing join order. It is choosing the order in
which compressed constraints should flow through a graph.
TPC-H as an Architectural
Microcosm
TPC-H is useful because it contains many of the shapes QuantaStream
cares about:
- A large fact-like table:
lineitem.
- Header/fact relationship:
orders.
- Dimensions:
customer, supplier,
part, nation, region.
- A bridge-like table:
partsupp.
- Date ranges, string dictionaries, numeric BSIs, grouped aggregates,
correlated membership, same-row comparisons, and multi-hop joins.
The current work has shown that these query shapes can be represented
by the SQL, planner, runtime, relationship-vector, and materialization
stack. This is no longer only a local smoke-test signal: the same query
families have been loaded, profiled, and compared across single-node and
distributed runs.
Benchmark Checkpoint
The latest AWS distributed checkpoint was captured on 2026-08-15
using three r7i.4xlarge data nodes plus a
bench-runner, SQLRunner direct cluster RPC, 12 loader
workers, and load batch size 1000.
TPC-H SF1, SF2, and SF3 all loaded and passed the read-only and
profile suites. lineitem load elapsed times were:
| Scale | lineitem rows | Load elapsed |
| SF1 | 6,001,215 | 419s |
| SF2 | 11,997,996 | 777s |
| SF3 | 17,996,609 | 1302s |
Representative profile medians from the same distributed
checkpoint:
| Query shape | SF1 | SF2 | SF3 |
| Q3 grouped revenue with order fields | 1.936s | 3.791s | 5.465s |
| Q5 same-nation combined graph count | 3.252s | 5.633s | 8.355s |
| Q19 formal discounted revenue | 0.375s | 0.467s | 0.586s |
The single-node MySQL compatibility lane also has an SF1 comparison
against a 16-vCPU MySQL reference host. The important signal is not that
every query shape is faster. It is that bitmap-native execution is
already strong on the analytical shapes that match the architecture:
broad grouping, selective bitmap reduction, and star-style relationship
traversal. In that checkpoint, QuantaStream's single-node endpoint ran
the compact Q5 combined graph count in 1.710s versus MySQL at 10.996s,
Q3 grouped revenue limit in 2.228s versus 6.315s, Q1 grouped lineitem
shape in 0.288s versus 2.293s, and Q6 discounted revenue in 0.475s
versus 1.384s.
These numbers are checkpoints, not permanent claims. Their value is
that they are reproducible, tied to SQLRunner reports, and specific
enough to protect the top-line performance baseline while compatibility
work continues.
Patent Context
The project has prior IP context around bitmap representation and
bitmap-based query processing.
The granted Disney patent US11392606, "System and method
for converting user data from disparate sources to bitmap data,"
describes converting data from multiple sources into a conformed data
set and then into bitmap-oriented representation. The public patent
record lists Dakshinamurthi Rajavel, Guy Molinari, Ryan J. Junk, and
Rajagopal Baskaran as inventors.
The related Disney join patent is US12086136,
"Techniques for Executing Join Operations Using Bitmap Indices." The
public record lists Guy Molinari as the inventor, Disney Enterprises,
Inc. as the assignee, a February 4, 2020 filing date, and a September
10, 2024 grant date. This patent is critical because it is the
foundation of vector-based joins: join processing can be expressed by
producing child or parent result bitmaps and translating those sets
through BSI-backed relationship structures.
These references should be treated as historical and strategic
context. They do not define the full QuantaStream design, and this paper
does not attempt to interpret patent scope. The current QuantaStream
architecture adds a concrete SQL compatibility surface,
relationship-vector execution, late materialization, native runtime
inspection, direct and standard deployment modes, and an implementation
path built around modern Roaring bitmap/BSI primitives.
Relationship to Roaring
Bitmaps
Roaring bitmaps are the practical compression foundation. They
provide a well-known compressed bitmap representation with fast set
operations, and the Roaring ecosystem is the right place for core BSI
improvements that are generally useful beyond QuantaStream.
QuantaStream should avoid private forks of fundamental bitmap
algorithms where possible. When the BSI library needs better primitives,
the ideal path is to produce polished, benchmark-backed contributions
upstream. That includes:
- Faster
BatchEqual-style membership operations.
- BSI-to-BSI comparison operators.
- More professional BSI tests and benchmarks.
- Clear documentation of where 64-bit BSI behavior differs from 32-bit
BSI behavior.
The database and the bitmap library should evolve together, but with
clean boundaries. QuantaStream should express database intent. Roaring
should expose correct, efficient bitmap and BSI primitives.
What Makes This Different
The differentiator is not simply "uses bitmaps." Many systems use
bitmap indexes.
The differentiator is that QuantaStream treats compressed bitmap
domains as the native query execution substrate:
- SQL is parsed and planned into bitmap-capable intermediate
forms.
- Table roles remain separate rownum domains until explicitly
translated.
- Relationship vectors perform domain translation.
- Boolean logic is lowered into set algebra.
- Same-row comparisons are intended to be BSI comparisons, not row
scans.
- Semi-joins and anti-joins become membership and difference.
- Aggregation is fed by reduced candidate sets.
- Materialization is late and field-specific.
- Runtime inspection exposes the physical algebra used to answer a
query.
The guiding line is worth preserving:
QuantaStream does not move rows through joins; it moves constraints
through compressed bitmap domains until only the necessary rows
remain.
Current Limits
The architecture is promising, and the current product surface is much
more concrete than the first draft of this paper. The remaining limits
are now release gates and follow-on engineering tracks:
- The cost optimizer is still early, even though several star-query
reduction and relationship-artifact improvements are already
validated.
- QuantaStream supports a focused MySQL-compatible SQL surface, not a
full MySQL clone.
- TPC-H SF1/SF2/SF3 benchmarks are repeatable, but each release
candidate still needs a clean performance pass before public numbers are
refreshed.
- Batch loading is validated at SF1-SF3; live streaming ingest needs
its own product-grade demo and recovery story.
- Local WAL, backup, restore, support bundles, and operator preflights
are now part of the 1.0 posture; distributed backup barriers and cloud
storage adapters remain follow-on work.
- BSI library work remains an optimization frontier, but the current
same-row comparison path is available from the selected Roaring
dependency.
- High-cardinality string representation still needs the StringLexBSI
design to mature.
- Global cross-session query caching remains a future feature, not a
crutch the current engine requires.
These limits are healthy. They keep the project honest.
Near-Term Proof Points
The most useful next proof points are:
- Keep the TPC-H SF1/SF2/SF3 benchmark lane repeatable across release
candidates.
- Finish release-grade WAL, backup, restore, and startup replay
validation.
- Keep the binary artifact, getting-started runbook, support bundle,
and
doctor local path boring and repeatable.
- Expand MySQL client compatibility with Java/JDBC, Node.js, and
Tableau-style metadata coverage.
- Build the first streaming ingest demo around real insert/update
pressure and recovery semantics.
- Continue reducing materialization where a bitmap or BSI primitive
can answer directly.
- Continue cost-based optimization from table cardinality, predicate
selectivity, relationship-vector reduction cost, and node locality.
Conclusion
QuantaStream's core algebra is compact:
selection -> bitmap production
AND -> intersection
OR -> union
NOT -> difference
range/equality -> BSI or dictionary bitmap
same-row cmp -> BSI-to-BSI comparison
join -> relationship-vector domain translation
EXISTS -> membership
NOT EXISTS -> difference
aggregation -> reduced candidates plus late materialization
That compact algebra is the project.
The product expression is SQL. The execution expression is bitmap
algebra. The engineering challenge is to make those two worlds line up
cleanly enough that a user can write ordinary analytical SQL while the
engine quietly does something unusually powerful underneath.
References
SQL analítico nativo de bitmaps
Estado: documento de trabajo v0.2. Última actualización:
2026-08-21
Este documento es una narrativa de ingeniería para QuantaStream. No
es un análisis legal ni un cuadro de reivindicaciones de patente. Su
propósito es preservar la tesis arquitectónica y conectar esa tesis con
el trabajo actual de validación.
Resumen ejecutivo
QuantaStream se construye alrededor de una idea simple:
SQL analítico nativo de bitmaps.
La base de datos debe aceptar SQL familiar, pero el modelo físico de
ejecución debe evitar tratar SQL como una instrucción para ensamblar
filas de forma anticipada. En cambio, las consultas se reducen a
restricciones sobre dominios de bitmaps comprimidos. Filtros, joins,
semi-joins, anti-joins, entradas de agrupación y comparaciones dentro de
la misma fila se convierten en operaciones de conjuntos sobre dominios
de números de fila, índices bit-sliced, diccionarios y vectores de
relación. Las filas se rehidratan solo después de que los conjuntos
candidatos ya se han reducido.
Esa es la distinción central: QuantaStream no es un motor de filas
con índices bitmap añadidos encima. Es un motor de ejecución sobre
dominios bitmap con una interfaz SQL.
QuantaStream utiliza bitmaps nativos e índices bit-sliced cuyos costos
de almacenamiento y procesamiento escalan de manera predecible con la
cardinalidad indexada y el volumen de datos. Este diseño es especialmente
eficaz para filtrado, agregación y análisis orientado a conjuntos, comunes
en la analítica de streaming. A diferencia de arquitecturas centradas en
búsquedas de filas, compactación o escaneos repetidos de columnas,
QuantaStream puede combinar filtros y relaciones directamente mediante
álgebra de bitmaps, aplazar la materialización de filas hasta que se
necesiten los resultados y reutilizar la misma representación indexada
para ingestión y consultas interactivas.
Esa tesis ahora está respaldada por una postura de primera versión más
completa: un motor de nodo único con endpoint compatible con MySQL,
esquemas declarativos, views, tablas derivadas, tablas temporales,
materialización CTAS, cobertura de prepared statements, metadata amigable
para Workbench, herramientas locales de WAL/backup/restore, support
bundles y validación TPC-H repetible en varios scale factors.
Motivación
Los motores relacionales tradicionales son extraordinariamente
capaces, pero sus operadores físicos suelen girar alrededor de mover,
hashear, ordenar y materializar tuplas. Los almacenes columnares modernos
mejoran la localidad y la compresión, pero muchos siguen pagando costos
importantes cuando una consulta requiere joins, membresía correlacionada,
subconsultas, agregados agrupados o traducción repetida de dominios
entre tablas de hechos y dimensiones.
QuantaStream toma otro camino. Intenta mantener la consulta en forma
de conjuntos comprimidos durante el mayor tiempo posible:
AND se convierte en intersección de bitmaps.
OR se convierte en unión de bitmaps.
NOT, anti-join y NOT IN se convierten en
diferencia de bitmaps.
- Los predicados de igualdad y rango sobre dominios numéricos,
temporales y de strings codificados producen bitmaps candidatos.
- Las relaciones de join se representan como vectores que traducen
conjuntos candidatos entre dominios de números de fila.
- La agregación opera después de la reducción de candidatos,
materializando solo los campos requeridos para agrupar, ordenar, alimentar
agregados, evaluar predicados residuales y producir la proyección
final.
El resultado es un modelo de ejecución donde SQL se convierte en
propagación de restricciones sobre dominios de bitmaps comprimidos.
Vocabulario central
QuantaStream necesita términos precisos porque los motores bitmap y
las bases de datos relacionales usan palabras parecidas con significados
distintos.
rownum : El identificador de tupla dentro de una tabla.
Es la identidad relacional de fila utilizada por el motor de consultas.
No es lo mismo que un "row id" de bitmap en la nomenclatura heredada.
bitmap : Un conjunto comprimido de rownums,
normalmente representado con Roaring bitmaps. Un bitmap responde la
pregunta "¿qué filas son candidatas actualmente?"
standard bitmap : Un bitmap asociado a un valor
discreto. Los valores enum de baja cardinalidad y los estados booleanos
encajan naturalmente aquí.
multiplicity : El modelo de cardinalidad de una columna.
scalar significa un valor lógico por fila.
set significa que una fila puede pertenecer a múltiples
bitmaps de valor para la misma columna.
BSI : Un índice bit-sliced. Un BSI representa valores
numéricos, timestamps o strings codificados de una forma que permite
igualdad, rango, comparación y operaciones similares a agregación sin
rehidratar primero todos los valores originales.
StringEnum : Una representación de strings de baja
cardinalidad respaldada por diccionario. Los valores se asignan a ids de
diccionario estables, y cada id puede representarse como un standard
bitmap.
backing string : Una representación de strings de alta
cardinalidad donde la ruta bitmap/BSI transporta un valor comparable
compacto y el valor original está disponible a través de KVStore cuando
se necesita rehidratación.
relationship vector : Un BSI que mapea rownums de un
dominio de tabla a rownums de otro dominio de tabla. En la práctica, es
la representación nativa del motor para relaciones padre-hijo.
seed bitmap : Un bitmap de existencia/candidatos de
primera clase para una tabla o shard. Una seed responde "¿qué filas
existen?" sin sintetizar la respuesta a través de una gran cantidad de
fragmentos de predicados independientes.
Representación de datos
El modelo central de representación es intencionalmente conectable,
pero sus primitivas son pocas:
- Strings de baja cardinalidad y booleanos se representan como
standard bitmaps.
- Valores numéricos se representan como BSIs numéricos.
- Timestamps se representan como BSIs de timestamp con una granularidad
explícita.
- Strings de alta cardinalidad pueden representarse mediante lookup
compacto BSI/hash más almacenamiento de respaldo.
- Columnas de relación se representan como BSIs vectoriales.
- La existencia puede representarse como una seed bitmap de tabla o de
shard.
El objetivo es reducir tipos físicos especiales. Un esquema debe
describir la semántica de una columna y las decisiones de representación:
cardinalidad, multiplicidad, granularidad temporal, precisión numérica,
longitud de prefijo, longitud máxima, capacidad de búsqueda, comportamiento
de diccionario y política de rehidratación.
Eso permite que el planner razone sobre una columna en términos de
capacidades:
- ¿Puede esta columna producir un bitmap de igualdad?
- ¿Puede producir un bitmap de rango?
- ¿Puede participar en matching por prefijo?
- ¿Puede realizar comparaciones BSI dentro de la misma fila?
- ¿Requiere lookup de diccionario para los valores originales?
- ¿Necesita rehidratación desde KVStore?
- ¿Puede usarse como un relationship vector?
El optimizador debe tomar decisiones desde capacidades, no desde
nombres históricos de tipos.
Álgebra de selección
Un predicado sobre una sola tabla se reduce a una expresión bitmap:
where age >= 30 and status in ('ACTIVE', 'TRIAL')
se convierte en:
INTERSECT(
BSI_RANGE(age, 30, +inf),
UNION(
BITMAP(status = 'ACTIVE'),
BITMAP(status = 'TRIAL')
)
)
El resultado es un bitmap candidato de rownums. Todavía no hace falta
que existan filas materializadas. El motor también puede representar
!=, NOT IN y anti-membresía como diferencias
desde una seed:
DIFFERENCE(
SEED(customers),
BITMAP(status = 'DELETED')
)
Esto es importante porque la ausencia y la negación no son ideas
secundarias. Son operaciones de conjuntos nativas.
Álgebra booleana
La reducción de predicados booleanos debe preservar la semántica SQL
mientras favorece el álgebra bitmap:
A AND B -> INTERSECT(A, B)
A OR B -> UNION(A, B)
NOT A -> DIFFERENCE(seed, A)
A AND NOT B -> DIFFERENCE(A, B)
El planner debe respetar paréntesis, semántica SQL de tres valores
cuando aplique, y comportamiento de NULL. El objetivo físico, sin
embargo, sigue siendo simple: producir bitmaps candidatos y combinarlos
con álgebra de conjuntos.
Esto le da al optimizador una libertad útil: puede ordenar reducciones
bitmap selectivas antes de scans residuales costosos, y puede evitar
materializar columnas que solo existen para reducir conjuntos
candidatos.
Álgebra BSI
Los BSIs extienden la selección bitmap más allá de la membresía en
valores discretos.
Para una sola columna BSI:
- La igualdad produce un bitmap de filas cuyo valor codificado es igual
a un literal.
- El rango produce un bitmap de filas dentro de un límite inferior y
superior.
- Las variantes mayor-que y menor-que producen bitmaps candidatos
direccionales.
- La igualdad en lote puede combinar muchas sondas de igualdad en un
solo resultado de membresía.
Para dos columnas BSI en el mismo dominio de rownums:
where l_receiptdate > l_commitdate
debería convertirse en:
BSI_COMPARE_GT(l_receiptdate, l_commitdate)
Eso devuelve un bitmap directamente. El punto importante es que una
comparación de campos dentro de la misma fila no debería requerir
materializar ambos valores para cada fila candidata y compararlos en Go.
Eso es andamiaje temporal de implementación, no el álgebra deseada.
Esta es una razón por la que el trabajo de Roaring BSI importa. APIs
como la comparación BSI-a-BSI permiten que QuantaStream exprese la
intención de la consulta en el nivel físico correcto.
Álgebra de joins
El modelo de join es el corazón de QuantaStream.
En un plan convencional de ejecución relacional, un join suele
construir tuplas unidas o una estructura hash sobre un lado y hacer
probes desde el otro. En QuantaStream, la operación física preferida es
la propagación de restricciones mediante relationship vectors.
Este es el descendiente arquitectónico directo del trabajo de patente
sobre joins con bitmaps. La patente no es simplemente IP de fondo; es la
base para tratar joins como traducción vectorial entre dominios de
rownums bitmap, en lugar de ensamblaje de tuplas. El modelo de ejecución
con relationship vectors de QuantaStream es la expresión moderna de
ingeniería de esa idea.
Para una relación padre-hijo:
orders.o_orderkey -> lineitem.l_orderkey
QuantaStream puede almacenar un BSI relationship vector:
lineitem rownum -> orders rownum
Esto le da al planner dos direcciones de movimiento:
- Padre-a-hijo: aplicar un conjunto candidato de orders al relationship
vector de lineitem y producir los rownums de lineitem correspondientes.
- Hijo-a-padre: transponer o reducir un conjunto candidato de lineitem
a través del relationship vector y producir los rownums de orders
correspondientes.
Eso significa que la ejecución de joins puede verse como un proceso de
ajustar repetidamente los conjuntos candidatos para cada rol de tabla:
candidates(customer) -> relationship vector -> candidates(orders)
candidates(orders) -> relationship vector -> candidates(lineitem)
candidates(lineitem) -> relationship vector -> candidates(orders)
Cada rol de tabla conserva su propio dominio de rownums. El planner
debe saber cuándo un conjunto cruza dominios de rownums, y debe
traducirlo explícitamente a través de un relationship vector. Un bitmap
de una tabla nunca se compara casualmente con un bitmap de otra tabla.
Semi-joins y anti-joins
Los semi-joins y anti-joins surgen naturalmente del álgebra bitmap.
EXISTS es membresía:
outer candidates INTERSECT rows_with_matching_inner
NOT EXISTS es diferencia:
outer candidates DIFFERENCE rows_with_matching_inner
Esto es estratégicamente importante. Subconsultas SQL,
IN, NOT IN, EXISTS,
NOT EXISTS y ciertas formas de anti-join pueden encaminarse
hacia el mismo conjunto pequeño de primitivas bitmap, en lugar de crear
rutas de ejecución separadas para cada forma superficial de SQL.
Agregación y
materialización tardía
La agregación debe ocurrir después de la reducción de candidatos.
Para un agregado agrupado:
select l_orderkey, sum(l_extendedprice)
from lineitem
where l_shipdate < date '1995-03-15'
group by l_orderkey
la ruta física debería ser:
- Producir un bitmap candidato desde el predicado de fecha.
- Materializar solo
l_orderkey y
l_extendedprice para esos candidatos.
- Acumular el estado agrupado.
- Materializar solo los campos finales de salida.
El mismo modelo aplica a través de joins. Los relationship vectors
reducen primero el grafo; los campos de agrupación, las entradas de
agregados, los campos de predicados residuales y los campos de proyección
final se hidratan después.
Esa es la disciplina: usar bitmaps para decidir qué filas importan, y
luego hidratar solo los valores necesarios para responder la consulta.
Dirección del optimizador
El trabajo de largo plazo del optimizador es elegir un orden de
reducción sobre un grafo de dominios bitmap.
Para esquemas estrella y snowflake, filtros pequeños de dimensiones
pueden producir conjuntos candidatos compactos. Los relationship vectors
pueden empujar esos conjuntos hacia el dominio de la tabla de hechos
antes de materializarla. En la otra dirección, un rango temporal
selectivo o un predicado de hechos puede reducir la tabla de hechos y
luego jalar restricciones de vuelta hacia las dimensiones.
El optimizador eventualmente debería razonar sobre:
- Cardinalidad de cada rol de tabla.
- Selectividad de predicados.
- Costo de proyección mediante relationship vector.
- Costo de operaciones BSI de rango y comparación.
- Costo de materialización por tipo de representación.
- Costo de predicados residuales.
- Localidad temporal de shards y nodos.
- Si una seed bitmap ya está en caché.
- Si un conjunto candidato es suficientemente barato para enviarse a
un nodo.
- Si una seed amplia del lado del nodo o un filtro local al shard es
más barato.
Aquí es donde QuantaStream puede volverse genuinamente distinto. El
optimizador no solo está eligiendo orden de joins. Está eligiendo el
orden en que las restricciones comprimidas deben fluir a través de un
grafo.
TPC-H como microcosmos
arquitectónico
TPC-H es útil porque contiene muchas de las formas que le importan a
QuantaStream:
- Una tabla grande tipo hechos:
lineitem.
- Relación encabezado/hecho:
orders.
- Dimensiones:
customer, supplier,
part, nation, region.
- Una tabla tipo puente:
partsupp.
- Rangos de fechas, diccionarios de strings, BSIs numéricos,
agregados agrupados, membresía correlacionada, comparaciones dentro de
la misma fila y joins de múltiples saltos.
El trabajo actual ha mostrado que estas formas de consulta pueden
representarse mediante la pila SQL, planner, runtime, relationship-vector
y materialización. Esto ya no es solo una señal de smoke test local: las
mismas familias de consultas se han cargado, perfilado y comparado en
ejecuciones de nodo único y distribuidas.
Checkpoint de benchmarks
El checkpoint distribuido más reciente en AWS se capturó el
2026-08-15 usando tres nodos de datos r7i.4xlarge más un
bench-runner, SQLRunner con RPC directo al cluster, 12
workers de carga y batch size 1000.
TPC-H SF1, SF2 y SF3 cargaron correctamente y pasaron las suites
read-only y profile. Los tiempos de carga de lineitem
fueron:
| Scale | Filas de lineitem | Tiempo de carga |
| SF1 | 6,001,215 | 419s |
| SF2 | 11,997,996 | 777s |
| SF3 | 17,996,609 | 1302s |
Medianas representativas de profile desde el mismo checkpoint
distribuido:
| Forma de consulta | SF1 | SF2 | SF3 |
| Q3 grouped revenue con campos de order | 1.936s | 3.791s | 5.465s |
| Q5 same-nation combined graph count | 3.252s | 5.633s | 8.355s |
| Q19 formal discounted revenue | 0.375s | 0.467s | 0.586s |
La ruta de compatibilidad MySQL de nodo único también tiene una
comparación SF1 contra un host MySQL de referencia con 16 vCPU. La señal
importante no es que cada forma de consulta sea más rápida. Es que la
ejecución bitmap-native ya es fuerte en las formas analíticas que
coinciden con la arquitectura: agrupación amplia, reducción bitmap
selectiva y recorrido de relaciones estilo star schema. En ese
checkpoint, el endpoint de nodo único de QuantaStream ejecutó el Q5
combined graph count compacto en 1.710s frente a MySQL en 10.996s, Q3
grouped revenue limit en 2.228s frente a 6.315s, Q1 grouped lineitem
shape en 0.288s frente a 2.293s, y Q6 discounted revenue en 0.475s
frente a 1.384s.
Estos números son checkpoints, no afirmaciones permanentes. Su valor
es que son reproducibles, están ligados a reportes de SQLRunner y son lo
suficientemente específicos para proteger el baseline de performance de
alto nivel mientras continúa el trabajo de compatibilidad.
Contexto de patentes
El proyecto tiene contexto previo de IP alrededor de representación
bitmap y procesamiento de consultas basado en bitmaps.
La patente concedida a Disney US11392606, "System and
method for converting user data from disparate sources to bitmap data",
describe convertir datos de múltiples fuentes en un conjunto de datos
conformado y luego en una representación orientada a bitmaps. El registro
público de la patente lista a Dakshinamurthi Rajavel, Guy Molinari, Ryan
J. Junk y Rajagopal Baskaran como inventores.
La patente relacionada de Disney sobre joins es
US12086136, "Techniques for Executing Join Operations Using
Bitmap Indices." El registro público lista a Guy Molinari como inventor,
a Disney Enterprises, Inc. como cesionaria, una fecha de presentación del
4 de febrero de 2020 y una fecha de concesión del 10 de septiembre de
2024. Esta patente es crítica porque es la base de los joins basados en
vectores: el procesamiento de joins puede expresarse produciendo bitmaps
resultado del lado hijo o padre y traduciendo esos conjuntos a través de
estructuras de relación respaldadas por BSI.
Estas referencias deben tratarse como contexto histórico y
estratégico. No definen el diseño completo de QuantaStream, y este
documento no intenta interpretar el alcance de las patentes. La
arquitectura actual de QuantaStream añade una superficie concreta de
compatibilidad SQL, ejecución con relationship vectors, materialización
tardía, inspección nativa de runtime, modos de despliegue direct y
standard, y una ruta de implementación basada en primitivas modernas de
Roaring bitmap/BSI.
Relación con Roaring Bitmaps
Roaring bitmaps son la base práctica de compresión. Proveen una
representación de bitmap comprimido bien conocida con operaciones de
conjuntos rápidas, y el ecosistema Roaring es el lugar correcto para
mejoras BSI centrales que sean útiles más allá de QuantaStream.
QuantaStream debe evitar forks privados de algoritmos bitmap
fundamentales cuando sea posible. Cuando la biblioteca BSI necesita
mejores primitivas, la ruta ideal es producir contribuciones pulidas,
respaldadas por benchmarks, hacia upstream. Eso incluye:
- Operaciones de membresía más rápidas tipo
BatchEqual.
- Operadores de comparación BSI-a-BSI.
- Pruebas y benchmarks BSI más profesionales.
- Documentación clara de dónde el comportamiento BSI de 64 bits difiere
del comportamiento BSI de 32 bits.
La base de datos y la biblioteca bitmap deben evolucionar juntas, pero
con fronteras limpias. QuantaStream debe expresar intención de base de
datos. Roaring debe exponer primitivas bitmap y BSI correctas y
eficientes.
Qué lo hace diferente
El diferenciador no es simplemente "usa bitmaps." Muchos sistemas usan
índices bitmap.
El diferenciador es que QuantaStream trata los dominios bitmap
comprimidos como el sustrato nativo de ejecución de consultas:
- SQL se parsea y planifica hacia formas intermedias capaces de usar
bitmaps.
- Los roles de tabla permanecen en dominios de rownums separados hasta
que se traducen explícitamente.
- Los relationship vectors realizan traducción de dominio.
- La lógica booleana se reduce a álgebra de conjuntos.
- Las comparaciones dentro de la misma fila están destinadas a ser
comparaciones BSI, no scans de filas.
- Semi-joins y anti-joins se convierten en membresía y diferencia.
- La agregación se alimenta de conjuntos candidatos reducidos.
- La materialización es tardía y específica por campo.
- La inspección de runtime expone el álgebra física usada para
responder una consulta.
Vale la pena conservar la línea guía:
QuantaStream no mueve filas a través de joins; mueve restricciones a
través de dominios de bitmaps comprimidos hasta que solo quedan las filas
necesarias.
Límites actuales
La arquitectura es prometedora, y la superficie actual del producto es
mucho más concreta que en el primer borrador de este documento. Los
límites restantes son ahora gates de release y líneas de ingeniería
posteriores:
- El optimizador de costos todavía está en una etapa temprana, aunque
varias mejoras de reducción para star queries y relationship artifacts ya
están validadas.
- QuantaStream soporta una superficie SQL enfocada y compatible con
MySQL, no un clon completo de MySQL.
- Los benchmarks TPC-H SF1/SF2/SF3 son repetibles, pero cada release
candidate todavía necesita una pasada limpia de performance antes de
refrescar números públicos.
- La carga por lotes está validada en SF1-SF3; el ingest streaming en
vivo necesita su propia demo de producto y su historia de recuperación.
- WAL local, backup, restore, support bundles y preflights de operador
ya son parte de la postura 1.0; barreras distribuidas de backup y
adaptadores de almacenamiento cloud quedan como trabajo posterior.
- El trabajo en la biblioteca BSI sigue siendo una frontera de
optimización, pero la ruta actual de comparación dentro de la misma fila
está disponible desde la dependencia Roaring seleccionada.
- La representación de strings de alta cardinalidad todavía necesita
que el diseño StringLexBSI madure.
- La caché global de consultas entre sesiones sigue siendo una función
futura, no una muleta que el motor actual requiera.
Estos límites son saludables. Mantienen honesto al proyecto.
Puntos de prueba a corto plazo
Los próximos puntos de prueba más útiles son:
- Mantener repetible la línea de benchmarks TPC-H SF1/SF2/SF3 a través
de release candidates.
- Terminar la validación release-grade de WAL, backup, restore y
startup replay.
- Mantener aburrida y repetible la ruta del artefacto binario, el
getting-started runbook, el support bundle y
doctor local.
- Expandir la compatibilidad de clientes MySQL con Java/JDBC, Node.js y
cobertura de metadata estilo Tableau.
- Construir la primera demo de ingest streaming alrededor de presión
real de insert/update y semántica de recuperación.
- Seguir reduciendo materialización donde una primitiva bitmap o BSI
pueda responder directamente.
- Continuar la optimización basada en costos desde cardinalidad de
tabla, selectividad de predicados, costo de reducción por relationship
vector y localidad de nodos.
Conclusión
El álgebra central de QuantaStream es compacta:
selection -> bitmap production
AND -> intersection
OR -> union
NOT -> difference
range/equality -> BSI or dictionary bitmap
same-row cmp -> BSI-to-BSI comparison
join -> relationship-vector domain translation
EXISTS -> membership
NOT EXISTS -> difference
aggregation -> reduced candidates plus late materialization
Esa álgebra compacta es el proyecto.
La expresión de producto es SQL. La expresión de ejecución es álgebra
bitmap. El desafío de ingeniería es hacer que esos dos mundos se alineen
con suficiente limpieza para que una persona pueda escribir SQL analítico
ordinario mientras el motor hace discretamente algo inusualmente poderoso
por debajo.
Referencias