Lima Backbone Scale

One engine for a nightly refresh and a terabyte migration.

The same engine runs a 10 GB nightly delta, the rows that changed since the night before, and a multi-terabyte migration. Capacity is chosen as a tier of vCPU and memory, from 32 to 128 vCPU on one node. The subscription is sized by that capacity, so the volume you move does not change the price.

FOUR SIZES OF JOB ON THE SAME ENGINE · SMALLEST AT THE TOPLABEL = WHERE THE FIGURE COMES FROMNightly delta from one ERP12M rows · 12 tables10 GB15 min on 64 vCPULAB RUNMulti-ERP planning load220M rows · 615 tables · nine SAP, Oracle and PeopleSoft systems~30 GB~30 min on 64 vCPUESTIMATEDaily production feedmoved and transformed every day · semiconductor enterprise80 GB a dayruns every dayPRODUCTIONMigrationmulti-terabyte, run in partitions · count check per tablemulti-terabytesized on requestON REQUESTCAPACITY TIER32C · 32 vCPU64C · 64 vCPU96C · 96 vCPU128C · 128 vCPUscale up: change the tier · scale out: add nodes
Four sizes of job on the same engine, smallest at the top. The label on the right says where each figure comes from: lab run, performance estimate, production, or sized on request. Bar length is illustrative. The tier scale along the bottom is the capacity you choose.
12M rows
10 GB in 15 minutes on 64 vCPU
lab run
220M rows
615 tables, ~30 GB, ~30 min on 64 vCPU
performance estimate
80 GB/day
moved and transformed every day
production · semiconductor enterprise
4
capacity tiers, 32 to 128 vCPU
reference configurations
0
charges per row, connector or run
pricing principle
What it does

What scale means here

Scale has three dimensions on this page: volume, breadth and speed.

1 · VOLUME

Rows and gigabytes

10 GB · 12M rows · lab run
~30 GB · 220M rows · estimate
80 GB a day · production

2 · BREADTH

Tables and source systems

615 tables from 9 systems · estimate
4,218 SAP tables · showcase estate
2,891 Oracle tables · showcase estate

3 · SPEED

Minutes to close the run

15 min · 10 GB · lab run
~30 min · ~30 GB · estimate
~55 min · scripted transforms · estimate

Volume is how much data a run moves, counted in rows and gigabytes. Breadth is how many tables and source systems the run touches. Speed is how fast the run must finish so that the next business step can start; the period it must finish in is the run window.

A job can be large in one dimension and small in another. A nightly delta from one ERP is small in volume and breadth and tight on speed. A migration is large in volume and breadth, and its run window is measured in hours or days. The rest of this page shows how the engine handles each dimension.

Patterns

Patterns and jobs

Every combination of transform pattern and data movement runs on the same engine.

Transform ↓ · Movement →Full batch
whole table each run
Incremental
rows past a marker column
Change capture
each change as it happens
Streaming
stream micro-batches
ETLtransform in Lima’s enginesupportedplanning first loadsupportednightly deltasupportedstock positionssupporteddispatch events
ELTland raw, transform in the warehousesupportedraw landingsupporteddaily appendsupportedorder changessupportedevent landing
A mixlight clean in Lima, heavy work in the warehousesupportedmigrationsupportedweekly refreshsupportedmaster datasupportedWMS webhooks

Twelve combinations of transform pattern and data movement, all supported. The example in each cell is a typical job of that kind. The rows say where the transform runs. In ETL the data is transformed in Lima’s engine and loaded finished. In ELT the raw data lands first and the warehouse transforms it with its own compute. A mix does a light clean in Lima and the heavy transforms in the warehouse.

The columns say how the data moves: the whole table each run, only the rows past a marker column, each insert, update and delete as it happens, or micro-batches from a stream. The pattern is a setting on each pipeline. The volume is a tier. ERP sources such as SAP and Oracle, and file, database and stream sources, all use the same patterns.

How it works

How the engine uses the machine

A load fans out into jobs, worker threads and lookup queries, and the export reuses the same CPUs.

One data pull is one jobEach table or partition being read is a job, and each job runs on one thread. About 120 such threads fit on 6 vCPU, so a nine-source extract is hundreds of reads running side by side.
Each job starts about 24 worker threadsThe workers do the transform: joins, unions, filters and derived columns. Ten jobs put about 240 worker threads to work on 16 vCPU.
Workers send lookup queriesA lookup query fetches a matching value from another table, such as the plant for a material number. Each worker can send 10 to 16 lookup queries per row. The database runs 16 query workers to answer them, and keeps block and query caches so that repeated lookups come from memory.
Export reuses the same CPUsWhen the transform finishes, the same CPUs write the result to the planning application, the lakehouse, the warehouse or files, at about 6 threads per vCPU.
The engine

The engine is built on Apache Spark and Apache Ignite. Spark runs the parallel transform; Ignite holds the working data in memory across the nodes. Kubernetes, the system that runs the engine’s containers, restarts a failed task on another node, and the run continues from that task.

Timings

Where the time goes

A run has three stages: import, transform and export. The bars show the minutes in each.

