wayyDB

The time-series database that's faster than your DataFrame.

C++20 engine. SIMD aggregations. Zero-copy Python.

$ pip install wayy-db

Performance That Speaks for Itself

Median of 5 runs, single-threaded. Smaller is better.

As-of Join
Create Table
Aggregation
Window Fns
Persistence

AS-OF JOIN: 1M trades x 1M quotes, 10 symbols

wayyDB
142 ms
1.0x
DuckDB
345 ms
2.4x
Polars
568 ms
4.0x
pandas
8,234 ms
58.0x

CREATE TABLE: 1M rows, 7 columns (OHLCV + symbol)

wayyDB
12 ms
1.0x
Polars
35 ms
2.8x
DuckDB
89 ms
7.2x
pandas
145 ms
11.8x

AGGREGATIONS: sum + mean + min + max + std on 1M rows

wayyDB
0.8 ms
1.0x (SIMD)
NumPy
2.9 ms
3.6x
Polars
4.1 ms
5.1x
DuckDB
5.6 ms
7.0x
pandas
16.2 ms
20.3x

WINDOW FUNCTIONS: mavg(20) + ema(0.1) + mstd(20) on 1M rows

wayyDB
5.2 ms
1.0x
Polars
22 ms
4.2x
pandas
65 ms
12.5x

LOAD FROM DISK: 1M rows, 7 columns

wayyDB
0.05 ms
mmap (instant)
Polars
18 ms
360x
DuckDB
32 ms
640x
pandas
62 ms
1240x
Reproduce it yourself:
pip install wayy-db[bench] && python -m benchmarks.benchmark --compare all

Quick Start

From pip install to as-of join in 30 seconds.

import wayy_db as wdb import numpy as np # Create trades table from numpy arrays trades = wdb.from_dict({ "timestamp": np.array([1000, 2000, 3000, 4000, 5000], dtype=np.int64), "symbol": np.array([0, 1, 0, 1, 0], dtype=np.uint32), "price": np.array([150.25, 380.50, 151.00, 381.25, 152.00]), }, name="trades", sorted_by="timestamp") # As-of join -- O(n log m), the join quant finance needs result = wdb.ops.aj(trades, quotes, on=["symbol"], as_of="timestamp") # Zero-copy NumPy (no data copied!) prices = trades["price"].to_numpy() # SIMD-accelerated aggregations avg_price = wdb.ops.avg(trades["price"]) # Window functions mavg = wdb.ops.mavg(trades["price"], window=20) ema = wdb.ops.ema(trades["price"], alpha=0.1)

Built for Time-Series

Every feature designed for tick data, OHLCV, and quant workflows.

SIMD Aggregations

AVX2-accelerated sum, avg, min, max, std. Processes 8 doubles per cycle. 10x faster than pure Python loops.

Zero-Copy NumPy

Memory-mapped columns share directly with NumPy arrays via the buffer protocol. No serialization overhead.

As-of Joins

O(n log m) via binary search on sorted indices. The join quant finance lives on. Native, not a workaround.

Window Functions

Moving average, EMA, rolling std, mmin, mmax -- all O(n) single-pass. Built for tick-level data.

Persistent Storage

Tables saved as mmap files. Load 10M rows in microseconds. No deserialization, no parsing, just page faults.

Streaming API

FastAPI REST + WebSocket. Real-time ingestion at 1M ticks/sec. Pub/sub with InMemory or Redis backend.

How It Compares

Honest feature comparison. We show what we have and what we don't.

wayyDB kdb+ DuckDB Polars pandas
License MIT $$$$$ MIT MIT BSD
Language C++20 q/k C++ Rust Python
Python Bindings yes limited yes yes native
As-of Join yes yes yes yes yes
Window Join yes yes no no no
SIMD AVX2 yes yes yes no
Zero-Copy NumPy yes no partial partial no
Streaming API yes no no no no
Memory-Mapped yes yes partial no no
Price Free ~$100k/yr Free Free Free

Install

pip install and go. No system dependencies required.

$ pip install wayy-db # Core library
$ pip install wayy-db[api] # + FastAPI server
$ pip install wayy-db[bench] # + Benchmark suite