All sources and targets
Relational Databases

Keep every SQL database in step

Aestus reads each committed change from the database's own log and applies it to the target in order, with the version of the change stored on every row. Replicate between vendors, feed the lakehouse, or turn documents into tables and tables into documents, graphs and search indexes.

Systems

How Aestus reads changes from each system, and how it writes them.

PostgreSQL

As a source: Logical decoding through a replication slot and a publication. The initial load starts from the slot's own snapshot, so nothing is missed between load and stream.

As a target: Tables created and widened on demand; JSON columns as JSONB; vectors as pgvector columns.

WALExact snapshot handoverpgvector
MySQL and MariaDB

As a source: Row events from the binary log, with GTIDs to resume after a failover.

As a target: Tables with a transaction per batch and a savepoint per record, so one bad record never blocks the rest.

BinlogGTIDJSON
SQL Server and Azure SQL

As a source: Change Data Capture for full rows, or the lighter Change Tracking with a fresh read of each changed row.

As a target: Tables, JSON as text, and vector columns on SQL Server 2025.

CDCChange TrackingAzure SQL
Oracle Database

As a source: LogMiner on the redo and archived logs, ordered by SCN. The initial load reads the tables as of one SCN.

As a target: Tables through a pure-Go driver, no Oracle client to install; vector columns on Oracle 23ai.

LogMinerSCN23ai vectors
SQLite

As a source: Triggers that record each change in a change-log table, for edge devices and embedded applications.

As a target: Relational tables from a mapping, or documents stored as they are.

EdgeEmbedded
Databricks

As a source: The Delta Change Data Feed, with inserts, updates (before and after) and deletes per commit version.

As a target: Delta tables with documents kept as VARIANT, typed columns, and optional change history.

Delta LakeUnity CatalogVARIANT
Snowflake

As a source: Change tracking with the CHANGES clause: the net change of every row since the last read.

As a target: Tables with semi-structured data as VARIANT.

Change trackingTime Travel

Ways to Sync

Between systems of the same kind, and across kinds through a transform.

Relational Relational

Database to database

Same schema on another server, another cloud or another vendor: Oracle or SQL Server to PostgreSQL, MySQL to Aurora, many regional databases into one.

Relational Lakehouse

Into the lakehouse and warehouse

Databricks and Snowflake tables that follow production within minutes instead of a nightly batch, with optional history of every version.

Document Relational

Documents to tables

A collection becomes a parent table, embedded arrays become child tables, nested fields become typed columns. Tables grow as the documents do.

Relational Document

Tables to documents

A row and its child rows become one document: ready-made read models for APIs and applications that should not query the system of record.

Relational Graph

Tables to a graph

Rows become nodes, foreign keys and join tables become relationships, for fraud, recommendation and dependency analysis.

Relational Vector & Search

Tables to search and AI

Text columns are chunked and embedded into a vector store or a search index, which follows every update and delete.

Use Cases

Migration without downtime

Run the old and the new database side by side, kept in step change by change, and switch over when you are ready. No freeze, no big-bang weekend.

Reporting replica

Move heavy reports and BI queries to a copy that is seconds behind production, so they never slow down the application.

Fresh lakehouse

Feed Databricks or Snowflake continuously. Analysts and models work on today's data, not last night's.

Consolidation

Bring tens of tenant, regional or acquired databases together into one database for reporting and operations.

Data for microservices

Give each service its own read copy of the data it needs, instead of a shared database every team is afraid to change.

Audit and history

Keep every version of a row with valid-from and valid-to times, for audits, investigations and slowly changing dimensions.

How It Stays Correct

Never older over newer

Every row stores the version of its last change; a late or repeated change is ignored.

Deletes stay deleted

A deleted row leaves a tombstone, so a late insert cannot bring it back.

One record never blocks the rest

Each record is applied in its own savepoint; a failing one is read again from the source.

Schemas that grow

Tables are created and new columns added when the data needs them.

Other Kinds of Systems

Want to discuss your use case? Write to info@aestus-cdc.com.