STAGE TIMINGS ON 64 vCPU · BARS ARE PROPORTIONAL TO MINUTESEstimate · ~30 GB · 220M rowssimple transforms98.510≈ 30 minEstimate · same datascripted (Python) transforms937.510≈ 55 minLab run · 10 GB · 12M rows12 tables63.56= 15 minimport = source → Lima · transform · export = Lima → target
Stage timings on 64 vCPU. Rows one and two are a performance estimate for ~30 GB across nine SAP, Oracle and PeopleSoft systems; row three is a lab run of 10 GB. Bars are proportional to minutes.

On the estimate, import takes 8 to 10 minutes, a simple transform 8 to 9 minutes and export about 10 minutes, so the run closes in about 30 minutes. With scripted transforms in Python the transform stage grows to 35 to 40 minutes and the run closes in about 55 minutes. The lab run of 10 GB took 6, 3 to 4 and 6 minutes: 15 minutes in all.

Import is the read from the source into Lima. Export is the write from Lima into the target. The transform stage is the one that changes most with the work asked of it, which is why the scripted row is longer.

Tiers

Growing from 32 to 128 vCPU

Capacity comes in four tiers. Each tier is one node with a set number of vCPU and amount of memory.

FOUR CAPACITY TIERS · ONE NODE EACH · BLOCK HEIGHT GROWS WITH vCPU32C32 vCPU · 256 GBAWS r6i.8xlarge1 TB+ SSD · 100 users included64C64 vCPU · 512 GBAWS r6i.16xlarge1 TB+ SSD · 100 users included96C96 vCPU · 512–768 GBAWS r6i.24xlarge1 TB+ SSD · 100 users included128C128 vCPU · 512 GBAWS r6i.32xlarge1 TB+ SSD · 100 users includedScale outa job asks for more nodes;Kubernetes adds them for the runscale up = change the tier · scale out = add nodes · AWS instance names shown · Azure equivalents available
The four reference configurations, with AWS instance names; Azure equivalents are available. Block height grows with vCPU. The dashed block on the right is scale out, where more nodes join for a run.

To scale up, you change the tier, and the same pipelines run on the larger node. To scale out, a job asks for more nodes and Kubernetes adds them for the run. Estates of 600+ tables and 200M+ rows usually start at 64 or 96 vCPU. A nightly delta from one ERP fits on 32 vCPU.

Every tier includes the whole platform and 100 users, with 1 TB or more of SSD, the fast local disk, and object storage as needed. The same tiers apply in Lima’s cloud, in your own cloud account and on your own servers. Deployment options and reference configurations →

Pricing

Priced by capacity

The subscription is sized by the estate and the tier you run on.

There is no charge per row, per connector, per run or per question. A migration month costs the same as a quiet month on the same tier, so a large migration can be planned on a known budget. When a migration needs a larger tier for its duration, the tier is the only thing that changes.

Fixed-price entry offers give a trial a clear end point: a free extraction assessment, a four-week first load with a reconciliation report, a fixed-price migration conversion, and a per-system archive-and-decommission. Pricing principles and entry offers →

Recovery

Recoverable runs

A long run keeps checkpoints, so an interruption costs the time since the last checkpoint.

Every run saves a checkpoint after each completed part, such as a table or a partition. After a network fault, a source outage or a quality hold, the run resumes from the last checkpoint, replays the changes it missed in order, and applies each change once, because every write carries a key and a retry updates the row in place. At the end, rows in and rows out are compared per table, along with control totals on key amount columns, and any differences are listed for sign-off.

On the showcase estate, a quality hold of 44 minutes ended with 841K events replayed in order and the 06:30 deadline met with 3h 32m to spare. A six-hour archive extract interrupted at hour four resumes at hour four.

A checkpoint is saved after each partA part is a table or a partition. A filled checkpoint marks work that will not be repeated.
An interruption costs only the time since the last checkpointA network fault, a source outage or a quality hold stops the run where it stands.
The run resumes and replays in orderThe missed changes are applied in the order they happened, each exactly once.
The run is reconciled at the endRows in equal rows out per table, and control totals are compared.
Reference

Throughput reference

Every figure carries the label of where it comes from.

The table gathers every throughput figure on this page in one place. The last column says where each one comes from. Lab runs are ours; the estimate is a performance estimate for a prospect’s volumes; production figures are customer estates; the two client examples have been reported to us and are still to be verified.

WorkloadVolumeConfigurationResultWhere the figure comes from
Lab run12 tables12M rows · 10 GB64 vCPU15 min: import 6, transform 3–4, export 6Lab run
Nine-source planning loadSAP × 6 · Oracle EBS · PeopleSoft220M rows · 615 tables · ~30 GB64 vCPU: 24 for import, 44 for the transform~30 min with simple transforms; ~55 min with scripted transformsEstimate
Daily production movement80 GB a daySemiconductor enterprise estateEvery day, inside its run windowProduction
Change capture from two ERPsSAP S/4HANA · Oracle ERP32 GB a day from 4,218 SAP tables · 18 GB a day from 2,891 Oracle tablesSingle-tenant installation on AWSCopies kept current through the day by change captureShowcase estate
Client example14 GB32 coresUnder 30 minutesClient example · unverified
Client example20 GB48 cores45 minutesClient example · unverified
Parallel loads in and out25M+ rowsOne engine, loads running side by sideSupported by the engineProduct

