Need Fresh Data?
Stop Straining Your OLTP System
Move your real-time workloads to Materialize to reduce demanding query-intensive workloads
on your mission-critical systems of record.
Challenges with querying fresh data on your OLTP system
Downtime Risk
Fresher data means heavier load on your database, impacting system performance and availability.
Missed Latency SLAs
Complex queries on fresh data are slow, even if you stand up another OLTP database as a read replica.
Excessive Costs
Read replicas consume storage and compute resources, leading to higher infrastructure costs.
A pressure relief valve for your overtaxed OLTP database
Offload your resource-intensive queries to Materialize, to improve the resiliency and performance of your core applications and services while ensuring fast and fresh query results.
How it works
Materialize is purpose built for workloads with complex queries that require fresh, fast, and correct results. Using incremental transformation results are alway kept up to date and instantly available.
Write to your OLTP, read from Materialize
Access via standard SQL
Incrementally Maintained Views
Write complex SQL transformations as materialized views that efficiently update themselves as inputs change.
Learn MoreCREATE MATERIALIZED VIEW my_view AS
SELECT userid, COUNT(api.id), COUNT(pageviews.id)
FROM users
JOIN pageviews on users.id = pageviews.userid
JOIN api ON users.id = api.userId
GROUP BY userid;
userID | api_calls | pageviews |
---|---|---|
VPLaKV | 400 | 20 |
MN37Mt | 60 | 9 |
1fT4KY | 72 | 42 |
sT4QY | 10 | 342 |
Built for JOINs
Multi-way, complex join support, even across databases - all in standard SQL.
Learn MoreSELECT DISTINCT ON (auctions.id)
bids.amount,
auctions.item,
auctions.seller
FROM auctions, bids
WHERE auctions.id = bids.auction_id
ORDER BY auctions.id,
bids.amount DESC,
bids.buyer;
amount | item | seller |
---|
Sliding Windows
Write queries that filter to a window of time anchored to the present, Materialize will update results as time advances.
Learn MoreCREATE MATERIALIZED VIEW my_window AS
SELECT date_trunc('minute', received_at),
COUNT(*) as order_ct, SUM(amount) as revenue
FROM orders
WHERE mz_now() < received_at + interval '5 minutes'
GROUP BY 1;
minute | order_ct | revenue |
---|
SQL Subscriptions
Write alerts as SQL queries with filters and subscribe to new rows as they appear.
Learn MoreSELECT userID, email, MAX(orders.id) as last_order
FROM users
JOIN orders ON orders.userID = users.id
GROUP BY userId, email
-- Use a filter to surface users with a high % of fraud
HAVING SUM(is_fraud) / COUNT(orders.id)::FLOAT > 0.5;
userID | last_order | |
---|---|---|
REOtIb | a@gmail.com | 13/12/2022 |
Y5KBE8 | b@yahoo.com | 9/12/2022 |
Wj7JQ0 | c@hotmail.com | 13/12/2022 |
tPCQ0 | d@xyz.com | 13/11/2022 |
Deliver fresh, fast changing data with the
ease of a data warehouse
You don't need to compromise on speed, data quality, control, or simplicity.
“My warehouse is too slow - but real-time is too expensive”
Get access to real-time without rebuilding or rehiring: Materialize uses familiar database abstractions and ANSI-standard SQL.
“Our analytics are too join-heavy to move to real-time”
Materialize efficiently handles complex SQL joins on fast-changing data.
“We don't want to take on the operational burden of Kafka”
No Kafka? No problem. Materialize connects directly to your Postgres DB via Change Data Capture (CDC).
“This is high-stakes data, we can't show incorrect results.”
Unlike other solutions, Materialize is strongly consistent: Incomplete results are never served to the user.
“We’d like to keep our existing visualization tools”
Materialize is Postgres wire-compatible: Tools that connect to Postgres can connect and query Materialize.
“We already move Kafka data into our data warehouse”
Warehouses help you report on data, move the same SQL to Materialize to serve high concurrency, low latency data products.