SymmetricDS - це програмне забезпечення з відкритим початковим кодом для синхронізації баз даних і файлів з можливістю multi-master replication, фільтрованої синхронізації та можливостей трансформації.[1] Він розроблений здатним до масштабування для великої кількості вузлів та роботи із з'єднаннями з низькою пропускною здатністю і витримує періоди відключення мережі.[2] Синхронізація даних відбувається асинхронно від запланованого завдання, при цьому зміни даних надсилаються через операцію push або pull. Він використовує стандартні вебпротоколи (HTTP) і технології баз даних (JDBC) для того, щоб підтримувати широкий спектр платформ і максимізувати його сумісність. Вона включає підтримку Oracle, MySQL, MariaDB, PostgreSQL, Greenplum, SQL Server, SQL Server Azure, HSQLDB, H2, Derby, DB2, Firebird, Informix, Interbase, SQLite, Sybase ASE, Sybase ASA, MongoDB, Amazon_Redshift і VoltDB. [3]
SymmetricDS працює як окремий сервер (за допомогою вбудованого Jetty), на сервері програм (наприклад, Apache Tomcat), або вбудований у програму. Конфігурація здійснюється за допомогою файлів властивостей і колекції таблиць конфігурації на центральному вузлі. Таблиці баз даних і файлові системи можуть бути синхронізовані по мережі вузлів. Конфігурація дозволяє вибирати таблиці, стовпці (вертикальна фільтрація) і підмножини рядків (горизонтальна фільтрація) для синхронізації в одному напрямку або в обох напрямках. Файли вибираються за критерієм базової директорії та рекурсійності. Символи підстановки використовуються для узгодження декількох таблиць і файлів. Таблиці можуть бути згруповані в канали, які синхронізуються на основі пріоритету. Групи вузлів пов'язані між собою і призначені транспортним методом push або pull. Push підключається до вузла і надсилає зміни, коли вони будуть готові, тоді як pull буде періодично з'єднуватися з вузлом, щоб перевірити, чи були зроблені зміни. Кілька топологій мережі можливі шляхом з'єднання груп вузлів, включаючи fan-in/out, multi-master, star, та multi-tier tree. Вузол може бути підготовлений з початковим завантаженням даних для заповнення своєї бази даних. Зміни групуються в пакети і призначаються для доставки в вузли з використанням маршрутизаторів. Маршрутизатори можуть бути налаштовані або заскриптовані, щоб фільтрувати дані і приймати рішення, які вузли повинні отримувати дані. Пакети доставляються під час синхронізації та відслідковуються за допомогою порядкового номера та статусу, з періодичними спробами, призначеними для автоматичного відновлення помилок. Інструменти керування для командного рядка та вебконсолі JMX включені для керування вузлами з центрального розташування. Інтерфейси програмування для Java і REST включені для розширення та налаштування поведінки.