The Backbone Benchmark: method published now, results next quarter →

On SAP and on Oracle

Parallel extraction on SAP and on Oracle

Your ERP keeps running while Backbone reads it, because the number of parallel reads is capped per system.

An ERP is the system that holds orders, stock, materials and finance. Backbone reads it in parallel, and the amount of parallel work is agreed with the team that runs the ERP, so the ERP keeps serving its users while the read runs. The table sets SAP and Oracle side by side.

SAP ECC and S/4HANAOracle E-Business Suite (EBS) and Oracle ERP
How parallel reads are cappedParallel sessions are capped per system and per run window. The cap is agreed with the Basis team, the team that administers SAP.Partitioned JDBC reads are capped per connection. JDBC is the standard database connection; a large table is split into partitions that are read side by side. The cap is agreed with the database administrator (DBA).
What keeps the daily volume smallChange capture reads only the rows that changed, through change pointers, table-level change capture, delta-enabled CDS views (database views that SAP defines and releases) and extractor delta queues. On the showcase estate SAP S/4HANA sends 32 GB a day across 4,218 tables.Incremental reads by a last-update column and, where the DBA allows it, LogMiner, Oracle’s own reader of the database change log. On the showcase estate Oracle ERP sends 18 GB a day across 2,891 tables.
How a first load or a migration runsTables are read in partitions inside the agreed session cap, many tables at a time. Each partition gets a row count check.Tables are read in partitions over the agreed number of connections, many tables at a time. Each partition gets a row count check.

ERP extraction: SAP and Oracle, method by method →

Where this sits

All six steps run on this engine.

Step six sends results back to the system they came from, and that system confirms each write.
Any source.Any target.Any pattern.Any volume.Priced by capacity.HOW THE ENGINE SCALES → /platform/backbone/scale
Terms on this page

Plain meanings.

vCPUOne virtual processor core on a cloud machine. A 64 vCPU node has 64 of them. The thread counts on this page are given per vCPU.
TierA reference configuration: one node with a set number of vCPU and amount of memory. The four tiers are 32C, 64C, 96C and 128C. The subscription is sized by the tier.
Partition (of a table)One slice of a large table, such as one date range or one plant, read or written on its own so that several threads can work on the table at the same time.
ThreadOne line of work a CPU runs. A job runs on one thread; the transform runs on many worker threads at once.
Lookup queryA small database query that fetches a matching value from another table for a row, such as the plant for a material number. The database caches the answers.
CheckpointThe saved position of the last completed part of a run. After an interruption the run resumes from there.
Control totalThe sum of a key amount column, such as quantity or value, compared between source and target at the end of a run, along with the row count.
ETL and ELTExtract, transform, load. In ETL the transform runs in Lima’s engine before the load. In ELT the raw data is loaded first and the warehouse transforms it. A mix does a light clean in Lima and the heavy work in the warehouse.
Micro-batchA small group of events from a stream such as Kafka or Kinesis, processed together at an interval set from seconds to minutes.
Questions

Asked before sizing.

How big a job can it run?

The largest documented runs are about 220M rows across 615 tables in about 30 minutes on 64 vCPU (estimate) and 80 GB a day (production). A multi-terabyte migration is sized on request: the tables are read in partitions, each partition gets a count check, and the run is spread over the nodes and the run windows the estate allows. The method for the public benchmark is published now and the results follow next quarter.

What if a run is interrupted halfway?

It resumes from its last checkpoint. The changes missed during the interruption are replayed in order and each is applied once, because every write carries a key and a retry updates the row in place. The reconciliation report at the end shows rows in, rows out and control totals per table.

Do we pay more in a migration month?

The subscription is sized by the estate and the tier. A migration month on the same tier costs the same as a quiet month. When the migration needs a larger tier for its duration, the tier is the only thing that changes, and the price returns with the tier afterwards.

When do we need 96 or 128 vCPU?

Estates of 600+ tables and 200M+ rows usually start at 64 or 96 vCPU. 96 vCPU suits scripted transforms at volume and archive extracts. 128 vCPU suits terabyte migrations and decommissioning runs, and serves as the head of a multi-node cluster. A nightly delta from one ERP fits on 32 vCPU.

Does parallel extraction slow SAP or Oracle down?

The number of parallel reads is capped and agreed with the team that runs the ERP: parallel sessions per system and per run window on SAP, agreed with the Basis team; partitioned reads per connection on Oracle, agreed with the DBA. Large reads run inside the run window agreed for them. Change capture keeps the daily volume small: 32 GB a day from SAP and 18 GB a day from Oracle on the showcase estate.

Size your estate on paper.

Tell us the tables, the rows and the run window. An architect answers with the tier, the pattern per pipeline and the timings to expect, before anything is installed.