Limits
This page lists what TwinCommit does not support, and the constraints to design around.
All sources
Section titled “All sources”- Every replicated table needs a primary key (or, on PostgreSQL,
REPLICA IDENTITY FULL). - Schema changes are detected, not propagated. See schema changes.
- Each pipeline applies in source commit order over one apply session. Split very high-volume schemas into several pipelines to scale out.
- TwinCommit must be the only writer to replicated target tables.
- No DPF (multi-partition) databases, column-organized tables, range-partitioned tables or MDC tables.
- LOB, XML, DECFLOAT and GRAPHIC columns must be excluded.
- Database code page must be 1208 (UTF-8).
Oracle
Section titled “Oracle”- LONG and LONG RAW are not supported; LOBs up to 16 MiB per value.
- Hybrid columnar compression is not supported.
SQL Server
Section titled “SQL Server”- Memory-optimized tables are not supported;
sql_variant,hierarchyidand spatial types must be excluded.
MySQL and MariaDB
Section titled “MySQL and MariaDB”- The binlog must be
ROWformat withbinlog_row_image = FULL. - MEMORY, BLACKHOLE, ColumnStore and Spider tables are not captured.
MongoDB
Section titled “MongoDB”- A replica set or sharded cluster is required; standalone servers are not supported.
- Time-series and capped collections are not captured.
Apache Cassandra
Section titled “Apache Cassandra”- A reader must run on every node.
- Counter tables and materialized views are not captured.
- There are no multi-partition transactions; each mutation or logged batch is its own unit.
SAP HANA
Section titled “SAP HANA”log_modemust benormal. Virtual tables and calculation views are not captured.
Non-transactional targets
Section titled “Non-transactional targets”- Cassandra, Redis and Elasticsearch give effectively-once results: a batch may be re-sent after a crash, and idempotent writes make the replay a no-op.
- On Redis Cluster, a source transaction spanning several hash slots is not atomic for readers.
Transactions
Section titled “Transactions”- A transaction larger than
max_txn_memory_bytesneeds that much free space inspill_diruntil it commits. - Lag includes the time a transaction stays open on the source, because nothing is applied before commit.