Your data is about to get faster¶
The high-performance columnar database engineered for lightning-fast analytics and seamless data operations.
Think fast. Build faster.¶
-
Blazing Fast
Columnar storage with vectorized operations delivers sub-millisecond query performance on analytical workloads.
-
Simple Syntax
Intuitive LISP-like syntax flattens the learning curve. Write powerful queries in minutes, not hours.
-
Pure C, Zero Dependencies
Under 1MB binary fits in CPU cache. No external dependencies means simple deployment anywhere.
-
Production Ready
Battle-tested columnar engine optimized for real-world analytics and data processing pipelines.
-
In-Process Embedding
No separate database server needed. Embed directly in your application for immediate data access with zero network overhead.
-
Cloud Native Scaling
Scale effortlessly on any cloud. No limits, no bottlenecks. Save costs by optimizing memory usage and CPU hours.
Expressive. Readable. Fast.
Rayfall combines the power of array programming with the clarity of Lisp syntax.
; Create a table
(set employees (table [name dept salary hire_date]
(list
(list "Alice" "Bob" "Charlie" "David")
['IT 'HR 'IT 'IT]
[75000 65000 85000 72000]
[2021.01.15 2020.03.20 2019.11.30 2022.05.10])))
; Select with filtering
(select {
name: name
salary: salary
from: employees
where: (> salary 70000)})
; Group by and aggregate
(select {
avg_salary: (avg salary)
headcount: (count name)
from: employees
by: dept})
; Create a table
(set employees (table [name age] (list ['Alice 'Bob] [25 30])))
; Insert a single row
(set employees (insert employees (list 'Charlie 35)))
; Insert multiple rows
(set employees (insert employees (list ['David 'Eve] [40 25])))
; In-place insertion
(insert 'employees (list "Mike" 75))
; Create a table
(set employees (table [name dept salary]
(list
(list "Alice" "Bob" "Charlie")
['IT 'HR 'IT]
[75000 65000 85000]))))
; Update with where clause
(set employees (update {
salary: (* salary 1.1)
from: employees
where: (> salary 70000)}))
; Update with grouping
(set employees (update {
salary: (+ salary 1000)
from: employees
by: dept
where: (> salary 55000)}))
; Create a table with key column
(set employees (table [id name age] (list [1 2] ['Alice 'Bob] [25 30]))))
; Upsert: updates id=2, inserts id=3
(set employees (upsert employees 1 (list [2 3] ['Bob-updated 'Charlie] [30 35]))))
; Upsert single row
(set employees (upsert employees 1 (list 4 'David 40))))
; In-place upsert
(upsert 'employees 1 (list 11 'Kate 27))
; Alter vector elements
(set prices [100 200 300])
(set prices (alter prices + 1 10))
; → [100 210 300]
; Alter table column
(set trades (table [price volume] (list [100 200] [50 60]))))
(set trades (alter trades + 'price 10))
; → price: [110 210], volume: [50 60]
; In-place alteration
(alter 'prices + 10)
; Create tables
(set trades (table [symbol order_id price quantity]
(list ['AAPL 'MSFT 'GOOG] [1001 1002 1003]
[150.25 300.50 125.75] [100 200 150]))))
(set orders (table [order_id client_id timestamp status]
(list [1001 1002 1004]
['CLIENT_A 'CLIENT_B 'CLIENT_C]
[09:00:00 09:05:00 09:10:00]
['FILLED 'FILLED 'PENDING]))))
; Left join - keeps all rows from left table
(left-join [order_id] trades orders)
; Inner join - only matching rows
(inner-join [order_id] trades orders)
; As-of join for time-series data
(asof-join [Sym Ts] trades quotes)
Integrate with your Stack¶
-
Python Bindings
Native Python integration through FFI bindings. Use RayforceDB directly from your Python applications with zero overhead.
-
WebAssembly
Run RayforceDB directly in your browser. Try the interactive WASM playground with zero installation required.
-
C Plugin System
Extend functionality with dynamic C plugins. Load custom functions and modules at runtime for maximum flexibility.
Get started in minutes¶
RayforceDB is open source under MIT license. Download, build, and run your first query today.