Best Data Movement Tools in 2026, Benchmarked

Intergalactic Data Labs
—
—
12 min read
Filament posted the fastest Postgres to Postgres full load in the public 2026 data movement benchmark, moving 298 million rows in 115 seconds, with dlt and PeerDB next. No single tool wins every axis as of September 2026. ingestr used the least CPU, Sling the least memory, Debezium has the deepest CDC, Airbyte the most connectors, and OLake beat Filament on Postgres to Iceberg.
Tool | Wall time | Rows per second | CPU seconds | Peak memory | License |
|---|---|---|---|---|---|
1. Filament | 115 s | 2,597,498 | 377 | 2.97 GiB | Apache 2.0 |
2. dlt | 296 s | 1,007,711 | 728 | 45.5 GiB | Apache 2.0 |
3. PeerDB | 415 s | 718,368 | 3,270 | 0.74 GiB | AGPLv3 |
Baseline pg_dump to psql | 489 s | 610,267 | 63 | 0.02 GiB | PostgreSQL |
4. ingestr | 611 s | 488,233 | 157 | 4.83 GiB | FSL-1.1-ALv2 |
5. Sling | 1,053 s | 283,188 | 2,211 | 0.10 GiB | GPLv3 |
6. Debezium (snapshot) | 6,559 s | 45,476 | 11,658 | 15.7 GiB | Apache 2.0 |
7. Airbyte | 10,393 s | 28,698 | 13,703 | 12.8 GiB | ELv2 |
Every figure comes from the raw result files in the 2026-08-31 cohort of the galaxy-io/benchmarks repository, which loaded 298,270,427 NYC Taxi rows from one RDS Postgres into another. Licenses are quoted from each project's LICENSE file, not its README badge. The companion benchmark write-up walks through the same cohort in more depth.
How were these data movement tools benchmarked?
The benchmark timed a full load of one immutable dataset between two RDS Postgres instances, with each tool running in its official container on the same host. Data movement means copying rows from a source system into a sink, either once, on a schedule, or continuously from the database log.
The methodology is explicit about scope. "The measured wall time starts when the harness triggers the prepared transfer. It ends when the adapter reports completion." Image pulls, container startup, and RDS reboots are excluded. Correctness is checked by row count, and the document says so plainly. "The harness verifies row counts, not row contents."
The README discloses the conflict of interest up front. "We built filament, one of the systems measured here." It also flags the Debezium result. "The full-load benchmark measures its initial snapshot, not the steady-state streaming workload it is primarily designed for."
Setting | Value |
|---|---|
Host | AWS c7i.16xlarge, 64 vCPU, 128 GiB |
Source and sink | Separate RDS db.m6i.8xlarge, same AZ |
Dataset | NYC Taxi, 12 months, 2 tables |
Repetitions | 3, except Debezium and Airbyte at 1 |
Cold start | RDS reboot before every timed run |
Verification | Row count parity |
Debezium and Airbyte ran once each because their loads took hours, which does not change the ordering.
Which data movement tool is fastest?
Filament was fastest on the Postgres to Postgres route, and the field split into three clear tiers. The top tier finished under seven minutes, the middle tier under eighteen, and the bottom tier took hours.
Takeaway. Filament beat the pg_dump baseline by 4.3 times, dlt by 2.6 times, and every other tool by more, but only on this one route.
Filament, dlt, and PeerDB form the top tier. Filament reads Postgres heap pages in parallel shards and writes binary COPY batches straight from Arrow buffers, according to its sink docs. dlt took second with its ConnectorX backend, at the cost of the highest memory in the cohort.
The middle tier is the native baseline, ingestr, and Sling. A single pg_dump piped to psql landed fourth overall while using almost no CPU or memory, which makes it the number every tool should be measured against. Debezium and Airbyte are built for a different job than a one shot bulk copy, and both paid for it here.
The tools, ranked
Here is each tool in cohort order, with the strength that keeps it on the list.
Takeaway. Three of the seven ship under Apache 2.0, two carry a license that differs from their own README or docs, and every one of them wins at least one job.
1. Filament
Filament is a Go replication engine that runs as a single binary, a Docker container, an embedded Go library, or a Helm chart, under Apache 2.0. It supports full, incremental, and CDC reads from Postgres and MySQL, and replace, append, upsert, and merge writes. The connector page lists 11 sources and 6 sinks, most of them beta or alpha, and the project is still pre-1.0.
2. dlt
dlt is a Python library for loading data, and its README pitches it as something you can drop into a notebook, a Lambda, or an Airflow DAG. That portability is why it wins for Python teams. The benchmark configuration used the Arrow stream return type, which drove memory to 45.5 GiB. The paid runtime is called dltHub and bills in runtime credits.
3. PeerDB
PeerDB is a Postgres CDC engine that ClickHouse acquired in July 2024. Its README says the actively maintained paths are Postgres to ClickHouse, ClickHouse Cloud, and Postgres. The README badge says ELv2 but the LICENSE file is AGPLv3, and the file wins. It is the natural pick when ClickHouse is the destination.
4. ingestr
ingestr v1 is a ground up rewrite in Go with no dlt dependency, shipped as a single binary by Bruin, according to its product page. It used the least CPU of any tool in the cohort. Its docs still say MIT, but the LICENSE file is FSL-1.1 with an Apache 2.0 future license, which forbids using it to offer a competing ingestion service.
5. Sling
Sling is a Go CLI under GPLv3 whose README describes it as built for small to medium volume pipelines. It had the smallest footprint of any tool, peaking at 0.10 GiB. The free tier runs one thread per process, and concurrency and log based CDC sit behind the paid CLI Pro tiers.
6. Debezium
Debezium is the reference open source CDC platform, Apache 2.0, usually deployed through Kafka Connect. Its Postgres connector docs say the connector "typically spends the vast majority of its time streaming changes." The benchmark figure is the initial snapshot through Debezium Server and a JDBC sink. It says nothing about the streaming phase Debezium exists for.
7. Airbyte
Airbyte has the widest catalog in the group, with more than 700 connectors on its pricing page and a no code Connector Builder. The platform and connectors are under the Elastic License 2.0, with only the protocol under MIT. The benchmark used Standard replication rather than CDC or xmin, and the destination connector burned most of the CPU time.
What about Postgres to Iceberg?
OLake beat Filament on the largest Postgres to Iceberg load, and Filament beat OLake on MySQL to Iceberg and both small runs. Both tools wrote to a REST catalog on S3 in the same cohort.
OLake is an Apache 2.0 Go engine from Datazip that replicates databases into Iceberg or Parquet. Its README stresses that it needs no Spark, Flink, Kafka, or Debezium. It sat out the Postgres to Postgres run because it only writes lake formats.
Route and dataset | Filament | OLake | CPU seconds, Filament vs OLake |
|---|---|---|---|
Postgres to Iceberg, 298M rows | 234 s | 204 s | 518 vs 7,894 |
MySQL to Iceberg, 298M rows | 236 s | 479 s | 931 vs 7,446 |
Postgres to Iceberg, TPC-H 8.7M rows | 17 s | 56 s | not compared |
MySQL to Iceberg, TPC-H 8.7M rows | 24 s | 83 s | not compared |
OLake's own published benchmark, dated January 2026, claims a 12.5 times lead over Fivetran on a 4 billion row Taxi load. Filament's Iceberg sink is alpha and commits per resource at run end, so partial runs leave nothing visible. If Iceberg is the only sink you care about, OLake is the safer bet today.
Which tool fits which job?
Choose the tool by the job, because the ranking above only measured one route.
Tool | Best for | Trade-off | Cost |
|---|---|---|---|
Filament | Fast Postgres and MySQL full loads, CDC, embedding in Go | Pre-1.0, 11 sources, alpha lake sinks | Free, Apache 2.0 |
dlt | Python teams, custom sources, notebooks | Highest memory, Python runtime | Free OSS, dltHub in credits |
PeerDB | Postgres to ClickHouse CDC | AGPLv3, narrow destination list | Free OSS, ClickPipes per GB |
ingestr | Low CPU one off copies, 150 plus sources | Source available, not OSI open source | Free CLI |
Sling | Tiny footprint, small pipelines | Single thread free, CDC paid | Free, Pro from 79 dollars a month |
Debezium | Streaming CDC into Kafka | Slow snapshot, Java and Kafka ops | Free, Apache 2.0 |
Airbyte | Long tail SaaS connectors, managed sync | Slowest bulk load, ELv2 | Cloud from 10 dollars a month, credits |
OLake | Databases into Iceberg | Iceberg and Parquet only, 16 GiB peak | Free, Apache 2.0 |
Fivetran | Managed, no ops, compliance | Closed source, cost scales with rows | Monthly active rows, free to 500K |
Fivetran was not benchmarked, since it is a closed service, but it is the tool most top ranking listicles lead with. Its pricing docs define monthly active rows as distinct rows synced in a calendar month, with initial syncs free.
How should you pick a data movement tool?
Pick by the constraint that breaks first. For most teams that constraint is one of four things, and each points at a different tool.
If wall time on a bulk load breaks first, Filament led the Postgres route and dlt was second, while OLake led the largest Iceberg route.
If memory on a shared host breaks first, Sling and PeerDB stayed under 1 GiB, and dlt with ConnectorX peaked at 45.5 GiB.
If a missing connector breaks first, Airbyte, ingestr, and Fivetran cover hundreds of SaaS sources that the Go replication engines do not.
If license review breaks first, Filament, dlt, Debezium, and OLake are Apache 2.0, while PeerDB, Sling, ingestr, and Airbyte carry copyleft or source available terms.
For continuous CDC, the benchmark says nothing, so weigh maturity instead. Debezium has years of production history and an ordered, replayable change log, and PeerDB is the Postgres to ClickHouse specialist. Filament and ingestr both read the Postgres write ahead log through pgoutput, but their CDC paths are younger. The replication guide covers those trade-offs in full.
What does this benchmark not tell you?
It tells you nothing about incremental or CDC throughput, failure recovery, or data correctness beyond row counts. The benchmark limits page says so directly. "Results do not predict incremental or CDC performance."
Versions have also moved since the run. dlt, Sling, PeerDB, and Debezium have each shipped at least one release since August 31, and the image tags are in every result file. Peak memory for PeerDB and Airbyte is the largest single container, not the sum across containers, which would raise Airbyte to 14.4 GiB.
Galaxy, the company that maintains Filament, also runs the benchmark harness and publishes the raw JSON, the configs, and the full methodology so anyone can rerun it. Until a neutral party reruns it, treat the ordering as strong evidence for bulk loads and nothing more. The fastest Postgres to Postgres replication piece and the Filament vs Airbyte comparison dig into the two ends of the table.
Frequently asked questions
What is the best data movement tool in 2026?
There is no single best tool. In the public August 2026 benchmark Filament had the fastest Postgres to Postgres full load, ingestr used the least CPU, Sling the least memory, and OLake won Postgres to Iceberg. Airbyte has the most connectors and Debezium the most mature streaming CDC. Pick by the constraint that breaks first in your stack.
What is data movement?
Data movement is copying rows from one system to another, either once as a migration, on a schedule as batch replication, or continuously as change data capture. The tools in this article all move rows between databases, warehouses, and lake formats. They differ in how they read the source, how they write the sink, and what they cost.
How fast can you copy 298 million rows between two Postgres databases?
In the 2026-08-31 benchmark cohort, Filament copied 298,270,427 NYC Taxi rows between two RDS Postgres instances in 115 seconds. A plain pg_dump piped to psql took 489 seconds on the same hardware. Airbyte took 10,393 seconds. The run measured a full load only, not incremental or CDC throughput.
Is Filament faster than Airbyte?
On a Postgres to Postgres full load of 298 million rows, Filament finished in 115 seconds and Airbyte in 10,393 seconds, about 91 times longer. Airbyte ran in Standard replication mode with a 16 GiB limit per connector container. Airbyte still leads on connector count, with more than 700 sources and destinations.
Is Debezium slow?
Not for its main job. The benchmark timed Debezium's initial snapshot, which took 6,559 seconds, because the harness only measures full loads. Debezium is built for steady state streaming of changes after that snapshot, and its own documentation says the connector spends most of its time streaming, not snapshotting.
Which data movement tools are open source?
Filament, dlt, Debezium, and OLake ship under Apache 2.0 according to their LICENSE files. Sling is GPLv3 and PeerDB is AGPLv3. ingestr is source available under FSL-1.1 with an Apache 2.0 future license, and Airbyte is under the Elastic License 2.0. Fivetran and Estuary Cloud are commercial services.
Is OLake faster than Filament?
On one route, yes. OLake loaded the 298 million row Taxi dataset from Postgres into Apache Iceberg in 204 seconds against Filament's 234 seconds. Filament was about twice as fast on MySQL to Iceberg and used roughly 15 times less CPU on the Postgres route. Both Iceberg results come from the same August 2026 cohort.
How do Fivetran and Airbyte price data movement?
Fivetran bills on monthly active rows, meaning distinct rows inserted or updated in a calendar month, with initial syncs free. Airbyte Cloud bills in credits, with database sources charged at 4 credits per GB and API sources at 6 credits per million rows. Self hosted Airbyte, Filament, dlt, Sling, and OLake have no per row charge.
More articles
Questions
Answered
FAQ
What does Galaxy do?
What is Filament?
What is enterprise context management?
What does working with Galaxy look like?
How do you handle security and compliance?
Why does Galaxy build in the open?
Company
Copyright © 2026 Galaxy. All rights reserved.